웹개발/JAVA

추상화(Abstract)-abstract class

bergerac 2025. 2. 27. 09:11

1. 추상화란?

추상화(Abstract)는 객체 지향 프로그래밍(OOP)에서 핵심 개념 중 하나로, 프로그램의 구조를 단순화하고 필수적인 요소만을 남기는 과정입니다. 이를 통해 코드의 재사용성을 높이고 유지보수를 쉽게 할 수 있습니다.

Java에서는 추상 클래스(Abstract Class)와 인터페이스(Interface)를 통해 추상화를 구현할 수 있습니다. 이 글에서는 추상 클래스에 대해 집중적으로 다뤄 보고, 다음 글에서 인터페이스에 대해서 다뤄 보겠습니다.

 

2. 추상 클래스(Abstract Class)

(1) 추상 클래스란?

추상 클래스는 **미완성된 클래스(설계도)**로서, 자체적으로 인스턴스를 생성할 수 없습니다. 반드시 자식 클래스가 상속받아 구현해야만 사용할 수 있습니다.

(2) 추상 클래스의 특징

  • abstract 키워드를 사용하여 선언합니다.
abstract class 추상클래스명{
    abstract void 추상메서드명();
 }

abstract class Human{
    abstract void work();
}
  • 객체를 직접 생성할 수 없습니다.(추상 클래스로는  인스턴스화 할 수 없습니다.)
abstract class Animal {
    // 추상 메서드
    abstract void makeSound();

    // 일반 메서드
    void eat() {
        System.out.println("동물은 먹이를 먹습니다.");
    }
}

 

public class A_Abstract {
    public static void main(String[] args) {

         Animal animal = new Animal();//오류코드
  • 자식 클래스가 공통된 기능을 공유하면서, 특정 기능을 반드시 구현하도록 강제할 수 있습니다.
abstract class Human{
    abstract void work();
}

class Police extends Human{
    @Override
    void work() {
        System.out.println("경찰은 치안유지 업무를 담당합니다");
    }
}

위와 같이 work(); 메서드를 반드시 구현하도록 강제할 수 있습니다.

만약 구현하지 않는다면 컴파일 에러가 다음과 같이 발생하게 됩니다.

abstract class Animal {
    // 추상 메서드를 정의해야 하지만 누락된 경우
    abstract void makeSound();
}

// Animal을 상속하는 클래스
class Dog extends Animal {
    // 추상 메서드를 구현하지 않음 -> 컴파일 오류 발생
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // 컴파일 오류 발생!
        myDog.makeSound();
    }
}

 

  • Java에서는 다중 상속이 불가능하며, 하나의 extends만 사용할 수 있습니다.
abstract class Lion {
    abstract void mane(); // 갈기
}

abstract class Tiger {
    abstract void stripe(); // 줄무늬
}

class Liger extends Lion extends Tiger { //- 다중 상속 불가!
    void mane() {
    }
    void stripe() {
    }
}

class Liger extends Lion extends Tiger이라는 문구에서 다중상속이 불가능하기 때문에 error message가 뜨게 됩니다.

 

 

3. 추상 메서드(Abstract Method)

추상 메서드는 메서드 선언부만 존재하고 구현부가 없는 메서드입니다. 자식 클래스에서 해당 메서드를 반드시 구현해야 합니다.

일반 메서드와의 차이

  • 추상 메서드: 반드시 자식 클래스에서 오버라이딩(Overriding)해야 합니다.
  • 일반 메서드: 필요에 따라 자식 클래스에서 오버라이딩할 수도 있고, 그대로 사용할 수도 있습니다.

4. 추상 클래스와 일반 클래스의 차이

추상 클래스(Abstract Class)[좌변]    /  일반 클래스(Class) [우변]

객체 생성 직접 생성 불가능 직접 생성 가능
메서드 일반 메서드 + 추상 메서드 포함 가능 일반 메서드만 포함
사용 목적 공통 기능 제공 + 특정 기능 구현 강제 독립적인 기능 구현

 

 

5. 추상 클래스 vs 인터페이스

추상 클래스와 인터페이스는 모두 추상화를 위한 개념이지만, 중요한 차이가 있습니다.

비교 항목 추상 클래스(Abstract Class) 인터페이스(Interface)
키워드 abstract interface
메서드 일반 메서드 + 추상 메서드 포함 가능 기본적으로 모든 메서드는 추상 메서드 (Java 8부터는 default/static 메서드 가능)
다중 상속 단일 상속만 가능 (extends) 다중 구현 가능 (implements)
사용 목적 공통된 기능을 일부 구현하면서 추가 구현 강제 완전한 추상화를 제공 (구현 강제)

 

다음 글에서 인터페이스에 대해 자세히 다뤄보도록 하겠습니다!!

'웹개발 > JAVA' 카테고리의 다른 글

API - Java.lang Package  (2) 2025.03.01
추상화(Abstract) - Interface  (0) 2025.02.28
클래스 형(ClassType)변환  (0) 2025.02.26
Collection- Map Interface  (0) 2025.02.25
Collection - Set Interface  (1) 2025.02.24