inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

프론트 컨트롤러 도입 - v1

Interface와 Abstract class 의 차이점

8900

포닥

작성한 질문수 13

7

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

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

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

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

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

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

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

좋은 하루 되세요 !

spring MVC

답변 3

18

나무늘보

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

.

추상 클래스와 인터페이스

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

.

public String getUserName(int idx);

.

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

.

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

.

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

.

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

.

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

.

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

.

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

.

감사합니다.

2

포닥

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

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

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

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

1

명치팍

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

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