기술스택/자바(Spring)

자바 추상 클래스 (Abstract Class)

ys.k 2025. 2. 11. 14:04

포스팅에 앞서 내용이 틀릴 수 있습니다.
해당 부분 지적 감사히 받습니다.

 

오늘은 마음 편히 강의를 보고 싶어 연차를 냈다.

 

그럼 시작해보자.

 

이전 시간에 다형성에 대해서 배웠다.

 

부모 Class를 물려받은 자식 Class는 메서드 오버라이딩을 통해 자식에게 맞는 메서드로 재구현 후 실행하게 된다.

 

이 과정에서 개발자가 새로운 자식 Class를 만들었지만, 메서드 오버라이딩을 구현하지 않을 실수를 할 수도 있다.

 

또한, 부모의 역할로 자식들이 공통으로만 사용될 수 있는 요소만 제공하는 부모라면, Main Class에서 인스턴스를 생성할 필요도 없다.

 

이를 위해 우리는 추상 클래스(Abstract Class)를 사용할 수 있다.

 

추상 클래스의 역할을 알아보자.

 

 1. 추상 클래스의 추상 메서드는 자식에서 반드시 오버라이딩 되어야 한다.

 2. 추상 클래스의 인스턴스를 생성하지 못하게 한다. 

 

솔직히 필수는 아니며 권장사항이다.

 

권장의 이유는 깔끔한 코드와 에러 방지를 위한 것이다.

 

다른 개발자가 해당 코드를 봤을 때, 아 추상 클래스구나 하고 알기 쉽게 함이며, 에러 방지는 추상 클래스를 사용하게 되면, 부모 Class 인스턴스 생성, 부모 추상 메서드 자식에서 미구현 시 컴파일 에러를 내주기 때문이다.

 

이제 사용법을 알아보자.

 

 

추상 Class 사용 전

public class Animal {

    public void sound(){
        System.out.println("동물 소리");
    }

    public void move(){
        System.out.println("동물 이동");
    }
}

 

 

 

추상 Class 사용 후

public abstract class Animal {

    public abstract void move();

    public abstract void sound();

    public void hello(){
        System.out.println("Hello");
    };
}

 

Class 앞에 abstract를 넣어주면 추상 Class로 선언이 된다.

 

마찬가지로 추상 메서드는 메서드 반환 타입 앞에 abstract를 넣어주면 된다.

 

여기서 추상 메서드는 Body 부분이 반드시 없어야만 한다.

 

기능을 넣는 순간 오류 발생.

 

또한 여기에서 조건이 하나 붙는데, 만약 메서드가 하나라도 추상 메서드로 선언이 되면 Class는 반드시 추상 Class여야 한다.

 

왜냐하면 상속받은 자식이 해당 메서드를 오버라이딩 하지 않았을 경우를 막기 위해 추상 Class라는 것을 사용하였는데, 자식에서 추상 메서드 미구현시 컴파일 에러를 던져줘야 하기 때문이다.

 

그래야 개발자가 까먹지 않고 잘 구현하기 때문이다.

 

여기서 만약 모든 메서드가 추상 메서드라면?

 

인터페이스라는 개념이 등장하게 된다.

 

다음장에선 인터페이스에 대해 알아보자.