# 추상화란?
시스템에서 중요한 개념만 노출시키고 세부 구현은 감추는 객체지향 기법이다.
실무에서는 서비스, API, 모듈화 시스템에서 많이 사용한다.
특징
일반 메서드 + 추상 메서드 동시 사용 가능
하위 클래스는 추상 메서드 반드시 구현 (강제 구현)
new 연산자 사용 불가
abstract 키워드 사용
예제: 데이터베이스 트랜잭션 처리
public abstract class Authenticator {
// 인증 방식별로 구현
protected abstract boolean validateCredentials(String name, String password);
public void login(String name, String password) {
if(validateCredentials(name, password)) {
System.out.println(name + " 로그인 성공");
} else {
System.out.println(name + " 로그인 실패");
}
}
}
OAuth, JWT, Session 등 방식이 다르더라도 공통 로그인 프로세스는 추상 클래스에 구현
세부 구현은 하위 클래스에서 정의
# Template Method Pattern
알고리즘의 골격을 상위 클래스에서 정의하고
일부 세부 단계는 하위 클래스에서 구현하도록 하는 디자인 패턴
특징
공통 단계는 상위 클래스에서 구현
가변적 단계는 추상 메서드로 선언 → 하위 클래스에서 구현 강제
실행 순서 변경 불가 → final 메소드로 구현 가능
예제: 데이터베이스 트랜잭션 처리

public abstract class DatabaseTransaction {
public final void executeTransaction() {
beginTransaction();
try {
doOperation(); // 세부 구현은 하위 클래스에서
commitTransaction();
} catch (Exception e) {
rollbackTransaction();
e.printStackTrace();
}
endTransaction();
}
private void beginTransaction() {}
private void commitTransaction() {}
private void rollbackTransaction() { System.out.println("Error...."); }
private void endTransaction() {}
protected abstract void doOperation() throws Exception;
}
class OrderTransaction extends DatabaseTransaction {
private boolean isOK = false;
@Override
protected void doOperation() throws Exception {
if (isOK) System.out.println("Operation End");
else throw new Exception("DB Error");
}
}
class Main {
public static void main(String[] args) {
var transaction = new OrderTransaction();
transaction.executeTransaction();
}
}
executeTransaction(): 공통 트랜잭션 단계 정의 (begin, commit, rollback, end)
doOperation(): 하위 클래스에서 DB 작업 구체화
장점: 공통 로직 변경 시, 하위 클래스에 영향 최소화 → 유지보수 용이
| 개념 | 특징 | 예 |
| 추상화 | 중요한 개념만 노출, 세부 구현 감춤 |
Authenticator, validateCredentials() |
| Template Method Pattern | 알고리즘 구조 정의, 일부 구현은 하위 클래스에 위임 |
DatabaseTransaction.executeTransaction() |
| 장점 | 공통 로직 재사용, 세부 구현 자유, 유지보수 용이 |
트랜잭션 처리, 인증, 알림 시스템 등 |
'java' 카테고리의 다른 글
| Lambda Expression(=람다식) (0) | 2025.11.28 |
|---|---|
| Generic Type(=제네릭 타입) (0) | 2025.11.28 |
| Encapsulation(=캡슐화) (0) | 2025.11.28 |
| Java 문법 – Overload vs Override (0) | 2025.11.28 |
| Java 문법 – 변수, 메서드, 다형성, CallByValue/Reference (0) | 2025.11.28 |
