반복하지 않기
중복은 코드의 길이를 늘리고 알고리즘이 변할 경우 중복되는 부분 전부를 수정해야 하고, 하나라도 빠뜨리면 오류가 발생할 확률을 중복의 갯수만큼 높인다.
어쩌면 중복은 소프트웨어에서 모든 악의 근원으로 많은 원칙과 기법이 중복을 없애거나 제어할 목적으로 고안되었다.
예를 들면, E.F.커드는 자료에서 중복을 제거할 목적으로 관계형 데이터베이스에 정규 형식을 만들었고, 객체 지향 프로그래밍은 코드를 부모 클래스로 몰아 중복을 없앤다.
구조적 프로그래밍, AOP(Aspect Orient Programming: 관점지향 프로그래밍), COP(Component Oriented Programming: 컴포넌트지향 프로그램) 모두 어떤 면에서는 중복 제거 전략에 해당된다.
구조적 프로그래밍
에츠허르 데이크스트라의 구조적 프로그래밍이 있다.
데이크스트라는 모든 함수와 함수 내 모든 블록에 입구와 출구가 하나만 존재해야 한다고 한다.
이 뜻은 함수는 return 문이 하나여야 하고 루프 안에서 break나 continue를 사용해선 안되고 goto도 절대 안된다고 한다.
하지만 함수가 클 경우에는 모르겠지만 작은 단위라면 위 규칙에서 얻는 이득은 미미하다.
그러므로 함수를 잘게 쪼개서 만든다면 간혹 return, break, continue를 여러 차례 사용해도 무방하다.
결론
모든 시스템은 특정 응용 분야 시스템을 기술할 목적으로 프로그래머가 설계한 도메인 특화 언어(DSL)로 만들어진다.
함수는 그 언어에서 보통 동사로, 클래스는 명사로 이루어진다.
프로그래머는 시스템을 '구현할' 프로그램이 아니라 '풀어갈' 이야기로 여겨야한다. 프로그래밍 언어라는 수단을 사용해 풍부하고 좀 더 표현력이 강한 언어를 만들어 이야기를 풀어나가야 한다는 말이다.
시스템에서 발생하는 모든 동작을 설명하는 함수 계층이 그 언어에 속한다.
재귀라는 기교로 각 종작은 그 도메인에 특화된 언어를 사용해 자신만의 이야기를 풀어야 가야 한다.
'클린 코드' 카테고리의 다른 글
[클린 코드] 형식 맞추기(1) (0) | 2022.01.11 |
---|---|
[클린 코드] 주석(2) (0) | 2022.01.05 |
[클린 코드] 주석(1) (0) | 2022.01.04 |
[클린 코드] 함수(2) (0) | 2021.12.27 |
[클린 코드] 함수(1) (0) | 2021.12.27 |