interface와 구현체에서 메서드도 같아야하나요?
219
작성한 질문수 4
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
interface를 생성해야하는 이유는 이해가 됐는데 interface에서 작성한 메서드들을 구현체에서 오버라이딩하는데 이떄 오버라이딩하는 코드 말고 추가적으로 코드를 작성하는게 바람직한가요?
예를들어 repository인터페이스를 구성할 때 Mysql을 이용하기 위한 레포지토리와 Memoryrepository를 따로 구현할 때 아무래도 DB에 저장하는 특성상 메서드들의 차이가 있지않을까하는데 이때 각 구현체에서 추가로 메서드를 작성하는게 옳은 방향인건지 잘 모르겠어요
답변 1
0
안녕하세요. 김현식님, 공식 서포터즈 OMG입니다.
인터페이스로 공통 기능을 추상화할 때는 해당 인터페이스를 구현하여 사용할 클래스들의 공통기능을 큰 틀에서만 잡아놓으면 됩니다. 그리고 디테일한 부분은 추상화한 구현체에서 별도의 메서드들을 작성하면 됩니다.
가령
MemberRepository인터페이스에는
interface MemberRepository {
save();
insert();
select();
}
class MySQLMemberRepository {
save() {
// MySQL save 구현
}
insert() { .. }
select() { .. }
MySQL에서만 지원하는 기능() { .. }
}
class MemoryMemberRepository {
save() {
// MemoryMemberRepositry save 구현
}
insert(){ .. }
select(){ .. }
MemoryMemberRepository에서만 지원하는 기능() { .. }
}
다음과 같이 큰 틀의 기능을 정의해놓고 디테일한 구현과 별도의 구현하는 별도의 클래스에서만 사용하는 클래스들은 해당 클래스에만 구현하여 사용하면 됩니다.
감사합니다.
0
여기까지는 이해했는데 지금 DIP와 OCP가 위반되는 사례를 보고있어서 저렇게 코드를 짰을 때 MemberRepository를 불러오는 곳의 코드를 변경해야될 상황이 오지않을까해서 질문드렸습니다.
되는지도 중요하지만 그게 올바른 설계방향인지도 알고싶습니다.
1
MemberRepository를 불러오는 곳의 코드를 변경해야될 상황이 오지않까해서 질문
이 질문에서 우려하는 상황에 대해 구체적으로 생각하는 바를 설명해주시겠어요? 코드 예시가 있으면 더욱 좋습니다.
불러오는 곳의 코드라고하면 memberRepository를 호출하는 코드 영역 (ex 서비스 로직) 이 될 것 같은데 어떠한 변경을 얘기하시는걸까요?
다음 링크의 영한님의 OCP관련 답변을 참고하여 댓글을 남겨주시면 좋을 것 같습니다.
코드 자료
0
45
2
구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?
0
55
2
MemberService의 인터페이스를 왜 사용하는지 궁금합니다.
0
76
1
롬복 @Setter를 써야 하는 상황이 있는건가요?
0
91
1
빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?
0
81
1
테스트 속도가 나중에 영향이 있을까요?
0
77
1
gradle 설정 안떠서 질문 남깁니다!
0
121
2
build.gradle로 프로젝트를 여는 이유
0
86
1
provider 사용하는 이유
0
89
1
다음 강의 뭘 들어야 할까요
0
126
2
프로토타입 빈, 직접 destroy 호출 안 할 경우
0
66
1
beanB
0
82
2
퀴즈다시풀기
0
68
1
Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ
0
92
2
"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.
0
67
3
run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>
0
106
2
도메인의 정의?
0
59
1
ApplicationContext 질문입니다.
0
63
1
@Scope의 proxyMode를 사용할때 단위 테스트 방법
0
89
2
ai api 선정하기 관련 질문
0
118
2
생성자 자동주입 관련해서
0
65
1
생성자 직접 호출 vs 팩토리 메서드 패턴
0
97
2
Spring에서 SessionScope와 RequestScope는 함께 사용되나요?
1
65
1
12:25
0
79
2





