카테고리 없음 / / 2015. 8. 31. 15:50

자바 클래스(class) 3.생성자(constructor)

반응형

생성자(constructor)의 정의

생성자(constructor)는 객체가 생성 될 때 객체를 초기화하고 heap에 객체를 저장하는 메소드이다.

생성자는 객체가 생성될 때 실행된다. 생성자는 클래스명과 동일하며 종료 할 때 값을 반환하지 않는다. 즉 return 값이 존재하지 않는다.

 

생성자의 종류

Default(implicit) constructor - 기본 생성자

클래스에서 생성자를 따로 선언하지 않으면 JAVA에서 자동으로 Default constructor(기본 생성자)가 생성한다. 

단, 생성자를 명시적으로 정의하면 기본 생성자는 생성되지 않는다.


Explicit Constructor - 명시적 생성자

기본 생성자 외에 프로그래머가 생성자를 따로 명시적으로 선언 할 수 있다. 이 경우 기본 생성자는 생성되지 않는다.

 

생성자 선언 예
Class Image
{

    Image() //명시적으로 생성자를 선언&정의

{

System.out.println("Image() called:");

}

}


위의 클래스를 사용하여 객체를 생성했을 때

Image img = new Image();에서

생성자가 실행되며 이 때 println메소드가 실행되어

실행결과는 Image called(): 가 된다.

 

this 와 생성자 호출

생성자는 한 개 뿐만 아니라 여러 개를 정의하여 사용 할 수 있다.

아래 코드에서는 두 종류의 생성자를 정의하고 있다.

class Image
{

	Image(String filename)
	{
	this(filename, null);
	System.out.println("Image(String filename) called");
	}

	Image(String filename, String imageType)
	{
		System.out.println("Image(String filename, String imageType) called");
		if (filename != null)
		{
		System.out.println("reading " + filename);

		if (imageType != null)
		System.out.println("interpreting " + filename + " as storing a " +
		imageType + " image");
		}

	}

}

Image(String filename) 과 Image(String filename, String imageType) 두 생성자를 정의하고 있는데

첫번째 생성자에서 'this' 는 JAVA에서 해당하는 객체 자신의 레퍼런스를 의미한다. 따라서 this(filename,null) 은

Image클래스의 다른 생성자인 Image(String filename, String imageType)과 같다.

첫번째 생성자에서는 this()로 다른 생성자(Image(String filename, String imageType))를 다시 호출하여 객체를 초기화 하고 있는데 이렇게 하면 잉여

 코드를 줄여 객체의 크기가 커지는 것을 막고 불필요한 메모리(힙)의 점유를 막을 수 있다.

 

생성자 호출에는 다음과 같은 규칙이 있다.

  • 생성자 내에서 다른 생성자를 호출 할 때에는 항상 생성자 코드의 첫번째에서 실행되어야 한다. 
  • 한 생성자 내에서 다른 생성자를 호출 할 때에는 항상 this()로만 호출할 수 있다.
  • 생성자는 오직 다른 생성자만이 호출 할 수 있다.
  • this()를 일반 메소드로 명시 할 수 없다.


반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유
//목차