작성
·
142
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
shin8877123님, 인터페이스와 추상 클래스에 대해서 혼돈이 오는 부분에 대해 질문 주셨군요. 인터페이스와 추상 클래스 모두 상속을 통해 기능을 확장하거나 다형성을 구현하는 데 사용됩니다. 하지만, 몇 가지 주요 차이점이 있죠.
첫째, 인터페이스는 여러 개를 구현(implements)할 수 있어서 다중 상속과 유사한 효과를 낼 수 있습니다. 이는 클래스가 여러 인터페이스에 정의된 메서드를 모두 구현해야 한다는 의미이며, 각기 다른 기능을 인터페이스로 정의하여 필요한 기능을 조합하는 데 유용합니다.
반면 추상 클래스는 클래스가 단일 상속만 가능하기 때문에 여러 추상 클래스의 특성을 동시에 상속받을 수 없습니다.
둘째, 인터페이스는 구현체를 전혀 포함하지 않거나 (자바 8 이후) default 메서드를 통해 일부 구현을 포함할 수 있습니다. 이는 인터페이스를 사용하여 API 또는 행위의 규약을 정의하며, 이를 구현하는 클래스가 구체적인 행위를 정의하게 됩니다.
추상 클래스는 구현이 불완전한 메서드(추상 메서드) 뿐만 아니라 완전히 구현된 메서드도 가질 수 있어 상속받는 클래스에서 이를 활용할 수 있습니다.
셋째, 인터페이스는 상속 구조에서의 계약을 의미합니다. 즉, 이 인터페이스를 구현하는 모든 클래스는 반드시 인터페이스의 메서드 명세를 구현해야 한다는 계약을 지키게 됩니다.
마지막으로, 상황에 따라 인터페이스와 추상 클래스를 선택하는 기준은 달라질 수 있습니다. 인터페이스는 다양한 구현을 가능하게 하는 느슨한 결합과 확장성에 적합하고, 추상 클래스는 공통의 기본 동작이나 상태를 공유하는 경우에 유용합니다. 때문에 상속을 통해 클래스의 성질을 확장하는 것이 아니라, 특정 행위를 외부에 약속하는 목적으로 인터페이스를 사용하게 되는 것입니다.
open 키워드를 이용한 상속도 유용하지만, 이는 클래스에 상속 가능성을 부여하는 것으로 상속받는 클래스가 상위 클래스의 특성을 가져야 하는 경우에 사용됩니다. 반면 인터페이스는 클래스 간의 구현 상의 계약을 정의할 때 사용됩니다.
인터페이스와 추상 클래스, 그리고 open 클래스는 각각의 사용 목적과 적용 상황에 따라 적절히 사용될 수 있는 장점들을 가지고 있으니, 실제 코드를 설계할 때 이러한 차이점들을 고려하여 적절한 선택을 하시면 좋겠습니다.
감사합니가다