본문 바로가기

카테고리 없음

자바 추상 클래스의 사용법과 예제를 통해 이해하기 쉽게 설명해주세요.

1. 추상 클래스란?

추상 클래스는 일반 클래스와는 다르게 인스턴스화될 수 없는 클래스입니다. 즉, 추상 클래스는 추상 메서드를 포함할 수 있는데, 추상 메서드는 구현이 되지 않은 메서드로 자식 클래스에서 반드시 구현되어야 합니다. 추상 클래스는 자식 클래스들의 공통적인 구조와 행위를 정의하여 상속을 통해 구체적인 클래스들을 만드는 용도로 사용됩니다. 추상 클래스는 abstract 키워드로 선언되며, 객체를 생성할 수 없는 추상 메서드를 포함할 수 있습니다. 자바에서 추상 클래스는 다른 클래스들에 의해 확장(상속)되어 사용되는데, 추상 클래스는 상속을 강제화하고 공통적인 구조를 제공하는 역할을 합니다.

2. 추상 클래스의 사용법

추상 클래스는 다음과 같은 사용법을 가지고 있습니다:

  1. 추상 클래스를 선언하기 위해 abstract 키워드를 사용합니다. 예를 들어, abstract class Animal { ... }와 같이 추상 클래스를 선언할 수 있습니다.
  2. 추상 클래스는 추상 메서드를 포함할 수 있으며, 이는 abstract 키워드를 사용하여 선언합니다. 추상 메서드는 구현 내용이 없고 자식 클래스에서 반드시 구현되어야 합니다. 예를 들어, abstract void sound();와 같이 추상 메서드를 선언할 수 있습니다.
  3. 추상 클래스는 일반 메서드와 멤버 변수를 포함할 수도 있습니다. 이는 일반적인 클래스와 동일한 방식으로 선언하면 됩니다.
  4. 추상 클래스는 인스턴스화할 수 없기 때문에, 이를 상속받아서 사용됩니다. 자식 클래스는 추상 메서드를 구현해야 하며, 이를 위해서는 extends 키워드를 사용하여 추상 클래스를 상속받아야 합니다. 예를 들어, class Dog extends Animal { ... }와 같이 추상 클래스를 상속하는 클래스를 선언할 수 있습니다.

추상 클래스를 사용함으로써, 공통적인 구조와 행위를 정의하여 코드의 재사용성과 유지보수성을 높일 수 있습니다.

3. 추상 클래스 예제 및 설명

다음은 추상 클래스의 예제와 설명입니다:

abstract class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public abstract void sound();
}

class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    public void sound() {
        System.out.println("멍멍!");
    }
}

class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    public void sound() {
        System.out.println("야옹~");
    }
}

위의 예제는 추상 클래스인 Animal과 그를 상속받는 자식 클래스인 DogCat을 보여줍니다. Animal 클래스는 추상 메서드인 sound()를 선언하고, 일반 메서드인 getName()을 포함하고 있습니다. DogCat 클래스는 Animal 클래스를 상속받아 sound() 메서드를 구현하고 있습니다.

위의 예제를 보면, 추상 클래스인 Animal을 인스턴스화할 수 없음을 알 수 있습니다. 하지만 Animal 클래스를 상속받은 DogCat 클래스를 통해 객체를 생성할 수 있습니다. 이렇게 생성된 객체들은 각각 name 멤버 변수와 sound() 메서드를 가지고 있으며, sound() 메서드에서는 각각 "멍멍!"과 "야옹~"을 출력합니다.

이처럼 추상 클래스는 공통적인 구조를 정의하고, 자식 클래스에서 해당 추상 메서드를 구현하도록 강제화하는 역할을 합니다. 자식 클래스들은 추상 메서드를 반드시 구현해야 하기 때문에, 해당 클래스들은 부모 추상 클래스의 특징과 기능을 공유하면서도 각각의 특성을 가질 수 있습니다.