역할과 구현 분리 이유
역할과 구현을 분리하는 이유가 궁금한데요. 어떤 역할(ex. 회원 데이터 저장하기)에 대한 구현 방법이 여러가지이기 때문인가요? (구현 방법이 여러가지라면 구현법을 변경할 가능성이 있기에) 이게 역할과 구현을 분리하는 이유인가요?
그렇다면 어떤 역할에 대한 구현 방법이 단 1가지라면 역할과 구현을 분리하지 않아도 되는 것인가요? 만약 그렇다면 '구현체가 1개인 경우에는 인터페이스명 + Impl을 클래스명으로 하는 것이 관례'라는 관례가 존재하는 이유가 무엇인가요? 구현체가 단 1개라면 인터페이스-클래스가 아닌 클래스만 존재하면 되는거 아닌가요...?
답변 1
0
안녕하세요. 도토리님, 공식 서포터즈 y2gcoder입니다.
먼저 역할과 구현을 분리하는 이유에 대해서는 본 강의의 섹션 1. 객체 지향 설계와 스프링 > 좋은 객체 지향 프로그래밍이란? 이상으로 설명할 자신이 없기 때문에 해당 강의를 다시 한 번 봐주시면 감사하겠습니다!
그리고 역할과 구현을 나누는 추상화에도 비용이 존재합니다. 이 부분에 대해서는 다음 링크(클릭)을 참고해주십쇼! 실무에서는 구현체를 교체할 가능성이 없는 경우는 말씀하신 것처럼 실용적으로 클래스만 만드는 경우가 많습니다! 예를 들어 Controller 클래스는 보통 인터페이스 없이 구현체만 만들고 있습니다!
마지막으로 인터페이스에 유일한 구현체의 관례가 "인터페이스명+Impl"인 이유에 대해서는 정확하게는 모르겠습니다. 다만 추후 변경을 대비해서든지 회사 컨벤션이든지 등의 이유로 인터페이스-구현체 로 나눴을 때 해당 인터페이스명과 구분하면서 해당 인터페이스의 구현체임(Implement 를 줄여 Impl로)을 표현해주기 위해 이러한 관례가 생겼을 것이라 조심스럽게 추측합니다!
감사합니다.
코드 자료
0
42
2
구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?
0
55
2
MemberService의 인터페이스를 왜 사용하는지 궁금합니다.
0
75
1
롬복 @Setter를 써야 하는 상황이 있는건가요?
0
90
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





