인터페이스와 추상클래스의 차이를 모르겠어요.
369
작성한 질문수 1
강의를 듣다 보면, 컨트롤러, 어댑터 서비스 리포지토리 등 인터페이스로 정의한 뒤에 실제 구현객체를 따로 두는 형태로 개발을 하고 있는데
MVC 강의를 들어보면 어댑터의 경우 createParamMap 이라는 공통으로 사용되는 메서드가 있는데, 어댑터 들은 어댑터 끼리 "의미있는 연관 관계"가 아니라 같은 기능을 하기 때문에 interface로 정의하는 걸까요?
createParamMap같이 똑같이 사용되는 건 interface에 default 메서드나, 추상 클래스에 메서드로 사용하면 좋을 것 같은데, 이렇게 default 메서드로 구현하거나 추상클래스의 메서드로 구현하는 부분에서도 차이가 있을까요? 둘의 차이가 없다면, 왜 추상 클래스가 아닌 인터페이스로 정의하고 구현객체를 두는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
인터페이스와 추상클래스 모두 객체를 정의하는데 사용되지만, 다음과 같은 차이점이 있습니다.
- 다중 상속: 인터페이스는 다중 상속이 가능하며, 여러 개의 인터페이스를 구현할 수 있습니다. 추상클래스는 단일 상속만 가능합니다.
- 구현 여부: 추상클래스는 일부 메서드를 구현하고 나머지는 서브클래스에게 위임할 수 있습니다. 인터페이스는 모든 메서드가 구현되지 않아야 합니다.
- 일반 변수와 메서드: 추상클래스는 변수와 구현된 메서드를 가질 수 있습니다. 인터페이스는 상수와 추상 메서드만 가질 수 있습니다.
어댑터의 경우, 인터페이스로 정의되고 실제 구현객체를 따로 두는 이유는 인터페이스를 기반으로 여러 개의 구현체를 사용할 수 있기 때문입니다. 예를 들어, 어댑터 인터페이스를 정의하고 구현체를 따로 두면, 필요한 기능을 갖춘 다양한 어댑터 구현체를 사용할 수 있습니다. 마찬가지로, 서비스, 리포지토리 등도 인터페이스로 정의하고 구현객체를 따로 둠으로써 다양한 구현체를 사용할 수 있게 됩니다.
createParamMap과 같이 똑같이 사용되는 메서드는 인터페이스에 default 메서드로 구현할 수도 있지만, default 메서드는 구현을 가지기 때문에 다중 상속 시 충돌의 위험이 있을 수 있습니다. 따라서, 공통으로 사용되는 메서드를 가진 인터페이스를 정의하고, 구현 객체에서 해당 메서드를 구현하도록 하는 것이 더 유연한 설계 방식입니다.
결론적으로, 인터페이스와 추상클래스 모두 객체 정의에 사용되지만, 인터페이스는 다중 상속과 구현 여부에 제한이 없으며, 추상클래스는 단일 상속을 통해 구현과 위임을 동시에 할 수 있는 장점이 있습니다. createParamMap과 같은 공통 메서드는 인터페이스에 정의하여 다양한 구현 객체에서 유연하게 사용할 수 있습니다.
더 궁금한 사항이 있다면 언제든지 물어보세요!요.
servlet과 container에 대한 질문입니다
0
29
1
api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?
0
66
1
jsp 의존성 수정 요청
0
82
2
요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?
0
145
1
save() 메서드 문의
0
67
1
절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상
0
102
1
request-body-json
0
84
2
MVC 패턴의 적용 단위
0
97
1
RequestMapping을 이용한 핸들러, 어댑터
0
120
2
save 후 결과화면
0
91
2
jsp를 이용한 view
0
98
1
application.properties에 debug 추가해도 결과가 똑같습니다.
0
181
1
수업 코드 제공 관련 문의
0
98
2
RequestMappingHandlerAdapter의 Controller 호출 과정
0
102
3
파일 오픈 시
0
70
1
스프링 배치 관련
0
78
1
@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부
0
114
1
postman으로 /request-body-json-v1 호출시 500 error
0
96
1
프론트엔드와 백엔드의 mvc, rest api에 대한 질문
0
82
1
모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문
0
113
1
console log 출력 관련 질문입니다.
0
75
1
애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ
0
140
1
html 변경하는 부분 적용 문제
0
103
1
한글 깨짐
0
77
2





