개발Story

개발자 면접질문 단골질문인 인터페이스와 추상클래스의 차이점에대해서 설명해보겠습니다.

 

인터페이스란 내부 인스턴스를 둘 수 없으며 필드 선언시 static으로 정의해야 합니다. 메서드 껍데기만 가지고있습니다. 다중상속을 허용합니다.

 

인터페이스는 내부 인스턴스를 둘 수 없으며 필드 선언 시 public static final으로 정의해야 합니다. 그 이유는 인터페이스는 그 자체로 인스턴스화 할 수 없기 때문입니다. 따라서 메모리에 할당되는 시점 즉 초기화 시점에 할당해야 하는데, 해당 방식은 static으로만 가능합니다. 인터페이스는 메서드 껍데기만 가지고 있습니다. 따라서 인터페이스를 쓰는 경우 이를 구현하는 클래스가 추가될 때 마다 일일이 전부 구현을 해줘야 합니다. 

하지만 소프트웨어의 전체적인 구조를 설계하는 초기단계의 경우 유용하게 쓰일 수 있습니다.

인터페이스는 특정 행위를 기반으로 묶이는 개념이기 때문에 해당 인터페이스를 구현한다면 동일한 동작을 보장할 수 있으며, 이에 따라 추상화된 요소로 클래스를 다룰 수 있게 해주어 클래스간의 겨합도를 낮추는 핵심적인 역할을 하게 됩니다.

또한 다중상속(다중구현)을 허용합니다. 어차피 인터페이스는 껍데기만 가지고 있으므로, 어떤 상위클래스에서 선언한 메서드이든 상관이 없기 때문입니다. 인터페이스에 정의된 메서드는 하위 메서드에서 무조건 구현해야하므로 무조건 public 으로 선언해야 합니다.

 

 

추상클래스는 내부 인스턴스 및 필드를 자유롭게 정의할 수 있습니다. 추상메서드가 1개 이상 존재하면 되기 때문에 메서드의 일부 구현이 가능합니다. 다중상속이 불가능합니다.

 

추상클래스는 내부 인스턴스 및 필드를 자유롭게 정의할 수 있습니다. 추상메서드가 1개 이상 존재하면 되기 때문에 메서드의 일부 구현이 가능합니다. 이러한 것을 Teplpate Method 패턴이라고 합니다. 내부 인스턴스 및 필드를 가질 수 있고, protected와 private 메서드 필드 등을 가질 수 있어 하위 클래스나 다른 클래스에 이를 숨길 수 있습니다. java에서는 클래스에 대한 다중상속을 지원하지 않는데, 이는 같은 메서드명을 가진 상위 클래스가 2개 이상 존재할 때 어떤 클래스에서 상속받아서 사용 또는 오버라이드해야할지 알 수 없기 때문입니다. 다중상속을 지원하지 않기 때문에 추상클래스만 사용한다면 유연한 상속구조를 활용하기 어렵습니다.

 

출처 : https://cafe.naver.com/dokchi/8969815

profile

개발Story

@슬래기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!