본문 바로가기
더 좋은 개발자 되기/개발자 책읽기

[개발자 책읽기] 클린 코드-애자일 소프트웨어 장인 정신 (11장 시스템)

by Wonit 2022. 3. 8.

해당 글은 Robert C.Martin 클린 코드 라는 책을 읽고 학습한 내용을 정리 및 회고하는 글 입니다. 자세한 사항은 YES 24 클린 코드 - 애자일 소프트웨어 장인 정신 에서 확인해주세요.

 

클린 코드 - 애자일 소프트웨어 장인 정신 (Uncle Bob)

 

  • 위키북스
  • 지은이: Robert C.Martin (Uncle Bob)
  • 옮긴이: 박재호, 이해영

 

 


 

이번 장에서 이야기하고자 하는 것

 

높은 추상화의 수준, 시스템 수준에서도 깨끗함을 유지하는 방법

 

시스템의 제작과 시스템 사용을 분리하라 (construction vs use)

 

  • 시작 단계는 모든 애플리케이션이 풀어야 할 관심사
  • 전형적인 예시로는 Lazy Initializing
    • 객체의 생성과 런타임 로직이 섞여있다
    • 책임이 여러개다
    • 관심사의 분리가 되지 않았다
  • 의존성 주입은 제작과 사용을 분리하는 가장 강력한 메커니즘
    • 가장 강력한 메커니즘

 

확장

 

  • 처음부터 '올바르게' 시스템을 만들 수 있다는 믿음은 미신이다.
    • 우리는 오늘 주어진 사용자 스토리에 맞게 시스템을 구현해야 한다
    • 내일은 새로운 스토리에 맞게 시스템을 조정하고 확장하면 된다.
  • TDD, Refactoring 으로 얻어지는 깨끗한 코드는 코드 수준에서 시스템을 조장하고 확장하기 쉽게 만들어진다.
  • 시스템 수준에서는 역시나 적절한 관심사의 분리이다.

 

횡단 관심사

  • 횡단 관심사는 통해서 모듈성을 확보하는 일반적인 방법론이다.
  • 특정 관심사를 지원하려면 시스템에서 특정 지점들이 동작하는 방식을 일관성 있게 바꾸어야 한다.
  • 대표적인 횡단 관심사
    1. Java Proxy
    2. 순수 자바 AOP 프레임워크
    3. AspectJ 관점

 

테스트 주도 시스템 아키텍처 구축

 

  • 아주 단순하면서도 멋지게 분리된 아키텍처로 결과물을 출시한다.
  • 이후 기반 구조들을 추가하며 조금씩 확장해 나가자

 

의사 결정을 최적화 하라

 

  • 모듈과 관심사의 분리가 된다면 지엽적 관리와 결정이 가능해짐
  • 가능한 마지막 순간까지 결정을 미루는 방법이 최선이다
  • 명백한 가치가 있을 때 표준을 현명하게 사용하라
    • 표준이 가져다주는 불필요함과 비효율이 존재할 수 있다.
    • 확실한 이득을 가져올 경우에만 사용하라

 

나의 해석과 회고

 

의사 결정을 최적화 하라, 내가 최근들어 가장 많이 느끼고 있는 것들이다.

 

성급한 의사 결정을 할 때면 즉, 무언가 결정이 된 상태로 프로젝트가 진행되다 보면 시야가 좁아지는 경험을 자주 했었고 그 해결 방법으로 의사결정을 최후로 미루도록 했었다.

 

비단 프로젝트 관리 뿐만 아니라 시스템 설계에서도 위의 방법이 매우 효과적이었다.

 

의사결정을 미루다 보면 어떠한 요구사항이 들어올지 모르기 때문에 최대한 많은 요구사항을 수용할 수 있도록 생각할 수 있게 되더라.

 

이러한 방법을 시스템 설계에서도 적용시킨다면 Uncle Bob 말 대로 깨끗한 시스템의 아키텍쳐가 탄생할 수 있을것 같다.

 

또한 한가지 더 느낀바가 있다면 명백한 가치가 있을 때 표준을 현명하게 사용하라 에서 몇가지 과거의 기억들이 스쳐지나갔다.

 

나는 왜 xxxServiceImpl 이라는 클래스를 쓸까? 왜 xxxDAO 라는 클래스를 썼을까?

 

요즘은 잘 하지는 않지만 사용하는 당시에도 왜 쓰고 왜 저런 이름을 부여했는지 모른다.

 

관례에 따라서 사용했다고는 하나 왜 관례가 나왔는지 잘 모른다.

 

이와 비슷한 맥락으로 내가 아직 알지는 못하나 명백한 가치가 없음에도 불구하고 사용하는 몇가지의 표준들이 있을것이다.

 

경계하자

댓글