자바에서 객체는 만들어질 때 멤버변수가 초기화 된 채로 만들어지는 것이 안전하고
바람직합니다. 질럿과 BigRib햄버거의 예를 살펴보면 그 이유가 명확합니다.
자바는 객체가 만들어질 때 멤버변수를 초기화 할 수 있는 아주 적절한 방법을 제공하고
있는데 그 것은 생성자 메소드(이하 생성자, Constructor)를 이용하는 방법입니다.
생성자는 클래스 정의에 일반 메소드처럼 존재합니다.
생성자는 프로그래머가 new 키워드를 이용해서 객체를 만들 때 자바 버추얼 머신이 반드시
수행해주는 메소드 입니다.
즉, 객체를 만든 다음에 레퍼런스를 이용해서 객체의 메소드를 호출하는 형태가 아니라
생성자는 자바 버추얼머신이 객체를 만들 때 실행을 시켜주기 때문에 생성자 안에서 객체의
멤버변수를 초기화를 수행한다면 객체가 만들어 졌을 때는 언제나 생성자를 수행한 다음
일 테고, 생성자 안에서 일어나는 초기화는 항상 보장 받을 수 있는 것입니다.
클래스에는 여러가지 메소드들이 있는데 , 그 여러 메소드들중에 생성자는 독특한 이름을
갖고 있습니다. 생성자의 이름은 반드시 클래스의 이름과 같아야 합니다.
즉, 클래스의 이름과 같지 않은 메소드는 생성자가 아닙니다. 물론 클래스와 이름이
같은 메소드는 무조건 생성자라는 것도 맞는 말입니다.
예제 1 - 15는 Zealot 클래스에다 초기화를 수행하는 생성자를 추가한 모습입니다.
class Zealot {
int strength; // 질럿의 체력
int shields; // 질럿의 쉴드
Zealot() { // Zealot 클래스의 생성자
strength = 100; // 멤버변수 strength를 100으로 초기화
shields = 100; // 멤버변수 shields를 100으로 초기화
}
. . .
}
예제 1 - 15
예제 1 - 15의 Zealot 클래스를 통해서 만들어지는 모든 질럿은 체력과 쉴드가 100으로
초기화 된채로 만들어 집니다.
Zealot 클래스의 생성자는 Zealot이고,BigRib클래스의 경우 생성자의 이름은 BigRib일텐데,
예제 1 - 8의 BigRib클래스에는 같은 이름의 생성자가 보이지 않습니다.
하지만 BigRib클래스에 BigRib으로 시작하는 메소드, 즉 생성자가 안 보인다고 해서
BigRib 클래스에는 생성자가 없는 것이 아닙니다. 다만 BigRib클래스에서는 생성자를
명시적으로 기록하지 않았을 뿐입니다. 예제 1 - 7의 Zealot클래스 역시 마찬가지 입니다.
생성자가 없는 것이 아니라 명시적으로 생성자를 기록하지 않았다고 하는 것이 옳습니다.
생성자는 주로 객체의 멤버변수를 초기화 하는데 사용되는, 예제 1-7의 Zealot클래스,
예제 1- 8 의 BigRib클래스에서 처럼 클래스를 정의할때 명시적으로 생성자를 써주지
않아도 클래스에는 생성자가 묵시적으로 존재하게 되는데 이런 생성자를 기본생성자
(Default Constructor, 디폴트 생성자)라고 부릅니다. 디폴트 생성자는 메소드의 인자가
없는 것이 특징입니다. 즉 생성자에 인자가 있는 것은 디폴트 생성자가 아니라는 말이지요.
예제 1- 8의 BigRib 클래스의 경우는 멤버변수 price의 초기화를 생성자에서 하지 않고
멤버변수를 선언함과 동시에 초기화를 수행하고 있는데, 이렇게 멤버변수를 선언함과
동시에 초기화를 수행하더라도 상관은 없습니다.
다만 이렇게 메범변수를 초기화 할경우 객체가 만들어 질 때 생성자 메소드보다 초기화
과정이 먼저 수행이 됩니다. 약간의 미묘한 차이가 있습니다만 어떤 방법으로 초기화를
수행하더라도 무난하다고 생각합니다. 필자는 생성자의 존재이유를 멤버변수의 초기화로
생각하기 때문에 멤버변수는 일반적으로 생성자에서 초기화합니다.
class BigRib {
int price;
String description;
BigRib() { // 초기화를 담당하는 BigRib클래스의 생성자
price = 2500;
description = “best selling burger in 2002”;
}
int getPrice() {
return price;
}
}
예제 1 - 16
예제 1 - 16은 예제 1 - 8과 같은 내용의 클래스입니다.
다만 생성자에서 멤버변수인 price 와 description을 초기화하고 있습니다
'자바 Basic > 자바언어의핵심' 카테고리의 다른 글
자바공부-13.클래스 변수와 클래스 메소드 (static variable & static method) (0) | 2007.11.30 |
---|---|
자바공부-12.객체의 존재영역 (0) | 2007.11.30 |
자바공부-10.인스턴스 변수의 초기화 (0) | 2007.11.30 |
자바공부-9.인스턴스 변수 (0) | 2007.11.30 |
자바공부-8.레퍼런스에 대하여 (1) | 2007.11.30 |