JAVA의 추상화 철학 : 복잡함 속의 단순함을 향하여
2025. 5. 14. 17:50ㆍJAVA/JAVA 설계 철학
🌐 Java의 추상화(Abstraction)
🤔 추상화란?
추상화(Abstraction)는 소프트웨어 공학의 핵심 원칭 중 하나로, 복잡한 현실 세계를 산순화하여 본질적인 부분만을 모델링하는 기법이다. 즉, "필요한 것만 보여주고, 나머지는 감춘다"는 철학이다.
추상화의 목적
- 복잡한 시스템을 단순하게 표현
- 사용자와 구현의 분리
- 유지보수성과 재사용성 향상
💻 Java에서의 추상화 구현 수단
1️⃣ 직접적인 추상화 수단
| abstract class | 공통 기능 + 부분 추상화 구현 가능 |
| interface | 구현 없이 규약만 정의, 다중 구현 가능 |
→ 이 두 가지는 문법적으로 추상화를 명시적으로 지원하는 Java의 핵심 수단이다.
2️⃣ 간접적인 추상화 수단 및 설계 기법
⌨️ 상속(Inheritance)
- 상속은 추상화된 개념(상위 클래스 또는 인터페이스)을 구체적인 구현으로 확장하는 수단
즉, 상속은 추상 개념을 구체화(구현)하는 수단이다. - 공통 기능은 부모 클래스에 두고, 자식 클래스가 이를 확장하거나 오버라이딩한다.
⌨️ 다형성(Polymorphism)
- 추상화된 타입(예 : 인터페이스나 부모 클래스)으로 실제 구현체를 다룰 수 있음
- 핵심 아이디어 : "구체적인 것이 아닌, 추상적인 것에 의존"
List<String> list = new ArrayList<>();
⌨️ 의존성 주입(Dependency Injection)
- 추상 인터페이스에 의존하고, 구체 클래스는 외부에서 주입받음
- Spring 같은 프레임워크에서 DI가 활발히 쓰임
⌨️ 설계 원칙과 패턴(추상화 기반 설계)
- SOLID 원칙 중 특히 아래 두가지는 추상화와 밀접하다 :
▶ DIP(Dependency Inversion Principle) : "상위 모듈은 하위 모듈에 의존하지 않고, 추상화에 의존해야 한다."
▶ LSP(Liskov Substitution Principle) : "서브타입은 언제나 상위 타입(부모클래스, 인터페이스)으로 대체 가능해야 한다." - 디자인 패턴 :
▶ Strategy Pattern, Template Method Pattern, Factory Pattern 등은 모두 추상화를 핵심 개념으로 삼음.
👓 일상 속 비유로 이해하는 "추상화"
🚗 운전 : "운전자는 가속페달만 누른다"
- 운전할 때 운전자는 엔진 작동 방식이나 기어의 구조를 몰라도 된다.
- 운전자가 다루는 건 핸들, 페달, 기어 등 최소한의 조작 수단
- 내부 구현은 자동차 제조사마다 달라도 상관없다.
public interface Drivable {
void accelerate();
void brake();
}
"페달을 누르면 앞으로 간다"는 약속된 인터페이스만 알면 된다.
→ 추상화는 기능을 표준화하고 구현을 감춘다.
☕ 카페 주문 : "커피를 시키지만, 만드는 법은 모른다"
- 카페에서 "아메리카노 주세요" 라고 말하면,
손님은 커피 제조법을 몰라도 결과를 기대할 수 있다. - 바리스타는 내부적으로 머신을 다루고 물 조절을 하지만, 손님은 그 과정에 관여하지 않는다.
interface CoffeeOrder {
Coffee make();
}
메뉴판이 바로 인터페이스이고,
커피 머신과 바리스타는 구현 클래스다.
🧭 정리 : Java 추상화의 핵심 메시지
| 키워드 | 설명 |
| 단순화 | 복잡한 것을 감추고 본질만 노출 |
| 계약(Contract) | 동작을 명세하고 구현은 유연하게 |
| 유지보수 | 변경에 유연한 코드 구조 |
| 테스트 용이성 | 의존성 대체 가능성 확보 |
Java의 추상화 철학은 결국 "사람 중심의 코드",
즉 이해하기 쉽고, 쓰기 편하며, 바꾸기 쉬운 코드를 위한 밑바탕이다.
'JAVA > JAVA 설계 철학' 카테고리의 다른 글
| POJO(Plain Old Java Object) (0) | 2025.05.14 |
|---|