1. 추상화 : 객체의 핵심적인 특성과 동작에 집중하여 복잡한 시스템을 단순화
  2. 캡슐화 : 객체의 속성과 메서드를 묶어 외부로부터 접근을 제어하고, 정보 은닉과 객체의 독립성을 보장
  3. 상속 : 기존 클래스를 기반으로 새로운 클래스를 만들어 기존 기능을 재사용하고 확장
  4. 다형성 : 하나의 이름이 서로 다른 동작을 수행하도록 프로그래밍 개념으로, 메서드 오버로딩과 메서드 오버라이딩을 통해 구현
    1. 오버로딩 : 같은 메서드의 이름을 가진 여러 개의 메서드를 정의
    2. 오버라이딩 : 상위 클래스의 메서드를 하위 클래스에서 재정의