[kotlin] 추상 클래스와 인터페이스의 장단점 비교
추상 클래스와 인터페이스는 객체 지향 프로그래밍에서 중요한 역할을 합니다. 이 둘을 비교하여 각각의 장단점에 대해 알아보겠습니다.
추상 클래스
추상 클래스는 일반적인 클래스와 동일하게 메서드와 속성을 가지지만, 추상 메서드를 가질 수 있다는 점에서 차이가 있습니다.
장점
- 추상 메서드를 포함할 수 있음: 하위 클래스에서 반드시 구현해야 하는 메서드를 추상 클래스에서 정의할 수 있습니다.
- 일반 메서드를 가질 수 있음: 구현을 가지고 있는 메서드를 포함할 수 있어 중복을 줄일 수 있습니다.
- 필드를 가질 수 있음: 인터페이스는 필드를 가질 수 없지만, 추상 클래스는 필드를 가질 수 있습니다.
단점
- 다중 상속이 불가능: Java와 같은 몇몇 언어에서는 단일 상속만을 지원하므로, 이미 다른 클래스를 상속하고 있는 상태에서 추상 클래스를 상속 받을 수 없습니다.
인터페이스
인터페이스는 추상 메서드와 상수만을 갖는데, Java 8부터는 디폴트 메서드와 정적 메서드를 추가할 수 있게 되었습니다.
장점
- 다중 상속이 가능: 여러 인터페이스를 동시에 구현할 수 있습니다.
- 클래스 간 결합도를 낮출 수 있음: 클래스가 반드시 가져야 하는 동작을 정의함으로써, 결합도를 낮출 수 있습니다.
단점
- 구현된 메서드를 가질 수 없음: Java 8부터는 디폴트 메서드를 추가할 수 있지만, 이로 인해 다이아몬드 문제가 발생할 수 있습니다.
- 필드를 가질 수 없음: 상태를 저장하는 필드를 인터페이스에 추가할 수 없으며, Java 9부터는 private 필드를 허용하게 되었습니다.
결론
추상 클래스와 인터페이스는 각각의 장단점을 가지고 있습니다. 추상 클래스는 상태와 메서드를 포함할 수 있지만, 다중 상속이 불가능하다는 단점이 있습니다. 반면에 인터페이스는 다중 상속이 가능하고, 결합도를 낮출 수 있다는 장점이 있지만, 구현된 메서드를 가질 수 없고, 필드를 추가할 수 없다는 단점이 있습니다. 개발하려는 시나리오에 맞게 적절히 추상 클래스와 인터페이스를 활용하는 것이 중요합니다.
참고 자료: Oracle Java Documentation