caffeine-library / Domain-Driven-Design

🌱 에릭 에반스의 '도메인 주도 설계'를 읽는 스터디
4 stars 0 forks source link

[question] 패키지 간의 의존성 관리가 어떻게 이루어지고 있나요? #28

Closed kth990303 closed 1 year ago

kth990303 commented 1 year ago

질문

p.116 에 보면 타 모듈(패키지)에 대한 의존성 및 import에 대해 아래와 같이 설명합니다.

와일드카드가 존재하지 않는 import문

널리 통용되는 코딩 관례에서는 개별 클래스에 대해 임포트 구문을 작성할 것을 권장하므로 코드는 아래와 같이 작성할 것이다.

import packageB.ClassB1;
import packageB.ClassB2;
import packageB.ClassB3;
import packageC.ClassC1;
import packageC.ClassC2;
import packageC.ClassC3;

저 또한 import문에 와일드카드를 쓰는 것을 지양하고 있습니다.

와일드카드가 존재하는 import문

그런데 책에선 또 이렇게 말하기도 합니다.

import packageB.*;
import packageC.*;

이렇게 하면 패키지명을 일제히 변경하는 노력도 줄어드면서 패키지가 대단히 응집력 있는 단위라는 의도가 반영되기도 한다.

개인적으론 변경하는 노력에 대해선 요즘은 IDE가 자동으로 해주기 때문에 크게 고려할 부분은 아닌 거 같긴 합니다. 다만, 패키지가 응집력 있는 단위라는 의도에 대해선 그럴 수도 있겠다는 생각이 들기도 하는데요.

내가 MSA 환경을 실제로 거의 겪어보지 못해서 와일드카드에 반발심이 있는건가? 생각이 들기도 하고... 책에서 또 모델링하는 사람들은 아마 패키지를 다른 패키지에 대한 의존성으로 생각하겠지만 자바에서는 꼭 그렇지만도 않다. 고 말하기도 했는데, 이런 경우가 언제 있을지, 그리고 이런 경우에 와일드카드를 오히려 권장하는지 궁금하네요. 그리고 또 실무에서는 MSA 환경, 아니면 모놀로식이지만 멀티모듈인 환경에서 모듈화를 아무리 잘한다 하더라도 타 모듈간의 의존성이 발생할 수밖에 없으리라 생각되는데, 이러한 의존성을 어떻게 관리하고 있는지도 궁금해요.

여러분의 팀 또는 실무에서는 어떻게 관리 (또는 생각)하고 있나요? 질문이 조금 모호할 수도 있겠다 싶어 정리하자면

  1. 패키지 간의 의존성이 발생할 때 import문을 와일드카드로 작성하는 것이 좋은가?
  2. 모델링하는 사람들은 아마 패키지를 다른 패키지에 대한 의존성으로 생각하겠지만 자바에서는 꼭 그렇지만도 않다.에 해당되는 경우에 대한 공유
  3. 패키지 간의 의존성이 실제로 얼마나 발생하는가?

입니다~

연관 챕터

24

leejaeseung commented 1 year ago

https://www.youtube.com/watch?v=RVO02Z1dLF8&t=834s

이전에 보았던 토스 컨퍼런스 영상 중에 비슷한 내용이 있어 공유합니다 ㅎㅎ import 문을 통해 코드 구조의 문제점을 개선하는 내용인데, 위 질문과 비슷한 맥락이라고 생각했습니다. 위 영상에선 여러 군데에 많은 의존이 되어 있는 걸 import 문으로 파악하고, import 문을 깔끔하게 함으로써 패키지의 응집도를 높일 수 있다고 하더라구요.

leejaeseung commented 1 year ago

class A 에서 utilA.method1, utilB.method2 를 쓰고 있고, class A 에서 import utilA. import utilB. 로 임포트할 텐데, 만약 utilA.method1 -> utilA.method2 utilB.method2 -> utilB.method1 로 바꾼다면?