toggle menu

[Java] 생성자(Constructor)

2012. 7. 23. 15:33 JAVA

생성자(constructor)는 특별한 메소드로 내가 원한다고 해서 호출하는 것이 아니라, 인스턴스가 생성되는 시점(new)에 딱 한번 호출된다.


생성자는 메서드 이름이 클래스 이름과 같기 때문에 대문자로 시작하며 아래와 같은 형태를 갖는다.

	modifier 클래스명 ( 파라미터 ... ) {

	}



모든 객체는 반드시 한 개 이상의 생성자를 갖으며 오버로딩이 가능하며 선언하지 않으면 자동으로 선언된다.

객체를 생성하면 오버로딩이라 할 지라도 모든 생성자 메소드가 다 생성된다.

public class Test {
	public Test() { //생성자에는 리턴타입이 없다.
		...
	}

	public Test( int arg1, int arg2 ) { //오버로딩도 가능하다.
		...
	}

같은 클래스 내에서 오버로딩 된 다른 생성자 하나를 호출하는 것은 생성자 구현부 첫번째 줄에서만 가능하다.

this( 파라메터 ... ); 의 행태로 가능!!



생성자의 활용

생성자의 접근제한자를 활용하면 클래스의 인스턴스 생성을 효과적으로 통제해줄 수 있다.

class Test {
	private Test() { //이 클래스는 생성자가 private 이므로 외부에서 직접 호출할 수 없다.
		...
	}

	//따라서 내부에 public static으로 Test 클래스형 리턴값을 갖는 메소드를 만들어 자체적으로
	//클래스를 생성하여 반환하는 형태로 사용하게 된다.
	public static Test getInstance() {
		return New Test();
	}
}

Test t = Test.getInstance(); //이런식으로 외부에서 가져오는 형태로 사용한다.


// 좀더 세련되게 아래와 같이 사용한다.
// getInstance()를 실행할 때마다 새로 생성할 필요는 없으므로,
// 이미 생성했을 경우 해당 객체를 다시 반환해주는 형태이다.

class Test {
	static Test t;

	private Test() { //이 클래스는 외부에서 직접 호출할 수 없다.
		...
	}

	public static Test getInstance() { //Test 클래스형 리턴값을 갖도록..
		if( t == null ) t = new Test(); // 한번도 생성되지 않은 경우에만 객체 생성
		return t;
	}
}

Test t = Test.getInstance(); //이런식으로 외부에서 가져오는 형태로 사용한다.	


JAVA 관련 포스팅 더보기