
객체 지향 프로그래밍(OOP)의 특징은 크게 **4가지(캡슐화, 상속, 다형성, 추상화)**로 요약됩니다.
1. 캡슐화 (Encapsulation)
"데이터를 보호하고, 필요한 부분만 밖으로 드러낸다."
- 개념: 서로 연관된 데이터(필드)와 그 데이터를 처리하는 메서드를 하나의 '클래스'라는 캡슐로 묶는 것입니다.
- 핵심 목적: 정보 은닉 (Information Hiding)
- 객체 내부의 데이터는 숨기고(private), 외부에는 허용된 기능(public 메서드)만 제공합니다.
- 예시: TV의 내부 회로(데이터)는 감춰져 있고, 우리는 리모컨 버튼(메서드)만 눌러서 조작합니다. 회로를 직접 건드리면 고장 납니다.
- 장점: 외부에서 잘못된 데이터를 넣는 것을 방지하여 코드의 안정성을 높입니다. (Setter 없이 생성자로 값을 넣는 이유)
2. 상속 (Inheritance)
"부모의 기능을 자식이 물려받아 재사용한다."
- 개념: 기존의 클래스(부모)를 재사용하여 새로운 클래스(자식)를 작성하는 것입니다. (extends 키워드)
- 장점:
- 코드 재사용: 공통된 코드를 부모에만 작성하면 되므로 중복이 줄어듭니다.
- 유지보수: 부모 클래스만 수정하면 자식 클래스들도 자동으로 수정 효과를 봅니다.
- 주의점: 무분별한 상속은 클래스 간의 결합도를 너무 높일 수 있어, 최근에는 상속보다는 **조합(Composition, 다른 객체를 필드로 갖는 것)**을 선호하는 추세입니다.
3. 다형성 (Polymorphism) 🔥 (가장 중요!)
"하나의 객체가 여러 가지 형태를 가질 수 있다."
- 개념: 같은 이름의 메서드를 호출했을 때, 실제 객체에 따라 다른 동작을 수행하는 능력입니다.
- 구현 방법:
- 오버라이딩 (Overriding): 부모의 메서드를 자식이 재정의하는 것.
- 오버로딩 (Overloading): 같은 이름의 메서드를 매개변수만 다르게 여러 개 만드는 것.
- Spring과의 관계: 앞서 질문하신 **'의존성 역전(DIP)'**과 **'의존성 주입(DI)'**이 가능한 이유가 바로 이 다형성 때문입니다.
- 예시: 자동차 인터페이스의 엑셀()을 밟았는데, 실제 차가 소나타면 부드럽게 나가고, 페라리면 빠르게 나가는 것. 운전자는 자동차라는 껍데기만 알면 됩니다.
4. 추상화 (Abstraction)
"불필요한 정보는 숨기고, 중요한 특징만 뽑아낸다."
- 개념: 복잡한 시스템에서 핵심적인 개념이나 기능만 간추려내는 것입니다. (interface, abstract class)
- 예시:
- 지하철 노선도는 실제 지형(구불구불한 길, 건물의 위치 등)은 다 무시하고, '역 이름'과 '연결 선'이라는 핵심만 뽑아내서 보여줍니다. 이것이 추상화입니다.
- 장점: 복잡한 현실 세계를 모델링하여 코드로 옮기기 쉽게 만들어 줍니다.
'개발 공부 > Java-Spring' 카테고리의 다른 글
| 불변의 객체 의 정의 (0) | 2025.12.10 |
|---|---|
| spring ai 해보기 (0) | 2025.12.06 |
| 객체의 종류 (0) | 2025.11.20 |
| 자바 예약어 final vs static (0) | 2025.10.23 |
| interface vs abstract class (0) | 2025.09.26 |