“추상화”라는 단어는 어렵게 들리지만, 사실 우리가 매일 쓰는 객체지향의 핵심 개념 중 하나입니다.
자바에서 추상화는 복잡한 세부사항을 숨기고 필요한 정보만 노출하는 것을 의미합니다.
이번 글에서는 데이터 추상화와 제어 추상화의 차이, 그리고 자바에서 이들이 어떻게 구현되는지를 살펴보겠습니다.
추상화란 무엇인가?
- 복잡한 현실 세계를 단순화해서 모델링하는 과정
- “무엇을 한다”와 “어떻게 한다”를 분리하는 것
- 자바에서는 클래스, 인터페이스, 접근제어자를 통해 표현됨
abstract class Animal {
abstract void makeSound();
}
데이터 추상화 (Data Abstraction)
데이터의 내부 구조를 숨기고, 필요한 정보만 외부에 노출하는 방식
- 주로 캡슐화(encapsulation) 와 함께 사용됨
- private 필드와 getter/setter 메서드로 구현
class User {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
👉 외부는 내부 필드를 직접 조작할 수 없고,
getName() / setName()을 통해서만 접근 가능 → 데이터 추상화 실현
제어 추상화 (Control Abstraction)
“무엇을 해야 하는가”만 정의하고, “어떻게 할 것인가”는 숨기는 것
- 주로 추상 클래스나 인터페이스로 구현됨
- 공통된 동작을 정의하되, 실제 구현은 하위 클래스가 담당
interface Vehicle {
void move();
}
class Car implements Vehicle {
public void move() {
System.out.println("도로를 달립니다.");
}
}
class Airplane implements Vehicle {
public void move() {
System.out.println("하늘을 납니다!");
}
}
데이터 추상화 vs 제어 추상화 정리표
구분 초점 자바 구현 예시 설명
| 데이터 추상화 | 데이터 구조 숨김 | 클래스, 접근제한자 | 필드 접근 제한 및 메서드 제공 |
| 제어 추상화 | 동작의 방식 숨김 | 추상 클래스, 인터페이스 | 메서드 정의만, 구현은 하위 클래스에서 |
마무리
추상화는 결국 “복잡함을 줄이고 명확함을 높이는 기술”이다.
데이터 추상화로 객체의 내부를 감추고, 제어 추상화로 동작의 공통점을 정의함으로써
우리는 유연하고 확장 가능한 코드를 만들 수 있다!
'Java' 카테고리의 다른 글
| [Java] 문자열 처리 성능비교 - String vs StringBuilder vs StringBuffer (0) | 2025.10.11 |
|---|---|
| [Java] 자바의 추상 클래스 vs 인터페이스 완전 정복 (0) | 2025.10.09 |
| [Java] 객체지향개념I (0) | 2025.10.08 |
| [Java] 클래스 메소드(static 메소드) vs 인스턴스 메소드 (0) | 2025.10.03 |
| [Java] 기본형 매개변수와 참조형 매개변수 (0) | 2025.10.03 |