개발 일반

잊을 때쯤 한번 다시 읽어봐야할 Clean code에 관하여 (시스템)

민초부 2021. 4. 6. 22:30
반응형

<깨끗한 코드를 구현하면 낮은 추상화 수준에서 관심사를 분리하기 쉬워진다. 복잡성은 제품을 계획하고 제작하고 테스트하기 어렵게 만든다.>

 

  - 요즘 공부를 하면서 전회사에서 꼴에 클린 코드를 지향하며 하였지만 개발자들 간에 규칙을 정하지 않고 문서화를 하지 않으시는 분들이 많아 깨끗한 것과 거리가 멀어졌었는지를 느낀다.. 다시 그 때를 복기하고 지금과 비교하며 책을 정리해본다 

 

  • 관심사 분리
    • 어플리케이션을 서로 겹치지 않는 개별 단위로 나누는 과정 
    • 즉 잘게 잘 쪼개야한다는거 
    • 이 때 객체를 생성하거나 의존성을 연결할 때 모듈성이 깨지지 않게 해야하고 관심사를 잘 분리해야 이를 높게 유지할 수 있다.
  • 시스템 생성시스템 사용을 분리해야한다. 
    • 생성과 관련한 코드는 모두 main이나 main이 호출하는 모듈로 옮긴다.
    • 모든 의존성이 main에서 애플리케이션으로 향한다.
    • 애플리케이션은 main이나 객체가 생성되는 과정을 모른다.
    • 애플리케이션은 모든 객체가 생성되었고 모든 의존성이 연결되었다고 가정한다.

 

  • 의존성 주입
    • 지금 Typescript에서 nest.js를 사용하려는 이유라고 들었음. (당장 진행할 내용이 아니라서 아직 공부를 시작하진 않았는데 의존성을 주입하는데 있어 nest.js가 더 용이할 뿐만이 아니라 의존성 문제가 덜 생긴하고 함)
      • 예컨데 테스트 코드를 돌릴 때 돌아가면 안 되는 부분에 대해서 mocking 처리해서 하는데 의존성 주입을 좀 더 간편하게 하는 nestjs를 사용하게 되면 해당 function을 다른 파일을 참조하도록 해서 의존성을 돌려 코드 내부에서 구동 서버 환경에 따라 코드에 따라 다르게 흘러가게 하는 그런 로직을 안 넣어줘도 된다. 
      • 예컨데 비슷한 원리로는 외부 환경 변수 관리임. 환경 변수 자체는 코드에 있는게 아님. 서버 환경에 따라서 다른 환경 변수 ( DB host 정보, API token 키) 들을 다르게 할당시킬 수 있다. 이런게 역전 제어임.
    • 필요한 객체를 직접 생성하는 것이 아닌, 외부로부터 필요한 객체를 받아서 사용 하는 것이다. 이를 통해 객체간의 결합도를 줄이고 코드의 재활용성을 높여준다.
    • 제어 역전에서는 한 객체가 맡은 보저 책임을 새로운 객체에게 전적으로 떠넘긴다. 새로운 객체는 넘겨받은 책임만 맡으므로 단일 책임 원칙을 지키게 된다.
  • 횡단 관심사 
    • 로깅, 보안, 트랜잭션 등등 다수의 모듈에서 반복적으로 나타나는 부분 영속성과 같은 관심사는 애플리케이션의 자연스러운 객체 경계를 넘나드는 경향이 있다. 모든 객체가 전반적으로 동일한 방식을 이용하게 만들어야 한다.
반응형