'참조형'에 해당되는 글 1건

  1. 2009.04.27 자바의 변수 - 변수의 타입에 따라서...
Java/SE2009. 4. 27. 18:41
변수

자바에서 OOP 라는 개념을 정확히 하고 나면 자바에 과연 변수 type이  필요가 있을까?
라는 의문을 한번 가져봐야겠다.

Integer, Double, Float ...  등등
C 언어에서 사용하는 int , double, float 등과 같은 데이터 타입은 자바에서 위와 같이 클래스로 구현이 되어져 있다.
그렇다면 자바에 int, double, float 등과 같은 변수 타입이 존재할까?
물론 존재한다. 당연한거 같지만 그 쓰임의 의미가 틀리다.

1. 기본형 변수
자바에서도 기본 타입으로 기본형 변수 8개를 제공 하고 있다. (primitive type)
그 이유는 바로 실행의 효율성 때문이다.

하도 오래전에 설명을 들은 이야기라 자세한건 기억이 나질 않지만.. Integer 클래스를 사용해서 값을 가지고 있다면
그 클래스에 부가적으로 들어가 있는 여러 메소드들을 활용 할수 있어 좋지만,
반면 그냥 변수 안에 나는 1 이라는 값을 하나 가지고 싶을 뿐인데, 쓸데없는 메소드를 주렁주렁 달고있는 클래스 객체에
덜렁 1값 하나를 넣어놓는다는건 아무리 봐도 비효율적이라고 밖에 생각이 들지 않는다.

따라서 자바에서도 기본적인 변수 타입을 제공하고 있는것이다.
위에서 설명한 8가지 변수를 소개해 본다.

* 형변환 방향(오른쪽으로)

숫자형 : byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
                                |
문자형 :                 char(2)
논리형 : boolean


위의 변수 타입에서 숫자형, 문자형, 논리형 간에는 형변환이라는것이 이루어지지 않는다.
형변환이라는것은 오빠가 형으로 변하는게 아니라...  (몹쓸개그 작렬!!)
작은 타입의 변수가 큰변수 타입으로 자동으로 변환될수 있다는것이다.
즉, byte형 타입의 변수에 입력된 값은 short 형 변수에 대입하더라도 아무런 문제가 없다는 말씀이다.

반대로 int 형 변수의 값을 short 형 변수에 넣으려고 한다면 자동으로 들어가지 않게 된다.
쉽게 생각하자면 큰 그릇에 물을 꽉 차게 부어넣었다.
그리고나서 작은 그릇으로 그 물을 옮긴다면.. 전부 옮길수 있을까?

형변환에 대해서는 나중에 좀더 자세히 알아보도록 하자.

2. 참조형 (Reference type, 객체형) 변수
참조형, 객체형 변수는 우리가 만들어 내었거나, 혹은 자바 SDK에서 제공하고 있는 클래스 타입의 변수들을 말한다.
흔히 자주 쓰는 System.out.println() 를 보면은 System 객체가 사용 되는것을 볼 수 있다.
적절한 예시는 아니었다. System 객체를 사용하는데에는 변수 선언을 하지 않기 때문에 그렇다.
이 내용은 static 메소드를 설명하면서 좀 더 알아보도록 하고,

다른 예를 들자면
String str = "";
과 같이 String 객체 타입의 변수 str을 선언하는걸 보면 알수 있다.
이런식으로 쓰이는것들이 객체형 변수이다.

객체형 변수들도 형변환이 이루어질수 있다.

* 형변환 방향(위로)

                Object
                    |
                Human
                    |
                Superman
원리는 같다고 보면 된다.
큰그릇에 작은 그릇의 물을 담을수 있고, 반대로 작은그릇에 큰그릇의 물을 담을수 없는것이다.
이전 포스트에서 설명했듯이.. 모든 객체형 변수, 클래스 타입은 Object 를 상속 하고 있다.
따라서 어떠한 객체 타입이든 Object 로 형변환이 이루어 질수 있다.
Posted by 햇 님