[Node.js][TIL] 객체지향 - OOP, SOLID

Trippy·2023년 12월 1일
0

Node.js

목록 보기
19/28
post-thumbnail

객체 지향 프로그래밍

객체 지향 프로그래밍 이란, 객체들이 모여서 상호 협력하면서 데이터를 처리하는 방식의 프로그래밍 설계 방법을 일컫는다.

좀 더 쉽게 말하자면, 프로그램을 묶음 단위로 잘게 쪼개서, 추후에 가져다 쓰기 편하게 만들어 놓은 프로그래밍 방식이라고 보면 된다.

이처럼 레고 블럭 조립하듯이 컴포넌트를 유연하고 변경이 용이하기 때문에, 현업에서 대규모 소프트웨어 개발에 많이 사용된다.

클래스(Class) 문법을 지원하는 것 처럼 대부분의 프로그래밍 언어는 객체 지향 언어 방식을 지원하고 있다.
즉, 객체 지향 프로그래밍 개념을 배우면, 그 기술을 다양한 많은 언어에 적용할 수 있다는 뜻이기도 하다.

객체 지향 프로그래밍<---반대---> 절차 지향 프로그래밍

추상화

  • 프로그래밍에서의 추상화는 클래스를 정의할 때 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화 하는 것을 말한다.

  • 클래스들의 중요하고 공통된 성질들을 추출하여 부모(슈퍼) 클래스를 선정하는 개념과, 이벤트 발생의 정확한 절차나 방법을 정의하지 않고 대표할 수 있는 표현으로 대체하는 것을 말한다.

  • 객체 지향 프로그래밍의 추상화는 크게 두가지로 나뉘는데, 객체의 관련 속성 만 '표시' - 데이터 추상화 하고 불필요한 세부 정보는 '숨긴다' - 제어 추상화 가 있다.

캡슐화

  • 객체 내부의 세부적인 사항을 감추는 것, 즉 중요한 정보를 외부로 노출시키지 않도록 만드는 것을 캡슐화(Encapsulation)라고 한다.

상속

  • 상속(Inheritance)은 하나의 클래스가 가진 특징(함수, 변수 및 데이터)을 다른 클래스가 그대로 물려 받는 것을 말합니다.

  • 이미 정의된 상위 클래스의 특징을 하위 클래스에서 물려받아 코드의 중복을 제거하고 코드 재사용성을 증대시킵니다.

다형성

  • 다형성(Polymorphism)은 하나의 객체(클래스)다양한 형태로 동작하는것을 의미합니다. 이는 객체가 가진 특성에 따라 같은 기능이 다르게 재구성되는 것을 의미합니다.

  • 동일한 메서드나 함수 명을 사용하더라도, 클래스마다 그 메서드가 다르게 동작하는 것이 다형성의 핵심입니다.


객체 지향 설계 5원칙

SOLID의 종류

  • 단일 책임의 원칙 (Single Responsibility Principle, SRP)
  • 개방-폐쇄 원칙 (Open-Closed Principle, OCP)
  • 리스코프 치환 원칙 (Liskov substitution principle, LSP)
  • 인터페이스 분리 원칙 (Interface segregation principle, ISP)
  • 의존성 역전 원칙 (Dependency Inversion Principle, DIP)

단일 책임의 원칙 (SRP)

  • 하나의 객체는 단 하나의 책임을 가져야 한다. 즉, 클래스나 모듈을 변경할 이유가 단 하나 뿐이어야 한다는 원칙이다.

개방-폐쇄 원칙 (OCP)

소프트웨어 엔티티 또는 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.

  • 즉, 소프트웨어 개체의 행위확장될 수 있어야 하지만, 개체를 변경해서는 안됩니다.
  • 조금 더 쉽게 설명하자면, 기존 코드에 영향을 주지않고 소프트웨어에 새로운 기능이나 구성 요소추가할 수 있어야 한다는 것입니다.

리스코프 치환 원칙 (LSP)

어플리케이션에서 객체는 프로그램의 동작에 영향을 주지 않으면서, 하위 타입의 객체로 바꿀 수 있어야 한다.

  • 즉, ST의 하위 유형이라면, 프로그램의 기능에 변화를 주지 않고서도 T 타입의 객체를 S 객체로 대체할 수 있어야합니다.

인터페이스 분리 원칙 (ISP)

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

  • 클라이언트가 필요하지 않는 기능을 가진 인터페이스에 의존해서는 안 되고, 최대한 인터페이스작게 유지해야합니다.
  • 즉, 사용자가 필요하지 않은 것들에 의존하지 않도록, 인터페이스는 작고 구체적으로 유지해야 한다는 것입니다.

의존성 역전 원칙 (DIP)

프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.

  • , 높은 계층의 모듈(도메인)이 저수준의 모듈(하부구조)에 직접 의존해서는 안된다.

profile
감금 당하고 개발만 하고 싶어요

0개의 댓글