1. OOP(객체지향 프로그래밍)란?
- Object-Oriented Programming(객체지향 프로그래밍)
: 소프트웨어를 객체 단위로 모델링하고 객체 간의 상호작용을 중심으로 프로그래밍하는 개념이다. - OOP의 5가지 설계 원칙(SOLID 원칙)
- Single Responsibility Principle(SRP, 단일 책임의 원칙)
- 하나의 클래스는 하나의 책임만 가져야 한다. 클래스가 너무 많은 기능을 가지면 코드의 응집성(cohesion)이 떨어지고, 유지보수가 어려워진다. 따라서 각 클래스는 한 가지 변경 이유만을 가져야 한다.
- Open/Closed Principle(OCP, 개방/폐쇄 원칙)
- 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만, 수정에 대해서는 닫혀 있어야 한다. 즉, 새로운 기능이 추가될 때 기존 코드를 수정하지 않고 확장할 수 있어야 한다.
- Liskov Substitution(LSP, 리스코프 치환 원칙)
- 자식 클래스는 언제나 부모 클래스의 자리에 사용될 수 있어야 한다. 이는 상속 관계에서 하위 클래스는 상위 클래스의 모든 기능을 사용할 수 있어야 함을 의미한다. 즉, 자식 클래스는 부모 클래스와 호환성을 유지해야 한다.
- Interface Segregation Principle(ISP, 인터페이스 분리 원칙)
- 클라이언트는 자신이 사용하지 않는 메서드에 의존하면 안 된다. 인터페이스는 그 인터페이스를 구현한 클래스가 사용하지 않는 메서드를 제공해서는 안 된다. 이는 인터페이스를 여러 개로 분리하여 클라이언트가 필요한 메서드만 이용하도록 하는 것을 의미한다.
- Dependency Inversion Principle(DIP, 의존성 역전 원칙)
- 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 양쪽 모두 추상화에 의존해야 한다. 즉, 추상화된 인터페이스나 추상 클래스에 의존함으로써 유연하고 확장 가능한 구조를 만들어야 한다.
- Single Responsibility Principle(SRP, 단일 책임의 원칙)
2. Nest.js와 객체지향 프로그래밍
- Nest.js의 객체지향적인 특징
- 클래스 기반 구조
: Nest.js 컴포넌트(Controller, Service 등)는 클래스로 정의된다. 클래스는 속성과 메서드를 포함하며, 이런한 클래스는 객체를 나타낸다. - 상속 및 다형성
: Nest.js에서는 클래스 상속을 통해 코드를 재사용하고 확장할 수 있다. 또한 TypeScript의 인터페이스와 추상 클래스를 사용하여 다형성을 지원한다. - 의존성 주입
: 객체지향 프로그래밍의 원칙 중 하나는 의존성 주입(Dependency Injection)이다. - 캡슐화
: Nest.js는 캡슐화를 통해 객체 내부의 상태와 동작을 캡슐화하고 외부에서의 접근을 제한한다.
- 클래스 기반 구조
3. 정리 및 결론
- Nest.js는 OOP(객체지향 프로그래밍) 원칙을 기반으로 하는 프레임워크이다. SOLID 원칙을 잘 따를 필요가 있다.
- 의존성 주입을 최소화하려는 노력은 가장 기본적인 원칙 중 하나인 의존성 역전 원칙을 윈반할 수도 있다. 따라서 적절히 필요한 상황에서는 의존성 주입을 적절히 활용할 필요가 있다.
- 따라서 레포지토리 단에서 쿼리문으로 많은 데이터를 합치는 작업은 경우에 따라 적절히 활용하면 좋지만 서로 기능에 맞게 서비스 단에서 합치는게 적절한 것으로 보인다.
'JavaScript Dev. > Nest.js' 카테고리의 다른 글
Nest.js - Module (0) | 2024.02.28 |
---|---|
Nest.js 설치부터 기본 개념까지 (1) | 2024.02.06 |
Nest.js를 이용한 refresh token 구현하기 (0) | 2023.11.16 |
passport를 이용한 kakao, naver, google 소셜 로그인 구현 (0) | 2023.08.18 |
Nest.js (0) | 2023.08.18 |