스파르타코딩클럽 내일배움캠프 Node.js 심화주차 강의를 들으며 공부한 것을 적은 것입니다.
객체 지향 프로그래밍
- 프로그램의 처리단위가 객체인 프로그래밍 방법
- 현실 세계를 모델링 하는 패러다임
- 데이터와 프로세스가 동일한 모듈 내부에 위치하도록 프로그래밍 하는 방식
왜 사용해야할까?
- 문제 상황을 빠르게 인지하고 코드 수정에 용이
- 개발에 사용하는 시간을 최대한으로 줄이는 것이 목표
- 분산된 모든 코드를 수정해야 하는 것이 아닌, 해당 로직을 수행하는 코드만 수정
장점
- 의존성을 효율적으로 통제
- 요구사항 변경에 좀 더 수월하게 대응
- 데이터를 중심으로 프로그래밍을 하면 일관성을 유지하기 좋다
설계
- 요구하는 기능을 온전히 수행하면서 변경을 매끄럽게 수용할 수 있는 설계
- 이해하기 쉬운 코드 -> 가독성이 좋은 코드
- 하나의 클래스만 변경할 수 있는 설계
- 캡슐화를 이용해 의존성을 적절히 관리 -> 결합도를 낮춤
SOLID (객체 지향 설계 5원칙)
1. 단일 책임의 원칙 (SRP)
- 하나의 객체는 단 하나의 책임
클래스나 모듈을 변경할 이유가 단 하나 뿐이어야 한다
- 프로그래머가 가장 무시하는 규칙
일반적인 프로그래머는 "동작하기만 하는 소프트웨어"에 초점을 맞추기 때문
2. 개방-폐쇄 원칙 (OCP)
- 엔티티 또는 개체는 확장에는 열려 있으나 변경에는 닫혀 있어야한다
- 기존 코드에 영향을 주지않고 새로운 기능이나 구성 요소를 추가할 수 있어야 한다는 것
3. 리스코프 치환 원칙 (LSP)
- 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다
- 부모 클래스와 자식 클래스가 있는 경우 서로를 바꾸더라도 잘못된 결과를 도출하지 않는 것
4. 인터페이스 분리 원칙 (ISP)
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다
- 최대한 인터페이스를 작게 유지하여야 한다
5. 의존성 역전 원칙 (DIP)
- 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다
- 높은 계층의 모듈이 저수준의 모듈에 의존해서는 안된다