관심사의 분리

관심사의 분리

"같은 속도로 변하는 것은 같이 있어야 하며, 다른 속도로 변하는 것은 분리되어있어야 한다."

  • 핵심 주제는 "읽고 이해하기 쉬워야 한다"는 것

    • 사용자 인터페이스(UI)에는 비즈니스 로직이 포함되어선 안됨

    • 코드블록을 작고 분리된 상태로 유지해야함

    • 관련 없는 관심사들은 분리하기

  • 코드베이스에서 순수함수 형턔로 구현되지 않은 부분들은 분리하기 쉬워짐

  • 순수함수의 반환값이 다른 순수함수의 입력으로 들어가는 형태를 가지는 순차적 조합이 머리에 잘들어옴

조합

조합은 분리의 결과를 다시 읽기 쉬운 이야기로 만드는 단계

  • 조합과 분리는 복잡하게 연결되어 있음

  • 따라서 조합해서 만들어진 모델은 명확해야함

  • 조합은 상위로 갈수록 선언적이어야함

    • 하위에서는 계산과 변환에 집중하고, 상위에서는 무엇을 하는지가 드러나야함

    • 순수 함수의 출력이 다음 순수 함수의 입력으로 이어지는 구조가 가장 이해하기 쉬움

  • 조합 자체가 비즈니스 로직을 설명해야함

    • 개별 함수보다, 그것들이 어떻게 조합되는지가 실제 도메인 동작을 드러냄

    • 그래서 조합 레이어는 도메인 용어로 읽혀야함

  • 조합은 흐름을 숨기지 않아야함

    • 객체지향 조합 즉, 객체를 중첩시키는 형태로 조합해나가면, 제어 흐름과 책임을 감추기 쉬워짐

    • 반면 함수형 조합은 데이터 흐름과 실행 순서가 코드 표면에 드러남

참조 투명성

부수효과가 없으며, 출력이 입력에 의해서만 결정되는 결정론적 메서드에 대해 '참조 투명성'을 가졌다고함

  • 이를 다른 말로 '순수 함수'라고 함

  • 순수 함수가 반환되었을 때 그 결과, 즉 반환값에만 신경을 쓰면됨

  • 해당 함수가 어떤 방식으로 그 결과에 도달했는지는 구현의 세부사항일 뿐

  • 참조 투명성이 있는 함수는 관련 없는 것들을 제거하고, 필수적인 것을 강조하는 것 === 추상화

  • 참조 투명성이 있는 함수의 호출은 그 출력으로 대체할 수 있다.

    • 따라서 출력이 어떤것인지 알고나면 호출하는 코드 부분만 읽고 해석하면서 따라가면 됨 (가독성)

  • 비결정적이고 부수효과를 갖는 부분들은 모두 시스템의 가장자리로 밀어내야함

  • 부수효과를 가진 동작들은 시스템의 바깥 부분에 가깝게 유지하고, 프로그램의 핵심이 되는 복잡한 논리는 순수함수로 작성!

Last updated