Dev/Spring

[Spring] 관심사를 분리하는 이유

yo0oni 2024. 5. 12. 15:57

특정한 관심사에 따라 기능을 나누고, 각 기능을 독립적으로 개발한 뒤 이를 조합하는 방식으로 복잡한 소프트웨어를 구성해 보자는 아이디어를 관심사의 분리(Separation of concerns, SoC)라고 한다.

 

관심사를 분리하여 코드를 작성하게 되면, 독립된 특정 기능에 집중할 수 있기 때문에 코드를 파악하는데 수월하며 특정 기능을 변경하거나 추가할 때도 그 부분만 교체하면 되기 때문에 훨씬 간단하게 문제를 해결할 수 있다.

 

 

정리

모듈이 하나의 목적만 가지도록 만들기 위함이다. 다양한 기능을 가지지 않고 하나의 기능만 가짐으로써 수정될 이유도 한 가지만 가진다. 하드웨어보다 유연하게 수정할 수 있는 소프트웨어는 변화에 유연하게 대응해야 한다. 그러나 모듈마다 여러 기능을 가지고 있으면 수정의 복잡도가 커진다. 이를 막기 위해 관심사를 분리하여 각 모듈들이 작은 기능을 갖도록 하고, 변화에 유연하게 대처하도록 하는 것이다.

 

좋은 소프트웨어는 변화와 확장에 유연해야 한다. 객체지향 프로그래밍에서 추구하는 SOLID 원칙의 OCP는 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙이다. 그리고 SRP는 객체는 단 하나의 책임만 가져야 한다는 원칙이다.

 

대표적인 예시로 트랜잭션 처리가 있다. 모든 모듈에서 트랜잭션 처리에 관여하고 있으면 트랜잭션 과정에 변경이 발생했을 때 모든 모듈을 수정해야 하는 문제가 발생한다. 이를 방지하기 위해 트랜잭션 처리 모듈을 한 곳에 모아두고, 나머지가 이 모듈을 사용하도록 해야 한다. 그러면 변경이 발생해도 해당 트랜잭션 모듈만 수정하면 된다.

 

 

참고

https://khys.tistory.com/80

https://teamdable.github.io/techblog/SoC-to-IoC