책을 읽으며 든 의문들…
리액트의 컴포넌트는 state를 가지고, 메서드(핸들러 함수, 커스텀 훅, 이벤트 처리 함수, useEffect 등)를 포함하며, 다른 컴포넌트와 props를 통해 상호작용한다. 따라서 객체지향적 사고로 컴포넌트를 설계하면 재사용 가능한 컴포넌트를 쉽게 만들 수 있고, 복잡한 UI 구조를 더 직관적으로 분리하고 관리할 수 있다.
상태 관리 로직을 별도의 객체로 분리하면 리액트 컴포넌트는 UI에, 비즈니스 로직은 객체에서 처리되어 보다 가독성 및 유지보수가 용이해진다.
실제로 zustand와 같은 상태관리 라이브러리 또한 객체지향 패러다임을 토대로 한다. 예로, zustand의 스토어는 객체지향적인 관점에서 보면 클래스 처럼 동작함을 알 수 있다. 스토어는 상태와 상태를 조작하는 메서드를 캡슐화하고, 외부 코드에서는 이 스토어를 호출하여 상태를 읽거나 변경한다.
const useCounterStore = create((set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
decrement: () => set((state) => ({ count: state.count - 1 })),
}));
책에서도 언급된 내용이지만, 클래스를 사용한다고 객체지향 프로그래밍을 하고 있다고 말할 수 없다.
그저 Class를 사용하고 있다고 해서 객체지향 프로그래밍이 아니고, 데이터를 분류하여 복잡도를 낮추고 각 요소에 역할을 부여하고 상호간 협력관계가 형성되도록 개발하려 하는 것이 객체지향 프로그래밍이라는 것