본문 바로가기

프로그래밍 언어/코틀린_쌩초보를 위한 기초

쌩초보를 위한 기초_25_참조 키워드 super & this

참조 Reference

 

참조란 데이터 자료를 보고 참고하는 것을 말한다.

클래스에서 특정 메써드나 속성, 생성자를 참조해야 할 때 사용하는 키워드가 있다.

 

상위 클래스에는 super

현재 클래스에는 this

 

 

super keyword

 

super는 언제 사용하는가?

overriding할 때 상위 클래스를 그대로 사용하고 필요한 내용만 추가하고 싶을 때 사용한다.

super를 사용해서 상위클래스의 메써드, 속성, 생성자 등을 사용할 수 있다.

 

어떻게 작동하고 있는 지 지금까지 살펴본 내용을 적용하면서 확인해보자.

get() 함수는 클래스의 멤버 변수를 만들 때 값을 가져오는(get) 작업을 임의로 지정하는데 사용하는 함수다.

 

Cookie클래스와 bake() 메써드는 상속을 할 수 있다.

bake()메써드의 실행 부분은 "쿠키 굽기"를 출력하는 내용이다.

그 다음 멤버 변수 color에 white를 가져와서 넣는다.

 

WhiteCookie클래스는 Cookie클래스를 상속받는다.

override한 bake()메써드에서 "쿠키에 색 더하기"를 출력하는 함수를 추가하기 위해 super를 사용한다.

그 다음 멤버 변수 whiteColor에는 상위 클래스의 멤버변수 color를 가져와서 추가하기 위해 super를 사용한다.

 

this keyword

 

this는 현재 클래스의 객체(메써드, 속성, 생성자)를 참조할 수 있는 키워드이다.

this와 super를 사용한 예제 코드를 보자.

 

main()함수에서 choco(초코)라는 객체를 MakingCookie 클래스로 만들었다.

매개변수(Chocolate)가 한 개이므로 MakingCookie클래스의 첫번째 생성자로 간다.

this의 매개변수 2개를 가진 객체(두번째 생성자)를 현재 클래스에서 찾는다.

두번째 생성자의 super의 매개변수 2개는 상위 클래스의 객체를 참조한다.

상위 클래스인 Cookie클래스의 두번째 생성자를 참조한다.

 

실행해서 어떤 결과가 나오는 지 확인하자.

 

Inner Class 내부클래스

 

클래스 안에 다시 클래스를 선언할 수 있다.

이때 안에 선언된 클래스를 내부클래스(Inner Class)라고 한다.

만약 내부클래스에서 바깥클래스를 참조할 때는 @기호 다음에 바깥클래스명을 적으면 됩니다.

 

위와 같은 클래스 구조일 때 Second.test()는 현재 속해있는 Second클래스의 test()에 접근하는 방법이다.

super@Second.test()는 Second클래스가 상속받고 있는 First클래스에 있는 test()메써드에 접근하는 방법이다.

main()함수에서는 변수를 만들어 Second클래스의 내부클래스Inside에 있는 innerTest()메써드에 접근하는 방법이다.

 

super와 this 키워드에 대해서는 이 정도만 다룬다.

개념만 정확히 이해하고 실제 게임을 만들 때 자세히 살펴보기로 한다.

 

끝.