작성
·
154
0
[질문 템플릿]
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에서만 지원하는 기능() { .. }
}
다음과 같이 큰 틀의 기능을 정의해놓고 디테일한 구현과 별도의 구현하는 별도의 클래스에서만 사용하는 클래스들은 해당 클래스에만 구현하여 사용하면 됩니다.
감사합니다.
MemberRepository를 불러오는 곳의 코드를 변경해야될 상황이 오지않까해서 질문
이 질문에서 우려하는 상황에 대해 구체적으로 생각하는 바를 설명해주시겠어요? 코드 예시가 있으면 더욱 좋습니다.
불러오는 곳의 코드라고하면 memberRepository를 호출하는 코드 영역 (ex 서비스 로직) 이 될 것 같은데 어떠한 변경을 얘기하시는걸까요?
다음 링크의 영한님의 OCP관련 답변을 참고하여 댓글을 남겨주시면 좋을 것 같습니다.
여기까지는 이해했는데 지금 DIP와 OCP가 위반되는 사례를 보고있어서 저렇게 코드를 짰을 때 MemberRepository를 불러오는 곳의 코드를 변경해야될 상황이 오지않을까해서 질문드렸습니다.
되는지도 중요하지만 그게 올바른 설계방향인지도 알고싶습니다.