1. 추상화 (Abstraction)
- 추상화는 복잡한 시스템에서 필요한 정보만 표현하고, 불필요한 세부 사항은 숨기는 것입니다.
- 예를 들어, 자동차 클래스에서는 자동차가 움직이는 방식과 같은 기능만 정의하고, 엔진의 내부 작동 원리와 같은 세부 사항은 숨기는 것이 추상화입니다.
- 장점: 시스템의 복잡성을 줄이고, 필요한 핵심적인 정보에만 집중할 수 있습니다.
2. 캡슐화 (Encapsulation)
- 캡슐화는 객체의 속성과 메서드를 하나로 묶고, 외부에서 접근할 수 없도록 보호하는 것입니다.
- 이를 통해 객체의 내부 구현을 감추고, 외부에서는 필요한 인터페이스만을 제공합니다.
- 예를 들어, 클래스의 필드를 private로 선언하고, 접근을 위해 getter와 setter 메서드를 제공하는 방식이 있습니다.
- 장점: 데이터를 외부에서 잘못 수정하지 못하게 하고, 객체의 무결성을 보장할 수 있습니다.
3. 상속 (Inheritance)
- 상속은 기존 클래스(부모 클래스)의 속성과 메서드를 자식 클래스가 물려받아 사용할 수 있도록 하는 것입니다.
- 상속을 통해 기존 클래스의 기능을 확장하거나 변경하여 재사용성을 높이고, 중복 코드를 줄일 수 있습니다.
- 예를 들어, Animal 클래스를 상속받아 Dog와 Cat 클래스에서 공통된 속성과 메서드를 사용할 수 있습니다.
- 장점: 코드 재사용성을 높여 유지보수를 용이하게 합니다.
4. 다형성 (Polymorphism)
- 다형성은 동일한 인터페이스를 통해 서로 다른 구현을 사용할 수 있도록 하는 것입니다. 즉, 하나의 메서드가 다양한 방식으로 동작할 수 있게 합니다.
- 다형성은 주로 **오버로딩(메서드 오버로딩)**과 **오버라이딩(메서드 오버라이딩)**을 통해 구현됩니다.
- 예를 들어, Animal 클래스의 speak() 메서드를 Dog와 Cat 클래스에서 각각 오버라이딩하여 다른 동작을 하게 할 수 있습니다.
- 장점: 유연한 코드 작성이 가능하며, 코드의 확장성을 높입니다.