Java를 공부하고 있지만 정작 가장 중요한 객체지향의 5대 원칙에 대해서 이해하고 프로젝트에 적용하고 있는가?라는 의문이 들었다.
그래서 객체지향 5대 원칙(SOLID)을 다시 공부하던 도중, 의존관계 역전 원칙에서 고수준 모듈과 저수준 모듈이 나오는데, 정확한 의미가 무엇인지 궁금하여 찾아봤다.
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
> - 의존 역전 원칙 (Dependency Inversion Principle)
우선 저 말을 내가 이해한 말로 다시 쓰면, '추상화에 의존해야지 구체화에 의존하면 안된다'라는 의미이다.
즉, 저수준 모듈은 고수준 모듈이 정의한 추상 타입에 의존해야 한다는 것이다.
간단하게 저수준 모듈은 메인클래스나 객체를 말하고 고수준 모듈은 인터페이스나 추상 클래스를 의미한다고 볼 수 있다.
즉 고수준 모듈이 상대적으로 큰 틀에서 어떤 의미 있는 단일 기능을 제공하는 모듈이라면, 저수준 모듈은 고수준 모듈의 기능을 구현하기 위해 필요한 각 개별 요소가 어떻게 구현될지에 다룬다.
이제 다시 의존 역전 원칙의 의미를 살펴보면 그 의미가 조금 더 와닿게 된다.
사실 직접적으로 인터페이스나 추상 클래스를 구현하는 것은 저수준 모듈이기 때문에 고수준 모듈이 저수준 모듈에 의존하다고 볼 수 있다.
하지만 저수준 모듈은 빈번하게 변경되고 큰 틀인 고수준 모듈은 그에 따른 영향을 받으면 안되기 때문에 고수준 -> 저수준의 의존 관계를 역전시켜야 한다는 것이다.
저수준 모듈(Low-level modules)
고수준 모듈(High-level modules)