오늘도 난 존버한다

01 추상 클래스(Abstract Class)와 구상 클래스(Concrete Class) 본문

Java

01 추상 클래스(Abstract Class)와 구상 클래스(Concrete Class)

lunina 2024. 12. 17. 05:01

추상 말 그대로 추상적이다

구상은 말 그대로 구상하다

abstract class Animal { // 추상 클래스
    String name;

    // 일반 메서드
    void eat() {
        System.out.println(name + " is eating.");
    }

    // 추상 메서드
    abstract void sound();
}

class Dog extends Animal { // 구상 클래스
    @Override
    void sound() {
        System.out.println("Bark! Bark!");
    }
}

class Cat extends Animal { // 구상 클래스
    @Override
    void sound() {
        System.out.println("Meow! Meow!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Animal animal = new Animal(); // 에러: 추상 클래스는 객체 생성 불가
        Animal dog = new Dog();
        dog.name = "Buddy";
        dog.eat();    // 추상 클래스의 일반 메서드 호출
        dog.sound();  // 하위 클래스에서 구현한 메서드 호출
    }
}

 

그래서 

Class Abstract  Concrete 
목적 상속을 통해 설계도 역할 수행 완전히 구현된 클래스
메서드 구현 여부 구현된 메서드 + 추상 메서드 포함 가능 모든 메서드 구현 필수
객체 생성 불가능 (상속 후 사용) 가능 (독립적으로 사용 가능)
상속 여부 다른 클래스에 의해 상속되어 사용됨 필요에 따라 상속 가능
사용 목적 공통 동작 정의 및 자식 클래스에서 구현 강제 실제 동작을 구현하여 객체로 사용

 

 

추상 클래스구상 클래스는 상속 관계를 기반으로 하며, 추상 클래스는 일반적으로 superclass 의 역할을 하고, subclass는 자식 클래스로 동작합니다. 즉, 상속을 통해 서로 연결됩니다.

  1. Abstract class → superclass 
    • 추상 클래스는 구체적인 객체를 생성하지 않고, 공통적인 특성과 동작을 정의합니다.
    • 설계도 역할을 하며, 상속받은 자식 클래스가 이를 확장하거나 구체적인 동작을 구현합니다.
  2. Concrete class  → subclass
    • 구상 클래스는 추상 클래스를 상속받아 필요한 모든 동작(추상 메서드의 구현)을 완성합니다.
    • 구상 클래스는 실제 객체를 생성할 수 있습니다.
// 추상 클래스 (부모 클래스, 설계도 역할)
abstract class Animal {
    String name;

    void eat() { // 공통 동작
        System.out.println(name + " is eating.");
    }

    abstract void sound(); // 추상 메서드: 구체적 구현은 자식 클래스에 맡김
}

// 구상 클래스 1 (자식 클래스)
class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Bark! Bark!");
    }
}

// 구상 클래스 2 (자식 클래스)
class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("Meow! Meow!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Animal animal = new Animal(); // 에러: 추상 클래스는 객체 생성 불가

        // 구상 클래스의 객체 생성
        Animal dog = new Dog();
        dog.name = "Buddy";
        dog.eat();    // 부모 클래스의 공통 메서드 사용
        dog.sound();  // 자식 클래스에서 구현된 메서드 호출

        Animal cat = new Cat();
        cat.name = "Kitty";
        cat.eat();
        cat.sound();
    }
}
Buddy is eating.
Bark! Bark!
Kitty is eating.
Meow! Meow!

'Java' 카테고리의 다른 글

06 Void?  (0) 2024.12.30
05 캡슐화란?  (0) 2024.12.29
04 Interface 인터페이스 vs Inheritance 상속  (0) 2024.12.18
03 인스턴스화하다? Instance  (2) 2024.12.17
02 추상 클래스에서 abstract 생략 가능?  (0) 2024.12.17