여백에서 얻은 통찰을 바탕으로 시작하는 설계
최근 '설계란 무엇인가’에 대해 고민을 한 적이 있었습니다. ‘전체적인 시스템을 구상하는 것’, ‘애플리케이션이 동작하기 위해 어떤 개념을 차용하고 각 개념들이 어떻게 상호작용 할지 정의하는 것’ 등 다양한 관점에서 생각해 보았는데, 생각을 할수록 가장 낮은 수준에서 '이 코드를 어디에 위치할 것인가'에 대한 활동이라고 정의하게 되었습니다.
이 관점에서 비슷한 코드끼리 뭉쳐두는 행위 자체를 설계 활동이라고 할 수 있고, 그래서 설계라는 것이 큰 일이 아니라고 생각할 수 있었습니다. 빈 줄을 넣는 행위조차 코드의 위치가 바뀌는 것이기 때문에 (스스로 내린 정의 범위 안에서) 설계 활동이라 할 수 있기 때문입니다.
코드 사이에 빈 줄을 넣는 행위를 우리가 문장을 쓸 때, 단어 사이에 공백을 넣는 것과 같은 행위라는 생각을 했습니다. 예를들어문장을이렇게쓰면무슨말인지이해하기어렵지만, 공백으로 구분해주면 무슨 말을 하는지 비교적 쉽게 이해할 수 있기 때문입니다.
더 나아가 '관련 있는 코드를 뭉쳐둔다'는 것에서 객체 지향 스러운 면이 있다고 생각했습니다. 객체 지향은 관련된 데이터와 그 데이터를 조작하는 행위(메서드)를 하나의 단위(객체)로 묶는 프로그래밍 패러다임입니다. 이는 코드의 재사용성을 높이고, 유지보수를 쉽게 만들며, 복잡한 문제를 더 작고 관리하기 쉬운 부분으로 나누는 데 도움을 줍니다. 관련 있는 코드를 뭉쳐두는 행위는 이러한 객체 지향의 기본 원칙과 닮은 부분이 있다고 생각 했습니다. 비슷한 코드를 뭉쳐둠으로 응집도를 높이고, 자연스럽게 객체 지향적인 설계를 할 수 있겠다고 생각 했습니다.
추가로 데이터베이스 테이블 정규화 과정이 생각 났습니다. 데이터베이스 정규화는 데이터의 중복을 최소화하고, 데이터 무결성을 보장하며, 데이터베이스 구조를 명확하게 만드는 과정입니다. 이와 유사하게, 하나의 함수 내에서 맥락에 따라 구분 하면 공통적인 부분이 눈에 들어오고, 그대로 추출을 하면 재사용 가능한 형태로 리팩토링 할 수 있겠다고 생각 했습니다. 이는 마치 데이터베이스에서 반복되는 데이터를 별도의 테이블로 분리하는 것과 닮은 부분이 있다고 생각 했습니다. 결과적으로 코드의 재사용성이 높아지고, 변경이 필요할 때 한 곳만 수정할 수 있게 됩니다.
'개발 방법론 > tidy first' 카테고리의 다른 글
tidy first 13장 '하나의 더미' 를 읽고 (0) | 2024.10.26 |
---|---|
tidy first 12장 '도우미 호출' 를 읽고 (2) | 2024.10.24 |
tidy first 10장 '명시적인 매개변수' 를 읽고 (0) | 2024.10.18 |
tidy first 9장 '설명하는 상수' 를 읽고 (0) | 2024.10.14 |
tidy first 8장 '설명하는 변수' 를 읽고 (1) | 2024.10.14 |