본문 바로가기
Study/중앙정보처리학원과정

10일차. this와 this()

by 얏옹이 2022. 11. 7.
반응형

 

this.과 this()의 차이를 알아보겠습니다. Java에서 비슷해보이는 이 둘은 일단 this.는 참조변수이고

 

this()는 생성자 입니다.

 

먼저 this() 생성자부터 알아보자면, 생성자에서 다른 생성자를 호출할때 사용합니다.

 

예를들어서 default constructor(기본생성자) 에서 this()를 이용하여 매개변수가 있는 생성자를 호출해줄수 있습니다.

 

그렇다면 기본생성자를 이용하여 객체 생성만 했지만, 매개변수가 있는 생성자를 호출하면 

 

기본생성자로 객체 선언과 동시에 특정 값으로 필드 초기화를 해줄수가 있게 됩니다.

 

그리고 this()는 가장 첫줄에만 작성 가능합니다.

 

 

예를들어 기본생성자에 이런식으로 this를 주었지만, 상단에 코드를 작성하게 되면

 

"Constructor call must be the first statement in a constructor" 라는 에러를 보시게 됩니다.

 

생성자 호출은 생성자의 첫줄에서만 가능하다. 라고 해석할수가 있겠네요.

 

 

상단을 다 주석처리 해줬습니다. 주석은 참고로 줄에 포함되지 않습니다.

 

그러니 에러가 없어지고 정상적으로 코드가 작성합니다.

 

기본생성자 ThisStyud()에서 this를 하고 매개변수가 있는 생성자를 호출해줍니다.

 

그럼 객체 선언은 기본생성자로 매개변수 없이 선언해주었지만, 생성자에서 다른 생성자를 호출하면서 매개변수 값을 넘겼기때문에, 

 

필드 초기화는 매개변수가 있는 생성자를 호출해서 필드 초기화 한것과 동일한 결과값을 얻을수 있습니다.

 

 

그럼 왜 this()를 쓰는지? 에 대해서는, 일단 코드 중복을 제거하려고 생성자들끼리 호출하도록 만들어주는것입니다.

 

다양한 생성자를 만들고 똑같은 일을 반복하는 수행문들을 this() 생성자로 중복코드를 줄일수 있습니다.

 

 

 

이어서 참조변수 this는 인스턴스 자신을 가르키는, 이라는 뜻입니다. 객체 자신을 나타내는 참조변수 라고도 불립니다.

 

우리는 클래스에서 필드와 메소드를 선언합니다. 생성자도 클래스내에서 생성합니다.

 

그래서 Class의 구성요소는 Field와 Method, Constructor로 이루어져있는데. 주로 this. 은 이 Class 내에서

 

지역변수와 전역변수를 구별하기 위해서 사용합니다.

 

 

주로 생성자로 필드 초기화를 할때 변수는 지역변수, 그리고 필드는 전역변수이기때문에 이 둘을 구별하고자

 

전역변수에게 this.를 많이 붙여줍니다.

 

 

여기를 보시면 매개변수 이름도 name, 그리고 전역변수도 name입니다.

 

이럴때 name = name; 이라고 선언하면 매개변수값을 매개변수에 넣겠다는건지, 매개변수값을 전역변수에 넣어주겠다는건지 알수가 없게 됩니다. 컴파일 에러는 나지 않지만 결과값이 이상해질수가 있는거죠.

 

그래서 this를 붙여서 전역변수와 매개변수를 구별해줘서 정확하게 매개변수로 받은 값이 전역변수에 도달할수 있게

 

this로 구별해주는것입니다.

 

 

반응형