잉?

[Java] 추상클래스란? abstract? + extends와 오버라이딩 본문

자바(Java)

[Java] 추상클래스란? abstract? + extends와 오버라이딩

Jye_647 2023. 5. 24. 23:06

항상 나에게 명확한 의미로 다가오지 않던 추상클래스.

이름처럼 나에겐 추상적인 존재였다.

하지만 지금은 어느 정도 이미지가 잡힌 듯하여 적어보려 한다.

 

클래스는 설계도라 할 수 있다.

객체라는 부품을 가지고 기능을 만드는 그 설계도.

그렇다면 추상클래스는?

추상클래스는 미완성 설계도라 할 수 있다. 이 추상클래스를 완성하도록 상속을 통해 자식클래스에 넘겨준다.

추상클래스는 자식클래스에서 공통적인 필드나 메서드를 추출해서 만들 수 있다.

또한 abstract 키워드를 사용해 선언할 수 있다.

 

예를 들면 사칙연산을 하는 기능을 만들고자 한다면 연산에 공통적으로 필요한 Operation이라는 클래스를 만들고, 그 안에 operate라는 메서드와 사칙연산에 필요한 최소한의 두 개의 수(firstNumber, secondNumber)를 추출해서 만드는 것이다. 

이 메서드를 자식클래스에서 오버라이딩하여 +, -, *, / 같은 더 세세하고 완성된 설계도를 작성하는 것이다. 

public abstract class AbstractOperation { // 추상클래스
    public abstract double operate(int firstNumber, int secondNumber); // 추상메서드
    // 추상메서드는 정의만 할 뿐, 실행 내용{}은 가지고 있지 X → 실행 내용은 자식클래스에서)
}

 


추상 클래스를 상속받기 위해서는 extends라는 키워드를 사용하여야 한다.

extends를 통해 클래스를 확장시킬 수 있다. 또한 하나의 클래스만 상속 가능

public class AddOperation extends AbstractOperation{ // AbstractOperation 클래스를 extends한다.
    @Override
    public double operate(int firstNumber, int secondNumber){ // 상속받은 클래스의 메서드를 오버라이딩
        return firstNumber + secondNumber;
    }
}

오버라이딩? 메서드의 동작만 재정의하는 것.

public 리턴자료형 메서드명 (자료형 변수명) {!!! 이 부분 동작만 재정의 가능!!! }


이렇게 추상클래스를 알아봤다.

추상클래스는 말 그대로 추상적인 존재였다. 미완성인 설계도.

추상클래스를 사용하면 상속을 통해 같은 필드와 메서드명을 이용하기에 가독성이 좋고,

유지보수에 용이할 것이다. 

Comments