Five Lines of Code - 5. 유사한 코드 융합하기

주제: 조건부 산술로 구조 노출, 전략 패턴 도입 및 구현체가 하나뿐인 인터페이스를 만들지 말기

🔖 5.4 클래스 간의 코드 통합

책의 내용

UML(Unified Modeling Language)라는 프레임워크는 코드에 대한 속성을 전달하기 위해 다양한 유형의 표준 다이어그램으로 구성됩니다. 이 중, 클래스 다이어그램은 클래스의 구조가 서로 어떤 관계가 있는지 보여줍니다.

"컴퓨터 과학의 모든 문제는 간접 레이어를 도입함으로써 해결할 수 있다"는 유명한 말이 있습니다. 이것이 바로 인터페이스 입니다. 세부적인 내용은 추상화 아래에 숨깁니다. 존 카맥은 "추상화는 인지된 복잡성의 감소를 위해 실제 복잡성의 증가를 허용하는 것이다" 라는 말을 통해 우리가 추상화에 신중해야 한다는 것을 암시합니다.

나의 생각

처음에는 책을 통해 UML 개념을 이해하기 힘들었으나, 한 아티클에서 설명한 부분을 통해 UML의 사용 목적과 의미에 대해 잘 와닿았다. 내용은 이러했다.

"UML이란, OMG(Object Management Group)에서 표준으로 채택한 통합 모델링 언어입니다. 즉, 모델을 만드는 표준 언어인 것입니다. 모델이란 어떤 것을 실제로 만들 때 어떻게 만들면 잘 작동할지 미리 검증해 보는 것이며, 실제 물건을 만드는 비용보다 비용이 훨씬 적을 경우에 모델을 만들어 설계를 검사합니다."

"소프트웨어에서의 모델은 건축, 항공 등의 모델과는 다른 면이 있습니다. 하드웨어를 제작 시, 설계 유무는 비용의 엄청난 차이가 있지만, 소프트웨어에서의 모델을 만드는 일은 비용이 적게 들지만 훨씬 적게 드는 것은 아닐 수 있습니다. 때로는 오히려 개발보다 비용이 더 많이 들 수도 있습니다. 그래서 UML은 시험해 볼 구체적인 것이 있고, 그것을 코드로 시험해 보는 것보다 UML로 시험해 보는 쪽이 비용이 덜 들 때 주로 사용합니다. (e.g. 클래스 의존성 파악, 유지보수를 위한 설계, 사람들과 의사소통 시 등)"

"UML을 그리는데에 가장 좋은 도구는 종이와 펜이라는 말이 있듯이, 습관적으로 만드는 게 아니라, 필요에 의해 만드는 것이 가장 좋은 것 같습니다."

🔖 5.5 유사 함수 통합하기

책의 내용

유사한 코드를 가진 곳은 이것들을 통합하는 데에 전략 패턴의 도입을 활용할 수 있습니다. 두 함수가 동일하지 않으므로 첫 번째 것은 이미 존재하고, 두 번째 것을 도입해야 한다는 가정으로 처리해야 합니다. 즉, 변형을 도입하는 것입니다.

전략 도입 시, 변형을 추가할 수 있도록 구현에서 인터페이스 추출을 사용합니다.

📚 참고 자료

Last updated