산 넘어 산 개발일지

Clean Code - 시스템 본문

Study/CleanCode

Clean Code - 시스템

Mountain96 2021. 3. 10. 10:04

 

 

시스템에서 가장 중요한 것은 유지보수이다.

유지보수에 가장 중요한 것은 영역(도메인)간의 분리이다.

따라서 우리는 코딩을 할 때 각 모듈들이 서로에게 끼치는 영향을 최소화 할 수 있도록 코드를 짜야 하고,

이를 위해서 등장한 여러 기법들을 알 필요가 있다.


주요 내용

  1. 관심사 분리

    • 애플리케이션이나 클래스와 같은 모듈이 하나의 관심사만 가지도록 분리하는 것(SRP와 비슷)
    • 이 관심사의 영역을 뚜렷하게 나누면 서로의 영역에 영향을 주지 않으므로 내가 원하는 부분만 수정할 수 있어서 
    • Main 분리
      • 객체나 모듈의 생성과 관련된 코드는 모두 main 혹은 main에서 호출하는 모듈이 담당한다.
      • 즉 시스템의 다른 모듈에서는 모든 객체가 이미 생성되었고 의존성이 연결되어 있다고 가정하는 것이다.
      • 추상 팩터리 패턴
        • 나머지 모듈들이 객체를 생성하는 시점을 정해야 할 때 사용
        • Factory 형식의 인터페이스를 main에서 구현해놓는다.
        • 이후 다른 모듈에서는 main에서 구현된 팩터리 객체를 통해 객체를 생성한다.
        • 이렇게 되면 객체가 생성되는 과정은 모른채 생성 시점만 지정할 수 있다.
    • 의존성 주입(Dependency Injection) 
      • 서비스(객체를) 선언만 하고, 이에 대한 정의는 외부에서 주입한다.
      • 클라이언트는 이 서비스의 인터페이스를 통해 사용만 하고, 이 서비스를 제공하는 역할은 외부에서 담당한다.
      • 제어 역전(Inversion of Control)
        • 제어 역할을 외부에 맡김
        • 한 객체에서의 보조 책임을 다른 객체에 넘김으로서 SRP를 지킴
    • 횡단 괌심사
      • 다른 관심사에 영향을 끼치며 깔끔하게 분리되지 못하는 관심사. 이로 인해 기존의 모듈성이 깨진다
  2. AOP(Aspect Oriented Programming)

    • "관점"이 모듈을 구성하는 개념
    • 자바 프록시
      • 객체 생성시 이를 커스텀 클래스로 한번 감싼다.
      • 커스텀 클래스에서는 원하는 객체 생성 전후에 필요한 작업을 해줄 수 있다.
      • 이 커스텀 클래스는 객체 생성 시 사용자가 원하는 상황에 맞는 객체를 생성해줄 수 있다.
      • 즉 사용자는 객체를 상황에 따라 계속 새로운 클래스를 만들 필요 없이 이 커스텀 클래스 하나로 만들 수 있는 것이다.
    • POJO(PlainOldJavaObject)
      • POJO는 도메인에 맞춰진 순수한 객체이므로, 사용자가 원하는 대로 구현하기 편하고 미래의 구조에 맞춰 유지보수하기도 수월하다.
    • DECORATOR 패턴
      • 객체간의 결합을 유연하게 지원하는 패턴
      • class A에 대해서 class B, class C의 기능을 합치고 싶은 경우 기존에는 class ABC를 새로 생성해야 함
      • 그러나 DECORATOR 패턴을 사용하면 classA에 B나 C를 유기적으로 결합할 수 있고, 적절한 조합을 사용자 임의로 할 수 있음

내 코드 돌아보기

 


느낀점

클린코드에서 지금까지 읽은 내용 중 가장 어려운 부분이었던 것 같다.

내용도 내용이지만, 일단 나에게는 생소한 단어들이 많이 등장했다.

제어역전, 관심사 분리, 영속성 등등...

이런 단어들도 나중에 차근차근 정리해두면 좋을 것 같다.

 

정리할 용어 : AOP, 자바 프록시, Decorator 패턴

'Study > CleanCode' 카테고리의 다른 글

Clean Code - 창발성  (0) 2021.03.18
Clean Code - 클래스  (0) 2021.03.04
Clean Code - 단위 테스트  (0) 2021.03.03
Clean Code - 경계  (0) 2021.03.01
Clean Code - 객체와 자료구조  (0) 2021.02.21
Comments