KSCOLD LogoKSCOLD
Blog
Feed
Product
Admin Night
Vault
Guestbook
Info

Vault 목록

OOP(Object-Oriented Programming)

연결된 노트와 함께 읽기

OOP(Object-Oriented Programming)

2026년 5월 17일
  • OOP(Object-Oriented Programming)는 객체지향 프로그래밍이라는 뜻으로 소프트웨어를 객체(Object) 단위로 모델링하고 객체(Object) 간의 상호작용을 중심으로 프로그래밍하는 개념이다.

SOLID 원칙

  • OOP의 5가지 설계 원칙인 SOLID를 가진다.

1. Single Responsibility Principle(SRP, 단일 책임의 원칙)

  • 하나의 클래스(class)는 하나의 책임만 가져야 한다.
  • 클래스(class)가 너무 많은 기능을 가지면 코드의 응집성(cohesion)이 떨어지고, 유지보수가 어려워진다.
  • 따라서 각 클래스는 한 가지 변경 이유만을 가져야 한다.

2. Open/Closed Principle(OCP, 개방/폐쇄 원칙)

  • 소프트웨어 엔티티(Entity)(클래스(class), 모듈(Module), 함수(Function) 등)는 확장에 대해서는 열려 있어야 하지만, 수정에 대해서는 닫혀 있어야 한다.
  • 즉, 새로운 기능이 추가될 때 기존 코드를 수정하지 않고 확장할 수 있어야 한다.

3.Liskov Substitution(LSP, 리스코프 치환 원칙)

  • 자식 클래스는 언제나 부모 클래스의 자리에 사용될 수 있어야 한다.
  • 이는 상속 관계에서 하위 클래스는 상위 클래스의 모든 기능을 사용할 수 있어야 함을 의미한다.
  • 즉, 자식 클래스는 부모 클래스와 호환성을 유지해야 한다.

4. Interface Segregation Principle(ISP, 인터페이스 분리 원칙)

  • 클라이언트는 자신이 사용하지 않는 메서드(Method)에 의존하면 안 된다.
  • 인터페이스(Interface)는 그 인터페이스(Interface)를 구현한 클래스(class)가 사용하지 않는 메서드(Method)를 제공해서는 안 된다.
  • 이는 인터페이스(Interface)를 여러 개로 분리하여 클라이언트가 필요한 메서드(Method)만 이용하도록 하는 것을 의미한다.

5.Dependency Inversion Principle(DIP, 의존성 역전 원칙)

  • 고수준 모듈(Module)은 저수준 모듈(Module)에 의존해서는 안 되며, 양쪽 모두 추상화에 의존해야 한다.
  • 즉, 추상화된 인터페이스(Interface)나 추상 클래스(Abstract Class)에 의존함으로써 유연하고 확장 가능한 구조를 만들어야 한다.

NestJS와 객체지향 프로그래밍

  • NestJS는 객체지향적인 특징을 가진다.

  • 띠리서 NestJS는 OOP(객체지향 프로그래밍) 원칙을 기반으로 하는 프레임워크이고 SOLID 원칙을 잘 따를 필요가 있다.

  • 의존성 주입(Dependency Injection)을 최소화하려는 노력은 가장 기본적인 원칙 중 하나인 의존성 역전 원칙을 윈반할 수도 있다.

  • 적절히 필요한 상황에서는 의존성 주입(Dependency Injection)을 적절히 활용할 필요가 있다.

  • 리포지토리(Repository) 단에서 쿼리(Query)문으로 많은 데이터를 합치는 작업은 경우에 따라 적절히 활용하면 좋지만 서로 기능에 맞게 서비스(Service) 단에서 합치는게 적절한 것으로 보인다.

1. 클래스 기반 구조

  • NestJS 컴포넌트(Component)(컨트롤러(Controller), 서비스(Service) 등)는 클래스(class)로 정의된다.
  • 클래스(class)는 속성(Property)과 메서드(Method)를 포함하며, 이런한 클래스(class)는 객체(Object)를 나타낸다.

2. 상속 및 다형성

  • NestJS에서는 클래스(class) 상속(Inheritance)을 통해 코드를 재사용하고 확장할 수 있다.
  • 또한 타입스크립트(TypeScript)의 인터페이스(Interface)와 추상 클래스(Abstract Class)를 사용하여 다형성을 지원한다.

3.의존성 주입

  • 객체지향 프로그래밍의 원칙 중 하나는 의존성 주입(Dependency Injection)이다.

4. 캡슐화

  • NestJS는 캡슐화를 통해 객체(Object) 내부의 상태와 동작을 캡슐화하고 외부에서의 접근을 제한한다.

Synapse Map Insight