Java & Spring/Java

추상화

승주우에요 2026. 1. 7. 08:57

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