작성
·
535
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
강의 자료로 복습 중에 질문이 있습니다.
소프트웨어 공학 책에 있는 화살표를 아래 그림에 적용해 보면
MemberServiceImpl에서 MemberService로 향하는 화살표와 MemoryMemberRepository에서 MemberRepository로 향하는 화살표는 '구현 관계'를 나타낸 듯하고,
AppConfig에서 MemberServiceImpl과 MemoryMemberRepository를 향하는 화살표는 '의존 관계'를 나타낸 듯하고,
MemberServiceImpl에서 MemberRepository를 향하는 화살표는 '연관 관계'를 나타낸 것처럼 보이는데요
연관 관계 화살표로 표현된 MemberServiceImpl에서 MemberRepository로 향하는 관계는 의존 관계라고 봐도 되나요? MemberServiceImpl이 MemberRepository를 의존하고 있으니깐.. 연관 관계 화살표로 표현된 이유가 궁금합니다.
제가 UML 다이어그램을 제대로 공부하진 않았는데 의존 관계 주입에서의 의존 관계와, UML 다이어그램에서의 의존 관계는 조금 다른 건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
UML 다이어그램에서 ‘의존 관계(Dependency)‘는 한 클래스가 다른 클래스의 기능을 사용할 때 나타나는 관계를 말합니다. 일반적으로 의존 관계는 클래스 사이에서 상대적으로 짧은 기간 동안 또는 특정 메소드 안에서만 필요한 경우에 사용합니다. UML에서는 점선 화살표로 의존 관계를 표현합니다.
한편, ‘연관 관계(Association)‘는 두 클래스 사이에 일정한 정보 교환 또는 협력 관계가 지속적으로 이루어질 때 사용되는 개념입니다. 이는 두 클래스가 서로 메시지를 주고받는 등의 연결을 가지고 있음을 의미하며, 보통은 실선 화살표로 표현합니다. 연관 관계는 클래스 안에서 다른 클래스 타입의 참조를 멤버 변수로 가지고 있는 경우를 나타냅니다.
‘구현 관계(Realization)‘는 인터페이스와 이를 구현하는 클래스 사이의 관계로, 클래스가 인터페이스에 정의된 모든 추상 메소드를 구현해야 한다는 것을 나타냅니다. 구현 관계는 점선 화살표와 화살표 끝에 빈 삼각형을 사용해 표현합니다.
MemberServiceImpl
에서 MemberRepository
로 향하는 화살표는 MemberServiceImpl
클래스가 MemberRepository
인터페이스를 바탕으로 구체적인 구현체를 사용하는 연관 관계를 말합니다. 만약 MemberServiceImpl
이 MemberRepository
인터페이스의 참조를 필드로 가지고 있다면, 이는 연관 관계로 볼 수 있습니다.
의존 관계 주입에서 말하는 ‘의존 관계’는 특정 객체가 작동하기 위해 다른 객체를 필요로 하는 관계를 의미합니다. 이 경우 AppConfig
에서 MemberServiceImpl
이나 MemoryMemberRepository
로 향하는 점선 화살표는 이런 의존성을 외부에서 주입하는 방식을 나타내는 의존 관계를 나타내며, UML의 의존 관계와 개념적으로 유사합니다.
UML 다이어그램의 ‘의존 관계’와 의존성 주입에서의 ‘의존 관계’는 다른 컨텍스트에서 사용되지만, 둘 다 객체 간의 의존성을 나타내는 표현입니다. UML 다이어그램은 객체 간의 관계를 정적으로 나타내는 반면, 의존성 주입은 실행 시점에 객체들 사이의 관계를 설정하는 동적인 행위를 말합니다.
질문하신 내용을 바탕으로, MemberServiceImpl
이 MemberRepository
의 구현체를 필드로 가지고 있어 이를 의존하고 있다면, 이는 UML에서의 연관 관계에 속한다고 볼 수 있습니다. UML 다이어그램을 이해하고, 객체 간의 관계를 명확히 파악하는 데에는 이러한 개념적 구분이 중요합니다.