개발 일지/Java

DIP에 나오는 저수준 모듈 / 고수준 모듈의 의미

미숫가루설탕많이 2023. 6. 12. 11:56

자바를 통해 개발 공부를 진행하고 있지만, 정작 가장 중요한 객체지향의 5대 원칙에 대해서 이해하고 프로젝트에 적용하고 있는가?라는 의문이 들었다. 그래서 객체지향 5대 원칙(SOLID)을 다시 공부하던 도중, 의존관계 역전 원칙에서 고수준 모듈과 저수준 모듈이 나오는데, 정확한 의미가 무엇인지 궁금하여 찾아보았다.

 

의존 역전 원칙 (Dependency Inversion Principle)

- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

 

우선 저 말을 내가 이해하는 말로 다시 쓰면, '추상화에 의존해야지 구체화에 의존하면 안된다'라는 의미이다. 저수준 모듈은 고수준 모듈이 정의한 추상 타입에 의존해야 한다는 것이다.

 

고수준 모듈과 저수준 모듈이 뭔데..? 고/저는 무엇을 기준으로 나뉘는 거지..

 

간단하게 저수준 모듈은 메인클래스나 객체를 말하고 고수준 모듈은 인터페이스나 추상 클래스를 의미한다고 볼 수 있다. 즉 고수준 모듈이 상대적으로 큰 틀에서 어떤 의미 있는 단일 기능을 제공하는 모듈이라면, 저수준 모듈은 고수준 모듈의 기능을 구현하기 위해 필요한 각 개별 요소가 어떻게 구현될지에 다룬다.

 

다시 의존 역전 원칙의 의미를 살펴보면 그 의미가 조금 더 와닿게 된다. 사실 직접적으로 인터페이스나 추상 클래스를 구현하는 것은 저수준 모듈이기 때문에 고수준 모듈이 저수준 모듈에 의존하다고 볼 수 있지만, 저수준 모듈은 빈번하게 변경되고 큰 틀인 고수준 모듈은 그에 따른 영향을 받으면 안되기 때문에 고수준 -> 저수준의 의존 관계를 역전시켜야 한다는 것이다.

 

 

 

 

자세히

 

- 저수준 모듈 (Low-level modules)

  • 시스템의 작은 부분을 담당하며, 보다 구체적이고 상세한 작업을 처리한다.
  • 주로 하위 컴포넌트 또는 기본 기능을 제공하며, 다른 모듈과 상호작용할 수 있는 인터페이스를 제공할 수 있다.
  • 보통 하나의 특정 작업에 집중하고 기능을 제공하기 위해 하드웨어, 네트워크, 파일 시스템 등과 상호작용할 수 있다.
  • 독립적으로 사용될 수 있지만, 주로 고수준 모듈과 결합하여 더 큰 기능을 구현하기 위해 사용된다.
  • ex ) 데이터베이스 연결을 담당하는 모듈은 데이터베이스에 연결하고 쿼리를 실행하는 함수를 제공할 수 있다.

 

- 고수준 모듈 (High-level modules)

  • 고수준 모듈은 저수준 모듈을 조합하여 더 큰 기능을 수행하며, 높은 수준의 추상화와 비즈니스 로직을 담당한다.
  • 주로 시스템이나 애플리케이션의 핵심 로직을 구현하며, 사용자 인터페이스, 비즈니스 규칙 적용, 데이터 처리 등을 다룬다.
  • 저수준 모듈의 기능을 사용하여 자체적인 기능을 구현하고, 이를 통해 애플리케이션의 비즈니스 요구사항을 충족시킨다.
  • 저수준 모듈과의 결합도를 낮추기 위해 DI를 사용하여 저수준 모듈의 인스턴스를 주입받아 사용한다.
  • ex) 사용자 인증을 처리하기 위해 저수준 모듈의 데이터베이스 연결 기능을 활용할 수 있다.