1. 추상화란?
추상화는 객체들의 공통적인 특징만 뽑아내는 것이다. 구현의 세부 내용보다는, 공통된 역할과 책임에 집중한다. 즉, 어떻게 동작하는지는 감추고, 무엇을 할 수 있는지만 드러낸다.
추상화는 객체 지향 설계에서 구조를 단순화하고, 확장을 가능하게 만드는 출발점이다.
2. abstract 키워드
abstract는 미완성 상태를 표현하는 키워드이다. 클래스, 메서드에 사용 가능하다.
abstract 메서드
- 구현부({})가 없다
- 하위 클래스에서 반드시 구현해야 한다
abstract class Animal {
abstract void sound();
}
abstract 클래스
추상클래스는 0개 이상의 추상 메서드를 포함할 수 있는 클래스이다.
- abstract 키워드
- 객체 생성 불가
- 추상 메서드 + 일반 메서드 모두 가질 수 있다
- 단일 상속만 가능하다
abstract class Animal {
abstract void sound();
void sleep(){
System.out.println("쿨쿨~");
}
}
추상 클래스는 공통 동작은 미리 구현해두고, 변하는 부분만 하위 클래스에 맡길 때 사용한다.
3. 추상 클래스의 상속
추상 클래스를 상속받는 클래스는 모든 추상 메서드를 구현해야 한다. 만약 하나라도 구현하지 않으면 하위 클래스 역시 추상 클래스가 된다.
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
4. final 키워드
final은 변경과 확장을 막는 키워드이다.
final 변수
final int x = 10;
x = 20; // 컴파일 오류
final int[] arr = {1, 2, 3};
arr[0] = 100; // 가능
arr = new int[]{4, 5}; // 불가능
final 필드는 반드시 한 번만 초기화되어야 한다.
- 선언과 동시에 초기화
- 생성자에서 초기화
final 멤서드
오버라이딩이 불가능한 메서드이다.
class Parent {
final void hello() {
System.out.println("hello");
}
}
class Child extends Parent {
// void hello() {} // 컴파일 오류
}
- 핵심 로직 보호
- 하위 클래스의 잘못된 오버라이딩 방지
- 템플릿 메서드 패턴에서 자주 사용함
확장 허용하되, 변경은 허용하지 않을 때 사용함
final 클래스
상속이 불가능한 클래스이다. 대표적으로 String 클래스가 있다.
final class Example{
}
- 설계 의도 고정
- 보안성 강화
- 동작 변경 방지
5. 추상화 관점에서의 final
추상화는 확장 포인트를 명확히 하는 것이고, final은 확장을 차단하는 도구이다. 두 키워드를 같이 쓰는 경우는 불가능하다.
abstract final class Test { } // 컴파일 오류
하지만 함께 쓰이는 경우도 있다
- 추상 클래스 안의 final 메서드
abstract class Game {
final void start() {
init();
play();
}
abstract void init();
abstract void play();
}
👉 뼈대는 고정 + 세부 구현만 위임
👉 추상화 + final의 대표적인 활용 패턴
6. 정리
- 추상화는 공통된 역할과 책임을 뽑아내는 개념이다
- abstract는 미완성 상태를 표현한다
- 추상 클래스는 객체 생성이 불가능하다
- 추상 클래스는 공통 구현 + 강제 구현을 함께 제공한다
- final은 확장, 변경을 제한한다
- abstract과 final은 함께 사용할 수 없다
'Java & Spring > Java' 카테고리의 다른 글
| Enum의 개념과 사용 (0) | 2026.01.07 |
|---|---|
| 내부 클래스(Inner Class) (0) | 2026.01.07 |
| SOLID 원칙 (0) | 2026.01.06 |
| 다형성 (Polymorphism) (0) | 2026.01.06 |
| 캡슐화와 접근 제어자 (0) | 2026.01.06 |