Java

[Java] 추상 클래스

자바바 2023. 9. 1. 18:03

추상 클래스(Abstract Class)란?

객체 간의 공통적 특성을 추출한 클래스.

예를 들어 강아지, 고양이, 사자라는 객체가 있다고 해보자. 이 3가지 객체는 동물이라는 공통점이 있다. 여기서 동물은 구체적인 실체라기보다 "나이", "짖기"와 같은 필드와 메소드를 가지고 있는 모든 동물 객체들의 공통되는 특성을 가지고 있는 추상적인 클래스이다.

 

new 연산자를 통해 직접 객체를 만들지는 못하고, 추상 클래스에서 껍데기만 생성하고 상속하는 자식 클래스에서 필수로 오버라이딩하여 사용한다.

 

💡 추상 클래스는 무조건 추상 메소드가 하나 이상 있어야 하나? 

아니다. 추상 클래스는 추상 메소드를 가지지 않아도 된다.

하지만, 추상 메소드를 하나라도 가지는 클래스는 반드시 추상 클래스가 되어야 한다.

 

 

추상 클래스 사용 이유

  • 객체들의 필드와 메소드의 이름을 통일하여 소스 가독성 높이기 위해서
  • 개발 효율성 증대 -> 많은 객체를 생성할 때 모든 객체들에 공통적인 메소드/필드를 추상 클래스로 만들고 이 필요한 기능들을 하위 자식들이 상속받고, 추상 클래스는 자식에서 재정의하는 방식을 통해 개발 효율성 증대 

 

추상 클래스 예제

public abstract class Animal {
    String name;
    int age;
    
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public void move() {System.out.println("이동한다");}
    public void eat() {System.out.println("먹는다");}
    
    public abstract void bark(); //짖는 소리는 동물마다 다르므로 추상메서드로 생성
}

 

public class Dog extends Animal{

    public Dog(String name, int age) {
        super(name, age);
    }
    
    // bark()는 추상 메소드로 생성되어 있기 때문에 재정의
    @Override
    public void bark() { //메소드 오버라이딩
        System.out.println("멍멍!!");
    }; 
}

 

public class Cat extends Animal{
    public Cat(String name, int age) {
        super(name, age);
    }
    
    @Override
    public void bark() { // 오버라이딩
        System.out.println("야옹~");
    }; 
}

 

 

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("강아지",3);
        Cat cat = new Cat("고양이",3);
        
        dog.move();
        dog.bark();
        
        cat.move();
        cat.bark();
    }
}

실행 결과

이동한다

멍멍!!

이동한다

야옹~

 


참고

https://coding-factory.tistory.com/866