티스토리 뷰
객체 지향 프로그래밍을 처음 접하는 사람은 물론이고, 이미 사용하고 있는 사람들도 추상 클래스와 인터페이스의 사용 형태가 비슷하여 목적을 명확하게 구분하지 못 하는 경우가 허다하다. (물론 나도)
사용 목적을 파악하면 사용 방법 또한 자연스럽게 터득하게 되기 때문에 이번 포스팅에서는 추상 클래스와 인터페이스의 사용 목적을 다뤄볼 것이다.
추상 클래스와 인터페이스의 사용 목적
우선 핵심적인 부분은 추상 클래스는 클래스이고 인터페이스는 클래스가 아니다.
뭔 당연한 소리를 대단한 것 마냥 얘기하나 싶겠지만, 각각의 정체성을 나타내는 부분이기 때문에 짚고 넘어갈 필요가 있었다.
흔히 객체지향에서 클래스와 인터페이스를 구분할 때는 "is a", "has a"라는 말로 설명을 하곤 한다.
추상 클래스는 클래스이기 때문에 "is a"를 목적으로 한다. 클래스는 특정 객체를 정의할 목적으로 사용이 된다. 추상 클래스는 객체가 포함하는 행위나 특성 중 하위에서 재정의해서 사용할 함수만 추상형으로 명시하는 클래스를 말한다.
인터페이스는 "has a"를 목적으로 한다. 인터페이스는 특정 객체가 어떠한 행동을 가진다는 것을 명시할 목적으로 사용한다.
최근의 인터페이스 행보
초기 인터페이스는 추상 함수 정의가 주목적이었고 변수라고 해봐야 상수 변수 정도를 추가할 수 있었다.
하지만 자바 8 버전, 코틀린에서는 인터페이스에 구현체를 포함하는 함수를 정의할 수 있게 되었고 프로퍼티도 get( ), set( ) 함수 등을 이용해 로직을 추가할 수 있게 되면서 클래스와 점점 비슷해져 간다는 느낌을 줬다. 이런 업데이트 때문에 추상 클래스와 인터페이스 간의 차이가 더 모호해진 것 같다.
그래서 추상 클래스와 인터페이스의 사용 목적을 더 바로 알 필요가 있다. (사용 목적은 위에 정리)
함수, 프로퍼티로 일정 정도 로직을 추가할 수 있게 언어가 발전 해온 것은 인터페이스가 클래스와 동일한 역할을 하기 위한 것이 아니라 인터페이스 자체를 더욱 효과적으로 활용하기 위한 목적일 것이다.
참고 문헌
[깡샘의 코틀린 프로그래밍] 강성윤 지음 <루비페이퍼>
'Programming > 코틀린(Kotlin)' 카테고리의 다른 글
[코틀린] Object 클래스 (feat. 깡샘) (0) | 2021.04.25 |
---|---|
[코틀린] 10. 추상 클래스와 인터페이스 (feat. 깡샘) (0) | 2021.04.12 |
[코틀린] 09. 상속 (feat. 깡샘) (0) | 2021.04.12 |
[코틀린] 08. 프로퍼티 (feat. 깡샘) (0) | 2021.04.11 |
[코틀린] 07. 클래스 (feat. 깡샘) (0) | 2021.04.08 |