코드의 응집도와 결합도
- Coding/Spring
- 2018. 5. 3.
개방 폐쇄 원칙 (OCP : Open-Closed Principle)
깔끔한 설계를 위해 적용 가능한 객체지향 설계 원칙 중의 하나로, ‘클래스나 모듈은 확장에는 열려있어야하고 변경에는 닫혀있어야한다.’라고 할 수 있다. 이 말은 즉 확장성은 높고 미래의 변화에 대한 준비를 철저히 하고있다는 얘기와 같다. 인터페이스에 의해 제공되는 확장 포인트는 확장을 위해 개방되어있고, 인터페이스를 이용하는 클래스는 자신의 변화가 불필요하게 일어나지 않도록 폐쇄되어있다. 인터페이스를 사용하여 확장 기능을 정의한 대부분의 API가 개방 폐쇄 원칙을 따르고있다.
인터페이스의 사용
위 개방 폐쇄 원칙에서 인터페이스의 확장성을 얘기했는데, 이를 더 깊이 이해하기 위해서 인터페이스에 대해 좀더 알아보자. 우선 추상화란, 어떤 것들의 공통적인 성격을 뽑아내어 이를 따로 분리해내는 작업이다. 자바가 추상화를 위해 제공하는 것이 바로 인터페이스다. 인터페이스는 두 개의 클래스가 서로 긴밀하게 연결되어 있지 않도록 중간에 추상적인 느슨한 연결고리를 만들어준다. 인터페이스는 자신을 구현한 클래스에 대한 구체적인 정보는 모두 감춰버린다. 인터페이스는 어떤 일을 하겠다는 기능만 정의해놓기 때문에 어떻게 하겠다는 구현 방법은 나타나있지 않다. 구현 방법은 이 인터페이스를 구현한 클래스들의 역할인 것이다.
높은 응집도와 낮은 결합도
응집도가 높다
하나의 모듈, 클래스가 하나의 책임 또는 관심사에만 집중되어 있다는 뜻이다. 불필요하거나 직접 관련이 없는 외부의 관심과 책임에 얽혀있지 않으며, 하나의 공통 관심사는 한 클래스에 모여있다. 변경이 일어날때 모듈의 많은 부분이 함께 바뀐다면 응집도가 높다고 할 수 있다. 만약 응집도가 낮아서 여러 관심사와 책임이 얽혀있는 복잡한 코드에서 변경이 일어난다면 변경이 필요한 부분을 찾아내는 것도 번거로워지고 그렇게 변경한 코드들이 다른 기능에 영향을 줘서 오류를 발생시킬지도 고려해봐야한다. 이는 코드를 수정해야하는 개발자에게 상당히 부담감을 준다. 응집도가 높다면, 하나의 관심사와 책임이 응집되어있는 코드에서 일어나는 수정은 응집도가 낮은 코드보다 훨씬 더 부담감을 줄여줄 수 있다. 응집도가 높은 작업은 항상 전체적으로 일어나고 무엇을 변경할지 명확하고, 다른 기능에 영향을 주지 않는다는 사실을 쉽게 알아낼 수 있다.
결합도가 낮다
책임과 관심사가 다른 오브젝트 또는 모듈과는 낮은 결합도, 즉 느슨하게 연결된 형태로 유지하는 것이 바람직하다. 느슨한 연결은 관계를 유지하는데 꼭 필요한 최소한의 방법만 간접적인 형태로 제공하고 나머지는 서로 독립적이고 알 필요도 없게 만들어주는 것이다. 결합도가 낮아지면 변화에 대응하는 속도가 높아지고 구성이 깔끔해지고 확장성이 높아져서 매우 편리해진다. 결합도란, 하나의 오브젝트가 변경이 일어날 때에 관계를 맺고 있는 다른 오브젝트에 변화를 요구하는 정도`이다. 낮은 결합도란 하나의 변경이 발생할 때 다른 모듈과 객체로 변경에 대한 요구가 전파되지 않는 상태를 말한다. 반대로 결합도가 높아지면 변경으로 인해 버그가 발생할 가능성이 높아진다.
전략패턴
전략패턴 (Strategy Pattern)은 자신의 기능 맥락에서 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴이다.
전략패턴의 컨텍스트 : 자신의 기능을 수행하는데 필요한 기능 중에서 변경 가능한 알고리즘을 인터페이스로 정의하고 이를 구현한 클래스이다. 이는 전략을 바꿔가면서 사용할 수 있게 분리하였다.
'Coding > Spring' 카테고리의 다른 글
필드주입과 생성자주입의 차이 (0) | 2019.02.15 |
---|---|
싱글톤 레지스트리 (0) | 2018.05.08 |
코드 리팩토링 (0) | 2018.05.03 |
제어의역전 IOC (0) | 2018.03.17 |
의존관계 주입 DI (1) | 2018.03.17 |