상태와 상태를 변경하는 행위를 하나의 객체로 묶으면, 외부에서 객체의 상태를 임의로 변경하지 못하게 하고 관련 규칙을 객체 내부에서 일관되게 관리할 수 있습니다. 이것이 캡슐화입니다. 또한 추상화와 다형성을 활용하면 사용하는 쪽은 구체적인 구현보다 역할에 의존할 수 있기 때문에, 구현을 교체하거나 기능을 확장할 때 변경 범위를 줄이는 데 도움이 됩니다.

  • 캡슐화(Encapsulation) : 데이터를 외부에서 직접 접근하지 못하게 하고, 메소드를 통해서만 접근하도록 제한하는 개념입니다. 대표적으로 필드를 private으로 선언하고, 검증 로직이 포함된 메서드를 통해 상태를 변경하는 방식이 있습니다.
  • 상속(Inheritance) : 상속은 기존에 작성된 클래스(부모 클래스)의 속성과 기능을 새로운 클래스(자식 클래스)가 물려받아 사용할 수 있도록 하는 기능입니다.
  • 다형성(Polymorphism) : 다형성은 하나의 메소드나 클래스가 다양한 형태로 동작할 수 있게 하는 성질입니다. 같은 이름의 메소드가 상황에 따라 다르게 실행되도록 하는 것으로, 대표적으로 오버라이딩(상속받은 메소드를 재정의)과 오버로딩(같은 이름의 메소드를 매개변수에 따라 여러 개 정의)이 있습니다.
  • 추상화(Abstraction) : 추상화는 복잡한 시스템에서 중요한 정보만 추출하여 단순화하는 개념입니다. 대표적으로 인터페이스와 추상 클래스를 이용해 공통된 역할이나 동작을 정의하는 방식이 있습니다.