JAVA의 추상화 철학 : 복잡함 속의 단순함을 향하여

2025. 5. 14. 17:50JAVA/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