관심사의 분리
관심사의 분리
"같은 속도로 변하는 것은 같이 있어야 하며, 다른 속도로 변하는 것은 분리되어있어야 한다."
핵심 주제는 "읽고 이해하기 쉬워야 한다"는 것
사용자 인터페이스(UI)에는 비즈니스 로직이 포함되어선 안됨
코드블록을 작고 분리된 상태로 유지해야함
관련 없는 관심사들은 분리하기
코드베이스에서 순수함수 형턔로 구현되지 않은 부분들은 분리하기 쉬워짐
순수함수의 반환값이 다른 순수함수의 입력으로 들어가는 형태를 가지는 순차적 조합이 머리에 잘들어옴
조합
조합은 분리의 결과를 다시 읽기 쉬운 이야기로 만드는 단계
조합과 분리는 복잡하게 연결되어 있음
따라서 조합해서 만들어진 모델은 명확해야함
조합은 상위로 갈수록 선언적이어야함
하위에서는 계산과 변환에 집중하고, 상위에서는 무엇을 하는지가 드러나야함
순수 함수의 출력이 다음 순수 함수의 입력으로 이어지는 구조가 가장 이해하기 쉬움
조합 자체가 비즈니스 로직을 설명해야함
개별 함수보다, 그것들이 어떻게 조합되는지가 실제 도메인 동작을 드러냄
그래서 조합 레이어는 도메인 용어로 읽혀야함
조합은 흐름을 숨기지 않아야함
객체지향 조합 즉, 객체를 중첩시키는 형태로 조합해나가면, 제어 흐름과 책임을 감추기 쉬워짐
반면 함수형 조합은 데이터 흐름과 실행 순서가 코드 표면에 드러남
참조 투명성
부수효과가 없으며, 출력이 입력에 의해서만 결정되는 결정론적 메서드에 대해 '참조 투명성'을 가졌다고함
이를 다른 말로 '순수 함수'라고 함
순수 함수가 반환되었을 때 그 결과, 즉 반환값에만 신경을 쓰면됨
해당 함수가 어떤 방식으로 그 결과에 도달했는지는 구현의 세부사항일 뿐
참조 투명성이 있는 함수는 관련 없는 것들을 제거하고, 필수적인 것을 강조하는 것 === 추상화
참조 투명성이 있는 함수의 호출은 그 출력으로 대체할 수 있다.
따라서 출력이 어떤것인지 알고나면 호출하는 코드 부분만 읽고 해석하면서 따라가면 됨 (가독성)
비결정적이고 부수효과를 갖는 부분들은 모두 시스템의 가장자리로 밀어내야함
부수효과를 가진 동작들은 시스템의 바깥 부분에 가깝게 유지하고, 프로그램의 핵심이 되는 복잡한 논리는 순수함수로 작성!
Last updated