티스토리 뷰

도서/클린 코드

시스템

woo'^'chang 2022. 7. 21. 18:39
복잡성은 죽음이다. 개발자에게서 생기를 앗아가며, 제품을 계획하고 제작하고 테스트하기 어렵게 만든다.

복잡한 코드를 보게 된다면 읽을 엄두조차 안 나게 되는데 유지보수와 테스트 진행까지 상상해 보았을 때 벌써 생기를 빼앗긴 기분이 듭니다. 이번 장에서는 클래스보다 더 높은 추상화 수준인 시스템 수준에서도 깨끗함을 유지하는 방법에 대해 살펴봅니다.

시스템 제작과 시스템 사용을 분리하라

소프트웨어 시스템은 객체를 제작하고 의존성은 연결하는 준비 과정과 이후에 이어지는 런타임 로직을 분리해야 합니다. 설정 논리와 일반 실행 논리를 분리해야 모듈성이 높아집니다.

Main 분리

간단한 제어 흐름을 가지고 있는 방법입니다. main 함수에서 시스템에 필요한 객체를 생성한 후 이를 애플리케이션에 넘깁니다. 애플리케이션은 그저 객체를 사용할 뿐입니다. 애플리케이션은 main이나 객체가 생성되는 과정을 전혀 모릅니다. 단지 모든 객체가 적절히 생성되었다고 가정하고 있습니다.

팩토리

객체가 생성되는 시점을 애플리케이션이 결정하는 상황도 존재합니다. 이 상황에서는 ABSTRACT FACTORY 패턴을 사용합니다. 해당 패턴을 사용하면 애플리케이션이 객체 생성 시점을 결정할 수 있지만 객체가 생성되는 과정이나 방법은 알지 못합니다.

의존성 주입

사용과 제작을 분리하는 강력한 메커니즘 하나가 의존성 주입입니다. DI 컨테이너는 요청이 들어올 때 필요한 객체의 인스턴스를 만든 후 메서드를 사용해 의존성을 설정합니다.

확장

처음부터 시스템을 올바르게 만들 수는 없기에 적절한 시스템 구현 후 조정하고 확장해 나가야 합니다. 이것은 반복적이고 점진적인 애자일 방식의 핵심입니다.

마치며

모든 추상화 단계에서 의도는 명확하게 표현해야 합니다. 그러기 위해서는 구현 관심사를 적절하게 분리하는 과정이 필요합니다. 추상화 단계가 높아졌다 할지라도 돌아가는 가장 단순한 수단을 써야 한다는 사실을 명심해야 합니다.

'도서 > 클린 코드' 카테고리의 다른 글

동시성  (0) 2022.07.22
창발성  (0) 2022.07.21
클래스  (0) 2022.07.19
단위 테스트  (0) 2022.07.17
경계  (0) 2022.07.17
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday