[자바/심화] 추상화(abstract)

추상화(abstract)란?

- "기능은 구현되어 있지 않고, 선언만 있다"라는 의미를 나타내는 지정자이다.

추상 메소드 (Abstract Method)

- 자식 클래스에서 반드시 오버라이딩 해야하는 메소드를 말한다.

- 실행문 블록({})이 없는 메서드이며, 추상 클래스 내에서 사용할 수 있다.

public abstract class Calculator {
    public int add(int num1, int num2) { return num1 + num2; }          // 덧셈
    public int sub(int num1, int num2) { return num1 - num2; }          // 뺄셈
    public int mul(int num1, int num2) { return num1 * num2; }          // 곱셈
    public double div(double num1, double num2) { return num1/num2; }   // 나눗셈
    // 출력문 추상 메소드
    public abstract void print();
}

추상 클래스 (Abstract Class)

- abstract 지정자로 지정된 클래스를 의미한다.

- 추상 클래스로 지정되면 더 이상 new 연산자를 이용하여 인스턴스 생성이 불가능하다.

- 하나 이상의 추상 메소드가 있으면 해당 클래스는 반드시 추상 클래스로 선언해야 한다.

- 부모 클래스가 추상 클래스로 선언되므로, 추상 클래스 타입은 업캐스팅으로 자주 사용된다.

- 자식 클래스에서 구현해야 할 기능을 부모 클래스의 추상 메소드 형식을 빌려와서 일관성 있게 구현할 수 있다.

- 프로그램 소스 코드 구조를 일정하게 유지할 수 있으므로 표준화가 가능하다.

public abstract class Calculator {
    ...
    // 출력문 추상 메소드
    public abstract void print();
}

예제

// 추상 클래스 Person
abstract class Person {
    abstract void printInfo();
}

// 추상 클래스 Person을 상속한 Student
class Student extends Person {
	public void printInfo() {
        System.out.println("Student.printInfo");
    }
}

public class Main {
	public static void main(String[] args) {
        // 추상 클래스의 사용
        Student student = new Student();
        student.printInfo();    // Student.printInfo
        
        // 추상 클래스의 추상 메소드를 오버라이딩
        Person person = new Person() {
            @Override
            void printInfo() {
                System.out.println("Main.printInfo");
            }
        };
        person.printInfo();    // Main.printInfo
    }    
}

⊙ 참고 문헌

  1. 이병승, 「초보 개발자를 위한 자바:한 권으로 배우는 자바 마스터 가이드 북」, 영진닷컴, 2024, p459 - 477
  2. 마종현, 「제로베이스 백엔드 취업 파트타임 스쿨 5기:Part 01. Java 기초-Chapter 01. Java 프로그래밍-10.추상 클래」, 제로베이스, 2024, https://zero-base.co.kr/