Nest.js를 공부하다가 대체 왜 controller와 service를 굳이 구분해서 적는지 이해가 되지 않았다. 그냥 한 번에 몰아서 쓰면 편하고 좋지 않을까? 생각이 들었다. 또 지금까지 토이 프로젝트를 하면서 나도 몰아서 코드를 적었던 습관이 있었어서 더욱 이해가 안되었다.
하지만 "단일 책임 원칙"이라는 것을 알게 되면서 이 이유가 납득이 되었다. 내가 하는 토이 프로젝트 정도의 작은 규모에서는 몰아서 적어도 전혀 상관이 없겠지만 규모가 큰 개발에서는 그렇게 하면 코드가 난잡해지고 말았던 것이다. 혹시 이 원칙 말고 다른 개발의 원칙이 있지 않을까 궁금하여 찾아보게 되었고 객체지향 5원칙을 알게 되었다! 이를 곱씹으며 정리하기 위해 이 글을 쓴다.
하나의 객체는 반드시 하나의 동작만의 책임을 갖는다
1객체 = 1책임
객체의 확장 = 개방적, 객체의 수정 = 폐쇄적
객체 하나를 수정했는데 이후 이 객체에 의존하는 다른 객체들의 코드까지 수정해야만 하면 안 된다는 뜻이다!
즉, 각 객체의 모듈화 + Abstraction을 잘 수행하라는 뜻!
부모 객체를 자식 객체가 완전히 대체할 수 있다
객체는 자신이 호출하지 않는 매소드에 의존하면 안된다
즉, 객체가 반드시 필요한 기능만을 가지도록 해야 한다는 뜻!!
-> 불필요한 기능 상속/구현 방지!
객체는 저수준 모듈보다 고수준 모듈에 의존해야 한다
고수준 모듈: 인터페이스
저수준 모듈: 실제 구현된 객체
즉, 객체는 객체보다 인터페이스에 의존해야한다!