Programming language/Kotlin

[코틀린 OOP #2] - 상속, 오버라이딩

Think-About 2022. 8. 17. 09:32

코틀린 클래스 상속

클래스를 선언할 때 다른 클래스의 기능을 확장하고자 참조하여 정의하는 것을 상속이라고 합니다.
다른 클래스를 상속받을 때는 클래스 이름 뒤에 콜론과 상속받을 클래스의 이름을 명시하면 되겠습니다.
코틀린에서 다른 클래스를 상속하는 이유는 기존의 클래스를 재사용하기 위함입니다.
코틀린에서 클래스는 기본적으로 다른 클래스가 상속할 수 없도록 되어있습니다.
이전 글에서 클래스를 정의하고 생성자도 다루어보았습니다.

 

[코틀린 OOP #1] - 클래스와 생성자

코틀린 언어의 기본적인 내용을 앞서 살펴보았습니다. 마지막 중요한 관문이 남아있습니다. 바로 코틀린에서의 객체지향 프로그래밍(OOP)입니다. 코틀린 객체지향 프로그래밍에 대해 공부하기

think-about.tistory.com

코틀린으로 선언한 Student 클래스
코틀린으로 선언한 Student 클래스

예시로 Student 클래스를 선언했었죠?
이 Student 클래스는 기본적으로 상속할 수 없음을 의미합니다.
클래스를 다른 클래스에서 상속할 수 있도록 하려면 open 키워드를 사용해주어야 합니다.
Student 클래스를 상속받아서 subStudent라는 클래스를 선언해보도록 하겠습니다.

코틀린 클래스 상속
코틀린 클래스 상속

open 키워드를 사용하여 다른 클래스가 상속받을 수 있는 클래스로 Student 클래스를 변경했습니다.
subStudent는 Student 클래스를 상속받아 클래스를 선언했다고 표현합니다.
이때 Student 클래스를 상위 클래스, subStudent 클래스를 하위 클래스라고 합니다.
코틀린에서 클래스를 상속받아 클래스를 선언했을 때, 하위 클래스의 생성자는 상위 클래스의 생성자를 호출해야 합니다.
위의 예시에서는 subStudent의 생성자가 호출되면 name과 address는 상위 클래스(Student)의 생성자로 넘겨줍니다.
참고 : 필자의 경우 보조 생성자가 편해서 위처럼 작성했으며, 주 생성자를 이용하여 구현하셔도 됩니다.


subStudent 클래스의 객체를 생성하고 printStudent 메소드를 호출한 결과는 다음과 같습니다.

코틀린 클래스 객체 생성 및 멤버 메소드 호출
코틀린 클래스 객체 생성 및 멤버 메소드 호출


코틀린 오버라이딩

상속을 하는 이유는 다른 클래스를 재사용하기 위함이라고 설명드렸습니다.
앞의 예시를 보면 subStudent에서 Student의 printStudent 함수를 자신의 멤버처럼 사용했음을 확인할 수 있습니다.
하지만 뭔가 이상한 점이 있지 않았나요?
subStudent에서 grade라는 멤버 변수가 하나 더 있는데, 출력 결과는 name과 address만 출력됐습니다.
grade도 출력이 되도록 수정해야 합니다.
이런 경우 상위 클래스에 정의된 함수를 하위 클래스에서 재정의해야 하는 경우라고 하며,
이를 오버라이딩(Overriding)이라고 합니다.

예시로 바로 살펴보도록 하겠습니다.

코틀린 오버라이딩 예시
코틀린 오버라이딩 예시

윗부분의 코드를 보면 printStudent() 앞에 open 키워드를 사용한 것을 확인할 수 있습니다.
클래스처럼 함수 또한 다른 곳에서 재정의할 수 있도록 open 키워드를 꼭 사용해주어야 합니다.
상위 클래스(Student)의 함수(printStudent)와 같은 이름을 사용하는 것이기에 하위 클래스(subStudent)에서는 함수 앞에 override 키워드를 꼭 사용해주어야 합니다. subStudent의 객체를 생성하고 printStudent 메소드를 호출한 결과 grade 또한 출력되는 것을 확인할 수 있습니다.


코틀린 객체지향 프로그래밍

이전 글을 잘 이해하셨다면 이번 글은 쉽게 이해하셨을 거라 생각합니다.
요즘 대부분의 언어가 객체지향 프로그래밍을 하도록 변경되고 서비스되고 있으니 객체지향 프로그래밍에 대한 내용을 정확히 이해하시고 실습해보시길 바랍니다.


Think-about ~ Kotlin!

'Programming language > Kotlin' 카테고리의 다른 글

[코틀린 OOP #3] - 접근 제한자  (1) 2022.08.18
[코틀린 OOP #1] - 클래스와 생성자  (0) 2022.08.16
코틀린 반복문  (0) 2022.08.13
코틀린 컬렉션 타입  (2) 2022.08.13
코틀린 함수 매개변수  (2) 2022.08.05