회원가입

추상 클래스 - 2

Beany 2024-10-31

ChatGPT 요약

추상 클래스는 모든 메서드가 추상 메서드인 클래스를 말한다. 모든 메서드가 추상 메서드인 순수 추상 클래스는 실행 로직을 가지지 않고 다형성을 위한 부모 역할을 한다. 순수 추상 클래스는 인스턴스를 생성할 수 없으며, 상속 받는 클래스는 모든 메서드를 오버라이딩해야 한다. 상속하는 클래스는 부모의 규격에 맞춰 구현해야 하며, 이는 인터페이스와 유사한 역할을 한다. 프로그래밍에서 자주 사용되며, 자바에서는 이를 더 편리하게 사용하기 위해 인터페이스 개념을 제공한다.

추상 클래스 - 2


순수 추상 클래스: 모든 메서드가 추상 메서드인 추상 클래스

앞서 만든 예제에서 move() 도 추상 메서드로 만들어야 한다고 가정해보자.

이 경우 AbstractAnimal 클래스의 모든 메서드가 추상 메서드가 된다. 이런 클래스를 순수 추상 클래스라 한다.

 

move() 가 추상 메서드가 되었으니 자식들은 AbstractAnimal 의 모든 기능을 오버라이딩 해야 한다.

 

package poly.ex4;

public abstract class AbstractAnimal {
    public abstract void sound();
    public abstract void move();
}
package poly.ex4;

public class Cat extends AbstractAnimal {
    @Override
    public void sound() {
        System.out.println("야옹");
    }

    @Override
    public void move() {
        System.out.println("고양이 이동");
    }
}
package poly.ex4;

public class Dog extends AbstractAnimal {
    @Override
    public void sound() {
        System.out.println("멍멍");
    }

    @Override
    public void move() {
        System.out.println("강아지 이동");
    }
}
package poly.ex4;

public class Caw extends AbstractAnimal {
    @Override
    public void sound() {
        System.out.println("음메");
    }

    @Override
    public void move() {
        System.out.println("소 이동");
    }
}
package poly.ex4;

public class AbstractMain {
    public static void main(String[] args) {
        // AbstractAnimal animal = new AbstractAnimal(); // 추상 클래스로 객체 생성 불가
        AbstractAnimal[] animals = {new Dog(), new Cat(), new Caw()};

        for (AbstractAnimal animal : animals) {
            animal.sound();
            animal.move();
        }
    }
}
멍멍
강아지 이동
야옹
고양이 이동
음메
소 이동

 

순수 추상 클래스

모든 메서드가 추상 메서드인 순수 추상 클래스는 코드를 실행할 바디 부분이 전혀 없다.

package poly.ex4;

public abstract class AbstractAnimal {
    public abstract void sound();
    public abstract void move();
}

이러한 순수 추상 클래스는 실행 로직을 전혀 가지고 있지 않다. 단지 다형성을 위한 부모 타입으로써 껍데기 역할만 제공할 뿐이다.

 

순수 추상 클래스는 다음과 같은 특징을 가진다.

  • 인스턴스를 생성할 수 없다.
  • 상속시 자식은 모든 메서드를 오버라이딩 해야 한다.
  • 주로 다형성을 위해 사용된다.

상속하는 클래스는 모든 메서드를 구현해야 한다.

"상속시 자식은 모든 메서드를 오버라이딩 해야 한다." 라는 특징은 상속 받는 클래스 입장에서 보면 부모의 모든 메서드를 구현해야 하는 것이다.

이런 특징을 잘 생각해보면 순수 추상 클래스는 마치 어떤 규격을 지켜서 구현해야 하는 것 처럼 느껴진다. AbstractAnimal 의 경우 sound(), move() 라는 규격에 맞추어 구현을 해야 한다.

 

이것은 우리가 일반적으로 이야기하는 인터페이스와 같이 느껴진다. 예를 들어서 USB 인터페이스를 생각해보자. USB 인터페이스는 분명한 규격이 있다. 이 규격에 맞추어 제품을 개발해야 연결이 된다. 순수 추상 클래스가 USB 인터페이스 규격이라고 한다면 USB 인터페이스에 맞추어 마우스, 키보드 같은 연결 장치들을 구현할 수 있다.

이런 순수 추상 클래스의 개념은 프로그래밍에서 매우 자주 사용된다. 자바는 순수 추상 클래스를 더 편리하게 사용할 수 있다록 인터페이스라는 개념을 제공한다.

0 0
JAVA
이 공간은 개인 공부를 통해 얻은 정보를 체계적으로 정리하고 공유하는 곳입니다. 학습한 내용, 발견한 지식, 그리고 문제 해결 방법 등을 기록하여 나만의 학습 자료를 구축하고, 필요할 때 쉽게 참고할 수 있는 유용한 자원으로 활용할 수 있도록 합니다.
Yesterday: 456
Today: 187