* 생성자
: 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다.
* 생성자의 조건
1. 생성자의 이름은 클래스의 이름과 같아야 한다.
2. 생성자는 리턴 값이 없다.
* 생성자의 사용 방법
클래스 이름(타입 변수명, 타입 변수명, ...) {
//인스턴스 생성 시 수행될 코드,
// 주로 인스턴스 변수의 초기화 코드를 적는다.
}
class Card{
Card(){ //매개변수가 없는 생성자
// ...
}
Card(String k, int num){ //매개변수가 있는 생성자
// ...
}
// ...
}
* 인스턴스 생성 수행 과정
Card c = new Card();
1. 연산자 new 에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다.
2. 생성자 Card()가 호출되어 수행된다.
3. 연산자 new 의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장된다.
* 기본 생성자(default constructor)
: 사실 모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 한다. 그러나 클래스에 생성자를 정의하지 않고도 인스턴스를 생성할 수 있었던 이유는 컴파일러가 제공하는 '기본 생성자(defualt constructor)' 덕분이었다.
cf) 기본 생성자가 컴파일러에 의해서 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을 때 뿐이다.
* 매개변수가 있는 생성자
: 인스턴스마다 각기 다른 값으로 초기화되어야 하는 경우가 많기 때문에 매개변수를 사용한 초기화는 매우 유용하다.
<예문>
public class Car { String color; //색상 String gearType; //변속기 종류 - auto(자동), manual(수동) int door; //문의 개수 Car() {} //생성자 Car(String c, String g, int d){ //생성자 color = c; gearType = g; door = d; } } Car c = new Car(); c.color = "white"; ---------> Car c = new Car("white", "auto", 4); c.gearType = "auto"; c.door = 4;
* 생성자에서 다른 생성자 호출하기 - this(), this
: 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능하다. 단 두 조건을 만족시켜야 한다.
1. 생성자의 이름으로 클래스이름 대신 this를 사용한다.
2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
- this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다.
- this(), this(매개변수) : 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
<예문>
package Exercise; class Car2 { String color; //색상 String gearType; //변속기 종류 - auto(자동), manual(수동) int door; //문의 개수 Car2() { //생성자 this("white", "auto", 4); } Car2(String color){ this(color, "auto", 4); } Car2(String color, String gearType, int door){ //생성자 this.color = color; this.gearType = gearType; this.door = door; } } public class CarTest2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Car2 c1 = new Car2(); Car2 c2 = new Car2("blue"); System.out.println("c1의 color="+c1.color+", gearType="+c1.gearType +", door="+c1.door); System.out.println("c2의 color="+c2.color+", gearType="+c2.gearType +", door="+c2.door); } }
* 생성자를 이용한 인스턴스의 복사
<예문>
Car (Car c) { // 인스턴스의 복사를 위한 생성자. color = c.color; gearType = c.gearType; door = c.door; }
'개발 관련 지식 > 자바(Java)' 카테고리의 다른 글
[자바] 오버라이딩(Overriding) (0) | 2014.07.02 |
---|---|
[자바] 변수의 초기화 (0) | 2014.07.02 |
[자바] 메서드 오버로딩(method overloading) (0) | 2014.06.24 |
[자바] 클래스멤버와 인스턴스멤버 간의 참조와 호출 (0) | 2014.06.24 |
[자바] 클래스메서드(static 메서드)와 인스턴스메서드 (0) | 2014.06.24 |