본문 바로가기

JAVA/추상화(Abstraction)

추상 클래스

0개 이상의 추상 메서드(메서드의 바디가 없는 메서드)를 포함하거나 객체 생성을 제한하기 위해 선언된 클래스임

abstract 키워드를 사용하여 정의하며, 직접 객체를 생성할 수 없다

 

  1. 추상 메서드를 0개 이상 포함할 수 있다
  2. 직접 인스턴스를 생성할 수 없다
  3. 완성된 메서드(일반 메서드)도 함께 포함할 수 있다
  4. 상속을 통해 하위 클래스에서 추상 메서드를 오버라이딩하여 완성해야 사용할 수 있다
abstract class AbstractExample {
	abstract void method(); // 추상 메서드
    public void method2() {
    	System.out.println("완성된 메서드 또한 정의할 수 있다");
    }
}

 


추상 메서드의 사용 목적

1. 상속 구조에서 유연한 설계를 위해서 사용함

추상 클래스는 상속 구조에서 공통적인 속성과 기능을 미리 정의하고, 각 하위 클래스가 구체적인 구현을 담당하도록 하는 데 유리하다. 이렇게 하면 변경에 유연하게 대응할 수 있고 코드의 중복도 줄일 수 있다

 

 

2. 공통적인 기능을 강제하기 위한 설계 도구

추상 클래스에서 선언된 추상 메서드는 하위 클래스에서 반드시 구현해야하므로, 공통된 동작을 하위 클래스에 강제할 수 있다

 

 

3. 동물 소리 내기 예

// 추상 클래스
abstract class Animal {  
	public String kind;
    public abstract void sound(); // 추상 메서드
}

// 일반 클래스
class Dog extends Animal { // 추상 클래스를 상속함
	public Dog() {
    	this.kind = "포유류";
    }
    
    public void sound() { // 추상 메서드 구현
    	System.out.println("멍멍");
    }
}

class Cat extends Animal {
	public Cat() {
    	this.kind = "포유류";
    }
    
    public void sound() { // 상속했기 때문에 반드시 구현해줘야한다
    	System.out.println("야옹");
    }
}

class Example {
	public static void main(String[] args) {
    	Animal dog = new Dog();
        dog.sound(); // 멍멍
        
        Cat cat = new Cat();
        cat.sound(); // 야옹
    }
}

 

* Animal 클래스는 추상 클래스이며, sound()는 추상 메서드이다

* Dog와 Cat 클래스는 Animal을 상속받아 각각 sound() 메서드를 오버라이딩함

* 추상 클래스를 직접 인스턴스화 할 수는 없지만, 하위 클래스에서 구현 후에는 인스턴스 생성이 가능함


추상 클래스 vs 일반 클래스

항목 추상 클래스 일반 클래스
인스턴스 생성 불가 가능
추상 메서드 포함 여부 가능 불가
상속 여부 상속이 전제됨 상속을 선택할 수 있음
용도 공통 구조 설계 구체 기능 구현

 


추상화와 추상 클래스

  1. 공통 속성과 기능을 상위 클래스로 정의하고,
  2. 상황에 따라 다른 동작을 하위 클래스에 위임함으로
  3. 유지보수와 확장에 유리한 구조를 만들 수 있다

정리

  1. 추상 클래스는 미완성 설계도로, 0개 이상의 추상 메서드를 포함하거나 객체 생성을 막기 위해 사용된다
  2. 추상 클래스는 직접 인스턴스를 만들 수 없고, 상속을 통해 하위 클래스가 구현을 완성해야만 객체 생성이 가능함
  3. 추상 클래스는 상속과 추상화 구조를 동시에 설계할 수 있는 강력한 도구이다. 유연성과 재사용성을 높인다.

'JAVA > 추상화(Abstraction)' 카테고리의 다른 글

추상 클래스와 인터페이스, 선택 기준과 활용 전략에 대해  (0) 2026.04.21
인터페이스(interface)  (0) 2026.04.21
final 키워드  (0) 2026.04.21
abstract 제어자  (0) 2026.04.20
추상화(Abstraction)  (0) 2026.04.20