
리액트로 프론트엔드 개발을 하고 있다면 Presentational & Container 디자인 패턴에 대해 들어보셨을 것이라고 생각합니다.
그렇다면 왜 이런 디자인 패턴을 사용해야 하는지도 알고 계신가요? 오늘은 왜 사용하는지에 대해 이야기해 보려고 합니다.
Presentational & Container 디자인 패턴은 모든 개발자의 영원한 숙명인 Controller와 View를 분리하여 "하나의 함수는 하나의 일만 해야 한다"는 단일 책임 원칙을 준수하고, 유지보수를 용이하게 하며 예상치 못한 에러를 방지하기 위해 고안된 패턴입니다. 이 패턴은 UI 로직과 비즈니스 로직을 명확히 분리함으로써 코드의 가독성과 재사용성을 높이고, 테스트를 더욱 용이하게 만듭니다.
Presentational 컴포넌트는 주로 UI 렌더링에 집중하고, Container 컴포넌트는 데이터 처리 및 상태 관리를 담당하여 각 컴포넌트가 자신의 역할에 충실하게 합니다.

setState 함수를 직접 전달하면 편하게 Presentational 컴포넌트에서 사용할 수 있는건 사실입니다. 다만
Presentational Component는 단순히 UI 만을 위해 사용하는 컴포넌트 입니다. 상위 컴포넌트에서 Props 로 전달된 데이터를 변경할 수 있는 setState 함수는 Presentational Component의 권한을 뛰어넘는 일입니다.
add 버튼 컴포넌트에 setState 함수를 props로 전달했다고 가정했을 때, add 버튼은 온전히 추가하는 로직만 할 수 있을까요?
실수라도 삭제, 수정 기능을 구현할 수 있게됩니다. 그것은 개발자의 개발 의도와는 다르게 작동할 수 있고, add 버튼의 권한을 뛰어넘는 행동이기 때문에 setState 함수를 직접적으로 전달해서는 안됩니다.마치 학생에게 선생님의 권한을 주는 것과 같기때문이죠.