객체 지향 프로그래밍이란 상태(데이터)와 해당 데이터를 조작하는 프로세스(메서드)가 같은 모듈 내부에 배치되는 프로그래밍 방식이다
데이터와 기능이 연결되어 있어 코드의 구조와 동작을 직관적으로 파악 가능하다
객체 지향 프로그래밍의 핵심 원칙
캡슐화(Encapsulation)
- 중요 정보가 노출되지 않도록 객체 내부의 세부적인 사항을 감추는 것
JS에서는 변수 앞에 (_)를 붙이는 방식으로 진행
상속(Inheritance)
- 클래스가 지닌 함수, 변수 및 데이터를 다른 클래스가 물려받는 것
중복을 제거하고 코드 재사용성을 높이는 등 구조 파악 및 일관성 유지에 용이
추상화(Abstraction)
- 공통된 부분을 상위 개념으로 새로 정의하는 것
불필요한 세부사항을 제거하여 공통된 특성 파악 및 구조를 이해하기 쉽게 도움
다형성(Polymorphism)
- 하나의 객체가 다양한 방식으로 작동하는 것
동일한 메서드 및 함수를 사용하더라도 클래스에 따라 작동 방식이 상이하여 서비스의 기능을 변경 및 추가에 용이
객체 지향 설계의 5원칙
단일 책임의 원칙 (Single Responsibility Principle, SRP)
- 하나의 객체는 단 하나의 책임을 가져야 한다.
클래스 또는 모듈의 변경 요인이 하나만 존재해야한다는 원칙
개방-폐쇄 원칙 (Open-Closed Principle, OCP)
- 소프트웨어 엔티티 또는 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
기존 코드에 영향을 주지 않고 새로운 기능 또는 구성 요소를 추가할 수 있어야한다는 원칙
리스코프 치환 원칙 (Liskov substitution principle, LSP)
- 어플리케이션에서 객체는 프로그램의 동작에 영향을 주지 않으면서, 하위 타입의 객체로 바꿀 수 있어야 한다.
부모 클래스(Parents)와 자식 클래스(Child)가 있을 경우, 이 두가지의 클래스의 객체를 서로를 바꾸더라도 해당 프로그램에서 잘못된 결과를 도출하지 않아야하는 원칙
인터페이스 분리 원칙 (Interface segregation principle, ISP)
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
필요없는 기능에 영향받지 않도록 인터페이스를 구체적으로 나눠 유지해야한다는 원칙
의존성 역전 원칙 (Dependency Inversion Principle, DIP)
- 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.
높은 계층의 모듈(도메인)이 저수준의 모듈(하부구조)에 직접 의존해서는 안된다는 원칙