해결된 질문
작성
·
46
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
조영호님의 '오브젝트'를 먼저 읽고 강의를 수강하고 있습니다. 책과 매우 유사한 상황에 또 놓여졌는데
책에서 이해하기 어려웠던 개념(컴파일시점, 런타임시점)을 강의에서도 다루고 있어질문드립니다.
컴파일시점에 결정되는 클래스다이어그램이 있고
런타임시점에 결정되는 객체다이어그램이 있습니다.
컴파일시점에는 인터페이스에 의존하고
런타임시점에는 구현클래스에 의존하는 양상을 보이는데요.
질문입니다.
AppConfig에서 생성자호출코드가 있는데
파라미터로 의존성이 자리를 차지합니다.
예를들면) new MemberServiceImpl(new MemoryMemberRepository());
위 예시 소스코드로 인해서 컴파일시점에 벌써부터
MemberServiceImpl객체가 MemeoryMemberRespository객체에 의존적이라는 것이 결정되는거 아닌가?
라는 의문이 생겼습니다.
개발자가 작성한 MemberServiceImpl클래스는 컴파일시점이고
public static void main(String[] args) 내에서 작성된
실행코드들은 런타임시점이라고 생각할 수 있는건가요?
그래서 AppConfig내에서 MemberServiceImpl구현객체를 new하는 코드 및 의존성주입하는 코드들 전부 런타임에 결정되는 것이라고 정리를 해도 좋은지 궁금합니다.
{MemberServiceImpl } 와
{main메소드 ,AppConfig} 이 둘은 결이 달라보입니다.
답변 1
2
안녕하세요. 창신동 장첸님, 공식 서포터즈 David입니다.
MemberServiceImpl 클래스는 MemerRepository 인터페이스에 의존하고 있습니다. (컴파일시점 의존관계)
애플리케이션이 실행되면(런타임) AppConfig에 작성된 것처럼 MemberServiceImpl 객체가 생성될 때 MemoryMemberRepository가 생성되며 MemberServiceImpl 객체와 MemoryMemberRepository 객체 간 의존이 생깁니다.
질문 초반에 적어주신대로 클래스와 클래스의 인스턴스의 의존이 서로 다름을 알 수 있습니다. 클래스의 인스턴스는 AppConfig에 의해 특정 인터페이스를 구현한 구현체가 주입되기 때문입니다.
public static void main(String[] args) 내에서 작성된 실행코드들은 런타임시점이라고 생각할 수 있는건가요?
실행코드들이 런타임시점이라기보다 해당 코드들이 컴파일타임, 런타임에 서로 다른 의존을 가지는가를 고민해 보면 좋을 것 같습니다.
감사합니다:)
명확한 답변 감사드립니다!