

1) 캡슐화(Encapsulation)
코드를 복잡하지 않게 만들고, 재사용성을 높인다.
-데이터의 기능을 하나로 묶는것
-은닉: 구현은 숨기고, 동작은 노출시킴
-느슨한 결합에 유리: 언제든 구현을 수정할 수 있음
2) 추상화(Abstration)
코드를 복잡하지 않게 만들고, 단순화된 사용으로 인해 변화에 대한 영향을 최소화 한다.
내부구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념인터페이스가 단순해지고, 너무 많은 기능들이 노출되지않아 예기치 못한 사용상의 변화가 일어나지 않도록 만들 수 있다.
3) 상속(Inheritance)
불필요한 코드를 줄여 재사용성을 높인다.부모클래스의 특징을 자식클래스가 물려받는것이다.
"기본클래스(base class)의 특징을 파생클래스(derive class)가 상속받는다"
4) 다형성(Polymorphism)
동일한 메소드에 대해 if / else if 와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해진다.
다양한 형태를 가질 수 있다.