이번 시간에는 변수에 대해서 알아보겠다. 변수란 리터럴(값)을 담는 일종의 그릇이다.

사용자 삽입 이미지
 Java는 다양한 타입의 리터럴을 사용할 수 있으며 엄격한(strict) 타입의 언어이기 때문에 리터럴을 담을 그릇인 변수의 타입도 리터럴과 일치해야만 올바로 담을 수 있다.
변수에 리터럴을 담는 것을 '할당' 혹은 '대입'이라고 하며, '=' 연산자가 이 기능을 한다. 그래서 '=' 연산자를 '할당연산자' 혹은 '대입연산자'라고 한다.
int i = 79;

위의 코드는 정수 타입의 변수 'i'를 선언하여 '79'라는 정수 리터럴을 할당하고 있다.
변수에는 원시 변수(primitve varlable)와 객체 참조(object reference)가 있다. 원시 변수란 Java에서 제공하는 원시 타입의 리터럴을 할당할 수 있는 변수를 말하며 객체 참조는 지난 강의에 보았듯이 인스턴스(객체)를 지정하기 위해 사용하는 변수이다.
클릭하면 원래 크기로 보입니다.

원시 변수와 객체 참조

public class DiffVariable {

public static void main(String[] args) {
int i = 75; // 원시 변수
Dog d = new Dog(); // 객체 참조

System.out.println("원시 변수 'i'의 리터럴 : " + i);
System.out.println("객체 참조 'd'의 리터럴 : " + d);
}

}


위의 코드를 실행하면 다음과 같은 결과가 출력된다.
원시 변수 'i'의 리터럴 : 75
객체 참조 'd'의 리터럴 : Dog@1fb8ee3

원시 변수 'i'는 75라는 정수 값을 할당했기 때문에 당연히 75가 출력된다. 하지만 객체 참조인 'd'는 출력 모양이 별스럽다. Java는 인스턴스를 만들면 해당 인스턴스를 메모리의 특정 위치에 저장하는데 이때 저장된 주소가 바로 16진수 숫자값으로 표시되는 주소이고 이 값은 그때 그때 달라진다. 그리고 Dog는 클래스 이름이라는 것은 눈치챘을 것이다. 이렇게 출력된 값은 아무 의미가 없기 때문에 보통 toString()이라는 메서드를 추가하여 인스턴스의 값을 출력하게 한다.
/**
* 클래스명 : Dog
* @author 정승용 (jeongsy10@empal.com)
* @version 1.01
*/
class Dog {
String kind; // 품종
int age; // 나이
String name; // 이름
String size; // 크기
String color; // 털 색깔

void seat() { System.out.println("앉는다."); } // 앉다
void standUp() { System.out.println("일어선다."); } // 일어서다
void run() { System.out.println("달린다."); } // 달린다
void stop() { System.out.println("멈춘다."); } // 멈춘다
void bark() { System.out.println("짖는다."); } // 짖는다
// toString() 메서들를 이용하여 개이름을 출력하도록 함
public String toString() {
return name;
}
}
toString()에 대해서는 '상속'이라는 개념을 설명할 때 다시 설명하도록 하겠다. 여기서는 toString() 메서드의 역할만 살펴보도록 하자. toString()은 인스턴스의 리터럴을 출력할 수 있도록 해준다. 실행 코드를 조금 변경하여 다시 실행해보자.
public class DiffVariable {

public static void main(String[] args) {
int i = 75; // 원시 변수
Dog d = new Dog(); // 객체 참조
d.name = "바둑이"; // 인스턴스의 필드 'name'에 "바둑이" 할당
System.out.println("원시 변수 'i'의 리터럴 : " + i);
System.out.println("객체 참조 'd'의 리터럴 : " + d);
}
}

인스턴스의 필드인 'd'에 "바둑이"를 추가했다. 이렇게 실행 시키면 결과는 다음과 같다.
원시 변수 'i'의 리터럴 : 75
객체 참조 'd'의 리터럴 : 바둑이
toString() 메서드의 역할을 알겠는가? toString()메서드를 활용하여 객체 참조가 갖고 있는 의미없는 리터럴 대신 인스턴스 안의 의미있는 필드 값을 출력할 수 있다.
이번 강의에서는 원시 변수와 객체 참조의 차이점을 살펴보았다. 다음 강의에서는 원시 변수의 타입에 대해서 살펴보겠다.

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 정샘

2008/08/12 15:56 2008/08/12 15:56
Response
No Trackback , No Comment
RSS :
http://jeongsam.net/rss/response/14

Trackback URL : http://jeongsam.net/trackback/14

Leave a comment
« Previous : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : ... 12 : Next »