[Java] 추상클래스

Bam·2024년 3월 4일
0

Java

목록 보기
38/98
post-thumbnail

추상화

추상화(abstraction)는 어떤 것에 대해 세부적인 사항은 생략하고 주요한 특징만 뽑아서 모델링하는 것을 말합니다.

예를 들어 자동차와 오토바이를 추상화한다면 바퀴가 있다, 엔진으로 구동된다 정도가 있겠죠?


추상클래스

추상클래스는 인스턴스를 생성할 수 없는 클래스입니다. 추상메소드가 포함되어 있어서 인스턴스를 생성할 수 없습니다.

따라서 추상클래스상속을 통해 자식클래스로 추상메소드를 구현해야지만 인스턴스 생성이 가능해지는 클래스입니다. 즉, 추상클래스 상속만 할 수 있다는 것이 됩니다.

말만 들으면 구현도 하지못하는 클래스가 왜 필요한가라는 생각이 들 수 있는데요. 예를들면 같은 자동차라도 옵션에 따라서 90%는 동일하지만 10%의 다른 점이 생기게 됩니다. 이럴때마다 10%때문에 다 다른 클래스를 작성하느니 미완성된 90%를 그려놓고, 10%를 상속받아서 구현하는 것이 훨씬 효율이 좋겠죠? 그렇기 때문에 추상클래스를 이용하는 것 입니다.

추상클래스는 클래스 선언부에 abstract 키워드를 붙여서 선언합니다.

abstract class 클래스명 {}
public abstract class Fruit {}

Fruit 추상클래스를 인스턴스화하려고하면 다음과 같이 오류가 발생합니다.

추상메소드

추상메소드선언부만 존재하는 메소드입니다. 메소드의 기능 구현은 상속받은 클래스에서 메소드 오버라이딩을 통해 구현합니다.

추상클래스를 만드는 것을 추상화, 추상 클래스를 상속받아 오버라이딩해서 메소드를 구현하는 것(과 클래스의 확장)을 구체화라고 합니다.

마찬가지로 추상메소드abstract 키워드를 붙여서 선언합니다. 이때 선언부만 존재해야하므로 메소드 블록{}은 적지 않습니다.

abstract 반환값_타입 메소드명(매개변수, ...);

위에서 선언한 Fruit 추상클래스에 추상 메소드를 추가했습니다.

public abstract class Fruit {
    abstract public void printFruitName();	//추상메소드
}

그리고 이 클래스를 상속받은 Apple 클래스를 만들어줍니다.

public class Apple extends Fruit {
    @Override	//오버라이딩을 알리는 Annotation
    public void printFruitName() {	//추상메소드를 구현
        System.out.println("나는 사과다.");
    }
}
public class Main {
    public static void main(String[] args) {
        Apple apple = new Apple();

        apple.printFruitName();
    }
}

0개의 댓글