책에서는 객체적구조와 자료구조의 혼종을 만들지 말라고한다. 엄밀히 따지면 목적이 다르다고 생각이 들긴하는데, 그 경계지점의 대한 경험이 많지는 않아서 일단 개념적인 접근을 인지하고 구분하려고 생각한다.
각각의 목적에 더 적합한 방식의 구조로 개발을 해보자.
책에 나온 기차충돌의 개념 체이닝은 개념이 좀 달라서 구분하고 싶음
항목 | 기차 충돌 (Train Wreck) | 체이닝 (Chaining) |
---|---|---|
맥락 | 클린 코드 (Clean Code) 등에서의 코드 스타일 경고 | 함수형 프로그래밍 등에서의 메서드 체이닝 기법 |
주 대상 | 객체의 속성에 깊게 접근하는 코드 구조 | 함수의 결과를 이어서 다음 함수로 전달하는 구조 |
동작 방향 | 점(dot) 연산자를 따라 한 대상의 내부로 파고드는 구조 | 한 연산 결과가 다음 연산의 입력이 되어 이어지는 구조 |
예시 | user.getAddress().getCity().getZipCode() | array.map().filter().reduce() |
목적 | 내부 정보 접근 (속성 추출 등) | 값 변환 및 가공 (데이터 흐름 처리) |
문제점 (가능성) | 강한 결합, 디미터 법칙 위반, 테스트 어려움 등 | 과도하면 디버깅 어려움, 불명확한 흐름 |
의미상 유사성 | 표면상 유사 (모두 .something().something() 구조) | 목적과 흐름은 명확히 다름 |