낮은결합도?

이승우·2024년 7월 25일

낮은 결합도를 유지한다라는 것은 쉽게말하면 클래스가 아닌 인터페이스를 참조한다고 할 수 있다.

느슨하게 연결된 형태를 유지하는 것

controller가 구체적인 service를 참조하고 있다면 이는 변경에 불리하다.

만약 ‘아래와 같은 Service로 서비스를 하고 있었는데 NewServic라는 새로운 Service로 갈아끼고 싶어졌다.’

이런 상황을 가정한다면

public class Service{

}

이럴 때 개발자는 NewService를 만들어서 다른 컨트롤러나 서비스에서 위의 Service를 참조하고 있는 모든 객체를 찾아서 NewService로 바꿔줘야한다.

물론 뭐 바꾸면 되겠지만, 버그의 가능성이 높아진다.

어느 부분을 안바꿨는지도 모르고, 하나만 안바꿨다면? 대참사가 일어날 수 있다.

하지만, 낮은 결합도를 유지할 수 있다면 이는 해결된다.

위에서 class로 선언한 Service를 interface로 선언하고, 이를 구현한 ServiceImpl와 NewServiceImpl가 있다면 다른 객체에서는 Service interface를 참조하기만 하면 된다. 구체적인 구현체 이름은 알 필요도 없다.

개발자는 어떤 구현체를 쓸 지 빌드시에 선언만 해주면 되는 것이다.(바꾸면 되는 것이다)

public interface Service{

}
public class ServiceImpl implements Service{

}
public class NewServiceImpl implements Service{

}

정리

지금까지 프로젝트를 하면서 interface를 쓰는 일은 거의 없었다.

왜 이걸 쓰지? 지금까지 불편한게 없었는데?

라고 생각했었다.

지금까지는 불편한게 없었을 것이다. 하지만 중요한것은 변화에 대비를 할 수 있다는 것이다.

구현단계에서 낮은 결합도를 달성해 놓는다면 나중에 변경사항이 있을 때 쉽고 빠르게 버그없이 변경을 성공할 수 있을 것이다.

실제 서비스를 할 때를 생각해보면 서비스의 로직이나 전략등이 바뀔 때가 있을 것이다. 정말 많을 것이다. 이럴 때를 대비하여 낮은 결합도를 유지하는 것이 좋을 것 같다는 생각이 들었다. 새로운 요구사항이 생기면, 구현체를 하나 만들고 유지보수성을 높이는 방향으로 코드를 짤 수 있을 것 같다.

0개의 댓글