인프런 커뮤니티 질문&답변

포닥님의 프로필 이미지
포닥

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

프론트 컨트롤러 도입 - v1

Interface와 Abstract class 의 차이점

작성

·

6.8K

7

안녕하세요, 강의 잘 듣고 있습니다.

강의에서 이끌어 주시는대로 따라가다가 생각을 해봤습니다.

- ControllerV1 은 추상적 형태이고, MemberFormControllerV1. MemberSaveControllerV1, MemberListControllerV1 는 구체적 형태이다.

- 추상적 형태를 나타내는 방법에는 Interface와 Abstract class 가 존재한다.

아래와 같은 의문이 들었습니다.

- 현재 상황에서 Abstract class 를 사용하지 않고 Interface 를 사용한 이유가 뭔가요?

- 만약 Interface 를 사용한 특별한 이유가 있다면, 어떤 상황에서 Abstract class 또는 Interface 를 선택하는게 옳을까, 판단하는 근거를 간략하게나마 말씀해주시면 감사하겠습니다.

좋은 하루 되세요 !

답변 3

17

안녕하세요, 포닥님. 공식 서포터즈 codesweaver입니다.

.

추상 클래스와 인터페이스

우선 추상클래스는 일반적인 클래스와 동일하게 멤버변수와 메서드를 갖습니다. 그리고 추가적으로 '추상메서드'를 갖습니다. 추상 메서드는 메서드의 선언부만 존재하고 구현코드가 없는 아래와 예와 같은 메서드를 말합니다.

.

public String getUserName(int idx);

.

구현부가 없는 메서드를 단 하나라도 가진 클래스는 추상 클래스가 됩니다. 추상 클래스가 되면 new 키워드를 사용하여 인스턴스화 할 수 없습니다. 즉, 클래스를 쓸 수 없습니다. 이 클래스를 사용하려면 어떻게 해야 할까요?

.

다른 클래스가 이 추상 클래스를 상속받아야 합니다. 상속 받은 자식 클래스가 부모 클래스에 존재하는 추상메서드를 전부 오버라이딩 하여 구현부를 작성하면 비로소 사용할 수 있는 객체가 됩니다.

.

인터페이스는 사실 추상 클래스의 특수형태 입니다. 추상 클래스 중에서 멤버 변수와 메서드를 제거한 채 추상 메서드만을 남긴 형태가 인터페이스 입니다. (인터페이스도, public static 상수를 가질 순 있습니다)

.

인터페이스도 마찬가지로 이를 구현한 자식 클래스에서 인터페이스의 추상 메서드를 모두 오버라이딩 해야 비로소 객체로 사용할 수 있습니다. (추상클래스나 인터페이스를 구현한 자식 객체가 추상 메서드를 전부 구현하지 않았다면 아예 컴파일이 되지 않습니다. 혹은 자식 객체도 추상클래스가 되어야 합니다)

.

추상 클래스와 인터페이스: 차이점

.

추상 클래스와 인터페이스의 차이점은 그 목적이라고 할 수 있습니다. 추상 클래스는 기본적으로 클래스 이며 이를 상속, 확장하여 사용하기 위한 것입니다. 반면 인터페이스는 해당 인터페이스를 구현한 객체들에 대한 동일한 사용방법과 동작을 보장하기 위해 사용합니다.

.

어떤 객체가 특정 인터페이스를 구현하였다면, 그 객체는 인터페이스의 기능을 모두 갖추고 있음을 보장합니다. 그리고 인터페이스를 통해 해당 객체를 제어할 수 있음을 보장하는 것입니다.

.

감사합니다.

2

포닥님의 프로필 이미지
포닥
질문자

지금까진 추상 클래스도 인터페이스처럼 사용했었네요.

그 과정에서 "이번엔 추상 클래스를 쓸까, 인터페이스를 쓸까". 거의 인기 투표하듯 결정했었네요.

덕분에 두 존재의 차이를 알게 되었습니다.

또한 친절한 답변 정말 감사합니다!

1

자바를 여러번 공부하였음에도 아직 정의가 애매한 내용이었는데 좋은 질문과 답변 감사합니다.

포닥님의 프로필 이미지
포닥

작성한 질문수

질문하기