Java - 클래스 - 생성자, this, this()

반응형

생성자

  • 함수의 리턴 타입이 없음
  • 클래스의 이름과 같은 이름으로 함수를 정의
  • 메모리에 객체를 생성하여 영역을 확보
  • 바로 인스턴스 변수에 데이터 셋팅
  • 즉, 설정된 변수에 초기 값을 부여하는 것

this

  • this는 객체 자기 자신을 의미, 자신의 메모리를 가르킴
  • 전역 변수와 지역 변수를 구분짓기 위한 참조 변수
    • 생성자의 파라미터 이름이 전역 변수와 이름이 같을 때 구분하기 위해 사용
  • this.변수명으로 정의
  • 클래스 변수, static 키워드에서는 this를 사용 할 수 없음
public class ThisTest {
   String message = "Hi"; // 전역 변수
   
   void setMessage(String message) {
      this.message = message; // 지역 변수, this로 지역 변수 구분
   }
   
   void print() {
      System.out.println("message : " + message);
   }
   
   public static void main(String[] args) {
      ThisTest tt1 = new ThisTest();
      tt1.print(); // message : Hi!
      
      ThisTest tt2 = new ThisTest();
      tt2.setMessage("HelloWorld!");
      tt2.print(); // message : HelloWorld!
   }
}

 

this()

  • this는 참조 변수, this()는 생성자
  • 오버로딩 된 다른 생성자를 호출 할 때 사용
  • 호출을 위해 사용하는 this() 생성자는 항상 첫 문장에 정의, 그렇지 않으면 에러 출력
public class ClassTest {
	String message;
    
	// 생성자
	public ClassTest() {
		this("Hello! "); // 다른 생성자 호출
	}
	
	// 생성자 오버로딩
	public ClassTest(String message) {
		this.message = message;
	}
	
	public void print() {
		System.out.println(message);
	}

	public static void main(String[] args) {
		ClassTest ct1 = new ClassTest();
		ct1.print(); // message : Hello!
		
		ClassTest ct2 = new ClassTest("HelloWorld!");
		ct2.print(); // message : HelloWorld!
	}
}

 

  •  오버로딩된 같은 이름의 생성자 호출시 항상 첫 문장에 정의하여야 함

< this()로 다른 생성자를 호출 할 때에는 첫 줄에 정의해야한다. >

 

생성자로 인스턴스 변수 값 설정하기

  • 기본 값을 설정 할 때 사용
  • 인스턴스 변수 할당시 값을 필수로 입력
  • 설정한 값을 입력하지 않으면 에러 출력
    • 사용자의 값 누락을 방지할 수 있음
public class ClassTest {
   String message;
   
    // 생성자
    public ClassTest(String message) {
        this.message = message;
    }

    void print() {
        System.out.println("message : " + message);
    }
	
    public static void main(String[] args) {
        ClassTest ct1 = new ClassTest();
        ct1.print(); // Error: The constructor ClassTest() is undefined

        ClassTest ct2 = new ClassTest("HelloWorld!");
        ct2.print(); // message : HelloWorld!
    }
}
반응형