Interface와 Abstract class 의 차이점
8900
작성한 질문수 13
안녕하세요, 강의 잘 듣고 있습니다.
강의에서 이끌어 주시는대로 따라가다가 생각을 해봤습니다.
- ControllerV1 은 추상적 형태이고, MemberFormControllerV1. MemberSaveControllerV1, MemberListControllerV1 는 구체적 형태이다.
- 추상적 형태를 나타내는 방법에는 Interface와 Abstract class 가 존재한다.
아래와 같은 의문이 들었습니다.
- 현재 상황에서 Abstract class 를 사용하지 않고 Interface 를 사용한 이유가 뭔가요?
- 만약 Interface 를 사용한 특별한 이유가 있다면, 어떤 상황에서 Abstract class 또는 Interface 를 선택하는게 옳을까, 판단하는 근거를 간략하게나마 말씀해주시면 감사하겠습니다.
좋은 하루 되세요 !
답변 3
18
안녕하세요, 포닥님. 공식 서포터즈 codesweaver입니다.
.
추상 클래스와 인터페이스
우선 추상클래스는 일반적인 클래스와 동일하게 멤버변수와 메서드를 갖습니다. 그리고 추가적으로 '추상메서드'를 갖습니다. 추상 메서드는 메서드의 선언부만 존재하고 구현코드가 없는 아래와 예와 같은 메서드를 말합니다.
.
public String getUserName(int idx);
.
구현부가 없는 메서드를 단 하나라도 가진 클래스는 추상 클래스가 됩니다. 추상 클래스가 되면 new 키워드를 사용하여 인스턴스화 할 수 없습니다. 즉, 클래스를 쓸 수 없습니다. 이 클래스를 사용하려면 어떻게 해야 할까요?
.
다른 클래스가 이 추상 클래스를 상속받아야 합니다. 상속 받은 자식 클래스가 부모 클래스에 존재하는 추상메서드를 전부 오버라이딩 하여 구현부를 작성하면 비로소 사용할 수 있는 객체가 됩니다.
.
인터페이스는 사실 추상 클래스의 특수형태 입니다. 추상 클래스 중에서 멤버 변수와 메서드를 제거한 채 추상 메서드만을 남긴 형태가 인터페이스 입니다. (인터페이스도, public static 상수를 가질 순 있습니다)
.
인터페이스도 마찬가지로 이를 구현한 자식 클래스에서 인터페이스의 추상 메서드를 모두 오버라이딩 해야 비로소 객체로 사용할 수 있습니다. (추상클래스나 인터페이스를 구현한 자식 객체가 추상 메서드를 전부 구현하지 않았다면 아예 컴파일이 되지 않습니다. 혹은 자식 객체도 추상클래스가 되어야 합니다)
.
추상 클래스와 인터페이스: 차이점
.
추상 클래스와 인터페이스의 차이점은 그 목적이라고 할 수 있습니다. 추상 클래스는 기본적으로 클래스 이며 이를 상속, 확장하여 사용하기 위한 것입니다. 반면 인터페이스는 해당 인터페이스를 구현한 객체들에 대한 동일한 사용방법과 동작을 보장하기 위해 사용합니다.
.
어떤 객체가 특정 인터페이스를 구현하였다면, 그 객체는 인터페이스의 기능을 모두 갖추고 있음을 보장합니다. 그리고 인터페이스를 통해 해당 객체를 제어할 수 있음을 보장하는 것입니다.
.
감사합니다.
2
지금까진 추상 클래스도 인터페이스처럼 사용했었네요.
그 과정에서 "이번엔 추상 클래스를 쓸까, 인터페이스를 쓸까". 거의 인기 투표하듯 결정했었네요.
덕분에 두 존재의 차이를 알게 되었습니다.
또한 친절한 답변 정말 감사합니다!
servlet과 container에 대한 질문입니다
0
24
1
api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?
0
62
1
jsp 의존성 수정 요청
0
77
2
요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?
0
142
1
save() 메서드 문의
0
66
1
절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상
0
100
1
request-body-json
0
83
2
MVC 패턴의 적용 단위
0
95
1
RequestMapping을 이용한 핸들러, 어댑터
0
118
2
save 후 결과화면
0
88
2
jsp를 이용한 view
0
97
1
application.properties에 debug 추가해도 결과가 똑같습니다.
0
177
1
수업 코드 제공 관련 문의
0
97
2
RequestMappingHandlerAdapter의 Controller 호출 과정
0
99
3
파일 오픈 시
0
69
1
스프링 배치 관련
0
77
1
@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부
0
112
1
postman으로 /request-body-json-v1 호출시 500 error
0
94
1
프론트엔드와 백엔드의 mvc, rest api에 대한 질문
0
78
1
모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문
0
111
1
console log 출력 관련 질문입니다.
0
74
1
애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ
0
139
1
html 변경하는 부분 적용 문제
0
103
1
한글 깨짐
0
76
2





