[13장] 타입스크립트와 객체 지향
13.1 타입스크립트와 객체 지향
- 프론트엔드에 객체 지향을 어떻게 적용하지?
- 우리가 자주 쓰고 있는 컴포넌트도 객체의 한 형태다.
- 객체 지향 패러다임에서는 객체 간의 협력 관계에 초점을 둔다.
- 객체 자체가 아니라 프레임워크에 의해 객체의 의존성이 주입되는 DI(Dependency Injection) 패턴을 따른다.
- 이러한 패턴을 더욱 명확하게 표현할 수 있게 해주는 것이 타입스크립트다.
- 우리는 이미 리액트나 뷰 같은 도구를 사용하며 DI를 활용하고 있다.
13.2 우아한형제들의 활용 방식
- 우아한형제들의 한 팀에서는 다음과 같은 설계 방식을 사용한다.
- 온전히 레이아웃만 담당하는 컴포넌트 영역
- 컴포넌트 영역 위에서 레이아웃과 비즈니스 로직을 연결해주는 커스텀 훅 영역
- 훅 영역 위에서 객체로서 상호 협력하는 모델 영역
- 모델 영역 위에서 API를 해석하여 모델로 전달하는 API 레이어 영역
13.3 캡슐화와 추상화
- 캡슐화란 다른 객체 내부의 데이터를 꺼내와서 직접 다루지 않고, 해당 객체에게 처리할 행위를 따로 요청함으로써 협력하는 것이다.
- 컴포넌트는 객체이므로 컴포넌트의 내부 데이터인 상태(state)가 캡슐화의 대상이 될 수 있다.
- 결국 컴포넌트 내의 상태와 prop을 잘 다루는 것도 캡슐화의 개념에 부합되는 것이다.
- props drilling이 심할수록 컴포넌트 간의 결합도는 높아지며 내부 처리 로직이 외부로 드러나기 마련이다.
- 즉, Props drilling은 좋지 못한 관계를 형성하게 하고 캡슐화를 저해한다.
- 이런 문제를 해결하기 위해 옵저버 패턴이 등장했으며 나아가 컨텍스트 API 및 여러 상태 관리 라이브러리가 생겨났다.
- 적절하게 캡슐화되고 추상회된 컴포넌트를 활용하면 애플리케이션을 더 유기적으로 구성할 수 있다.
- 최종적인 우리의 지향점은 객체들이 유기적으로 협력하게끔 해서 올바르게 도메인을 분리하는 것이다.
- 객체 지향은 유지보수를 위한 개념인데, 유지보수가 필요하지 않다면 객체 지향을 꼭 따를 필요가 없을지도 모른다.
- 어디에나 반드시 객체 지향이 필요한 것은 아니지만 객체 지향 관점으로 개발하는 것은 여전히 중요하다.