클래스와 인터페이스의 차이점

November 3, 2023 (1y ago)

클래스는 모든 자료형을 포함할 수 있는 객체이다. 클래스는 메소드를 포함할 수 있고 getter, setter를 포함이 가능하고 인스턴스 속성을 지닐 수 있다.

하지만 인터페이스는 인스턴스 속성을 포함할 수 없으며 메소드와 static을 통한 정적인 필드만을 지닐 수 있다.

클래스와 인터페이스의 차이점은 또한 인터페이스는 추상 자료형이지만 클래스는 자료형이 구체적으로 지정되어 있지 않은 템플레이트라고 할 수 있다. 내부에 어떠한 메소드와 인스턴스 속성등을 사용하는지에 따라 바뀔 수 있다.

추상 자료형은 무엇일까? 추상자료형은 데이터들의 연산이나 자료들에 대한 연산을 명기한 것들을 이야기한다. 말이 좀 어렵다. 현실의 예시로 생각을 해볼 필요가 있다.

밥솥을 추상자료형의 예시로 생각해보면 밥솥에 들어 있는 쌀은 자료가 된다. 우리가 이 쌀을 취사 버튼을 눌러 취사할 수 있고 예약취사를 사용하여 취사할 수도 있다. 밥이 완성되면 보온 버튼을 눌러서 밥을 보온시킬 수도 있다. 하지만 우리는 취사가 어떻게 되는지는 관심이 없다 또한 몇 와트의 전기를 소모하고 얼마만큼의 대기전력이 발생하는지에 대한 것 또한 관심이 없다.

단순히 밥솥(객체)내의 쌀(자료)를 어떻게 조리(연산)할 것인지 결정(질의)을 내려 밥을 완성(자료를 연산)하는 것에만 관심이 있다.

앞서 설명한 것이 추상자료형이다. 자료에 대한 연산만을 집중하여 다루는 자료형을 추상 자료형이라고 하고 인터페이스가 이 경우에 해당된다.

상속보다 합성을 사용하라

상속은 '나는 무엇의 ~이다.'로 정의되는 관계를 이야기 한다. (예: 자동차는 교통수단이다.) 합성은 '~을/를 가진다.'의 관계를 뜻한다.(예: 자동차는 엔진을 가진다.)

객체들이 자체적으로 행동을 구현하는 대신 다른 객체에게 이를 위임한다.