OOP는 프로그램 설계 철학입니다.
OOP의 모든 것은 "객체"로 그룹화됩니다.
OOP의 4가지 주요 개념을 통해 재사용성을 얻을 수 있습니다.
객체 내에는 "데이터와 기능이 함께 있다"라는 원칙에 따라 메서드와 속성이 존재합니다. 예를 한번 들어보겠습니다. 모든 자동차는 공통적인 기능과 고유의 속성이 있습니다. 속도를 낸다든지, 주유를 한다든지 등의 기능이 존재하며, 속성으로는 색상, 최고 속력 혹은 탑승인원 등과 같은 고유의 데이터가 존재하죠.
Encapsulation (캡슐화)
Inheritance (상속)
Abstraction (추상화)
Polymorphism (다형성)
캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있습니다.
클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라고 부릅니다. 이것이 추상화의 본질입니다.
다형성은 상속과 밀접한 관계가 있다. 자식에게 상속한 메서드의 리턴값을 바꾸고 싶다면, 우리는 메서드 오버라이딩을 통해서 상속한 메서드의 리턴값을 바꿀 수 있다. 하지만 그 리턴한 값의 타입은 오리지널 메서드의 리턴 타입과 동일해야 한다.
만일 언어 자체에서 다형성을 제공하지 않는다면, 기본(부모) 클래스에 종류별로 분기를 시켜서 하나하나 다르게 만들어야 할 것입니다.
똑같은 메서드라 하더라도, 다른 방식으로 구현 될 수 있다. (다양한 형태로 나타난다.)