티스토리 뷰

생성자를 어떤 형태로든 구현했다면 기본(default) 생성자는 자동으로 생성되지 않는다.

 

 

 

[this] : 자신 클래스의 객체에 접근할 때 사용한다.

 

ex)

Class Book
{
	String Title;
    String Author;

	public Book(String Title, String Author)	// 생성자
    {
		Title = Title;		// ? 
        Author = Author;	// ?
    }
 }

위와 같은 코드를 작성했을 때,

Title = Title; 과 Author = Author; 부분에서 어떤 것이 Book 클래스의 멤버 변수를 지칭하고, 어떤 것이 생성자의 인자를 지칭하는 것인지 알 수 없어 혼돈이 생겨 원치 않는 결과가 나온다.

이런 경우 this 키워드를 사용한다.

this.Title = Title; 과 this.Author=Author로 수정하면 결과가 바르게 나온다. 

 

 

- this 키워드는 static 메소드에서 사용할 수 없다.

그 이유는 this는 인스턴스 변수를 나타낼 때 사용하지만 static은 인스턴스 변수가 생성되기 전에 먼저 메모리에 올라가기 때문이다.

 

 

 

[super] : 부모 클래스의 객체에 접근할 때 사용한다. 

 

 

1. 항상 생성자의 첫 줄에 와야한다.

 

 

2. 자식클래스의 생성자 내에는 부모클래스의 기본생성자를 호출하는 super(); 가 생략되어 있다.

 

※ 이 때 유의해야 할 사항!

-> 부모클래스에 인자가 있는 생성자가 있을 경우

    기본 생성자가 생성되지 않기 때문에 생략된 super(); 라는 코드가 실행될 수 없어 오류가 발생한다.

    해결 방법 1> 부모클래스에 기본 생성자를 수동으로 만들어준다.

    해결 방법 2> 부모클래스의 인자가 있는 생성자를 형식에 맞춰 호출해준다.   ex) super(name, age);

 

 

 

3. 모든 경우 최상위 부모 클래스는 Object이다.

 

 

4. super 키워드는 static 메소드에서 사용할 수 없다.

그 이유는 super는 인스턴스 변수를 나타낼 때 사용하지만 static은 인스턴스 변수가 생성되기 전에 먼저 메모리에 올라가기 때문이다.

 

 

 

반응형

댓글