객체지향 프로그래밍의 4가지 특징

1. 추상화

- 공통된 특징을 모아서 추출한다.
- 설계(역할)와 구현을 분리한다.
- 인터페이스 등을 이용해서 객체가 가져야 할 핵심적 기능을 규정(설계)
- 인터페이스를 상속받은 클래스에서 구현한다. (구현)
2. 상속
- 기존의 클래스를 재활용하여 새로운 클래스를 만든다.
- 반복적인 코드를 최소화, 오류를 줄여준다.
- 메서드 오버라이딩을 통해 재정의한다.
3. 다형성
- 어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질

4. 캡슐화
- 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하게 은닉
- 접근제어자 (public, private, protected, getter, setter etc.)

출처 : https://incheol-jung.gitbook.io/docs/q-and-a/architecture/undefined-1
객체지향 설계원칙 - SOLID 원칙
SRP (Single Responsibility Principle, 단일 책임의 원칙)
- 하나의 클래스는 하나의 책임만 갖는다.
- 너무 많은 기능을 넣지 않는다.
- 기준이 모호하다는 비판, 각자의 SRP 기준은 다를 수 밖에 ㅇ벗다.
- 변경사항이 있을 때, 애플리케이션의 파급 효과가 적으면 SRP 원칙을 잘 따른 것으로 볼 수 있다.
OCP (Open Closed Principle, 개방폐쇄의 원칙)
- 높은 응집도와 낮은 결합도
- 확장에 대해서는 개방적이고, 수정에 대해서는 폐쇄적
- 유연한 코드 수정, 쉽게 확장할 수 있게 설계
- 객체를 직접 수정하는 것을 제한
LSP (Liskov Substitution Principle, 리스코프 치환 원칙)
- 프로그램의 정확성을 깨지 않으면서 하위 타입의 인스턴스(객체)로 변환
- 하위클래스는 인터페이스의 규약을 잘 지켜야 한다.
- 자식 객체는 부모 객체를 완전히 대체할 수 있어야 한다.
ISP (Interface Segragaion Principle, 인터페이스 분리 원칙)
- 범용 인터페이스 하나보다는, 특정 클라이어트를 위한 여러 개의 인터페이스 분라기 좋다.

출처 : Inpa 티스토리 (inpa.tistory.com)
DIP (Dependencty Inversion Principle, 의존관계 역전 원칙)
객체 '지향' 프로그래밍
절대 법칙이 아니다!