OOP 4대 특성
추상화
- 객체들의 공통적인 특징(속성, 기능을) 묶어 표현하는 것
- 현실 세계의 복잡성을 단순화하여 객체를 바라볼 수 있게 한다.
캡슐화
- 관련있는 속성과 기능을 하나로 묶는 것, 외부에서 반드시 접근해야만 하는 행위를 인터페이스를 통해 노출 시킨다.(정보은닉)
- 속성을 스스로 관리할 수 있도록 함으로써 자율적인 객체를 만들 수 있게 된다.
- 완전한 자율적인 객체는 내부의 변경이 외부에 영향을 끼치지 않는다.
캡슐화의 잘못된 예
남은 연료와 연료통의 용량을 Car가 직접 계산하여 주행가능 여부를 판단
연료가 고체 연료가 바뀐다고 가정을 하면?
- 연료 뿐만아니라 Car도 바꿔야한다. → 변경점이 늘어나 유지보수가 어렵다!

캡슐화의 올바른 예
- 연료의 내부 구현을 감추고 효율값을 넘겨주며 충분한지 물어보고 있음
연료가 고체 연료로 바뀌었을 때를 가정해보면…
핵심 로직에는 변화가 없다..!

Fuel을 isEnough() 추상메서드를 포함하는 추상클래스 또는 인터페이스로 사용하면 더욱 더 좋을 듯 합니다...!
상속
- 슈퍼 타입의 특징을 서브 타입이 물려받는 것
- 비용, 시간 절감
- 서브 타이핑
- 서브 클래스가 슈퍼 클래스를 대체할 수 있는 경우
- 설계의 유연성이 주 목적
- 인터페이스 상속이라고도 함
- 서브 클래싱
- 서브 클래스가 슈퍼 클래스를 대체할 수 없는 경우
- 중복제거, 재 사용성이 주 목적
- 구현 상속이라고도 함
다형성
- 같은 메시지에 서로 다른 응답을 할 수 있는 특성
- 오버로딩
- 함수이름, 반환형이 같지만 매개 변수가 다른 경우

- 오버라이딩
- 슈퍼 클래스의 메서드를 하위 클래스에서 재정의하여 사용
