언어/Java

[Java] 추상 클래스란?

JM Lee 2024. 4. 7. 18:53
728x90

추상 클래스(abstract class)는 객체 지향 프로그래밍에서 일종의 템플릿이며, 직접적으로 인스턴스화할 수 없는 클래스다. 추상 클래스는 하나 이상의 추상 메서드(abstract method)를 포함하며, 추상 메서드는 메서드 시그니처만을 가지고 있고 구현은 없는 메서드다.

추상 클래스는 일반적으로 상속을 통해 자식 클래스에서 구체적인 동작을 정의하도록 유도한다. 자식 클래스는 추상 클래스로부터 상속받은 추상 메서드를 반드시 구현해야 한다.

추상 클래스는 클래스의 계층 구조를 설계하는 데 사용되며, 코드의 재사용성과 유연성을 높이는 데 도움이 된다. 또한, 추상 클래스를 사용하여 공통된 기능을 정의하고, 이를 상속받는 여러 개의 클래스에서 필요에 따라 구현할 수 있다.

 

자바(Java)에서는 추상 클래스를 선언하기 위해 abstract 키워드를 사용하며, 추상 메서드를 선언하기 위해서는 해당 메서드에 abstract 키워드를 추가한다.

 


// 추상 클래스 정의
abstract class Shape {
    // 추상 메서드 선언
    abstract double area(); // 도형의 넓이를 계산하는 추상 메서드
    abstract double perimeter(); // 도형의 둘레를 계산하는 추상 메서드
    
    // 일반 메서드
    void display() {
        System.out.println("도형 정보 출력");
    }
}

// 추상 클래스를 상속받는 구체적인 클래스 정의
class Circle extends Shape {
    double radius;
    
    Circle(double radius) {
        this.radius = radius;
    }
    
    // 추상 메서드 구현
    double area() {
        return Math.PI * radius * radius;
    }
    
    double perimeter() {
        return 2 * Math.PI * radius;
    }
}

class Rectangle extends Shape {
    double length;
    double width;
    
    Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }
    
    // 추상 메서드 구현
    double area() {
        return length * width;
    }
    
    double perimeter() {
        return 2 * (length + width);
    }
}

// 메인 클래스
public class Main {
    public static void main(String[] args) {
        Circle circle = new Circle(5);
        System.out.println("원의 넓이: " + circle.area());
        System.out.println("원의 둘레: " + circle.perimeter());
        
        Rectangle rectangle = new Rectangle(4, 6);
        System.out.println("사각형의 넓이: " + rectangle.area());
        System.out.println("사각형의 둘레: " + rectangle.perimeter());
    }
}

 

추상 클래스는 그럼 단순히 상속의 문제 때문에 필요한 건가?

 

추상 클래스는 상속의 문제 때문에만 필요한 것은 아니다. 상속은 추상 클래스를 사용하는 주요 방법 중 하나이지만, 그 외에도 몇 가지 중요한 이유로 추상 클래스를 사용할 수 있다.

  1. 추상화: 추상 클래스는 실제로 구체적인 인스턴스를 만들어 내는 것보다는 객체들 사이의 공통적인 특성이나 동작을 추상화하여 정의할 때 유용하다. 이를 통해 코드의 가독성과 유지보수성을 향상시킬 수 있다.
  2. 코드 재사용성: 추상 클래스는 공통적인 동작을 정의하므로, 이를 상속받는 클래스에서는 이러한 동작을 다시 구현할 필요가 없다. 이렇게 함으로써 코드 재사용성이 증가하고 개발 시간을 단축시킬 수 있다.
  3. 프로그래밍의 유연성 증대: 추상 클래스를 사용하면 프로그래머가 프로그램의 구조를 유연하게 설계할 수 있다. 추상 클래스를 상속하는 여러 클래스를 만들면 각 클래스가 공통된 동작을 포함하면서도 자신만의 동작을 추가할 수 있다.
  4. 다형성 구현: 추상 클래스와 인터페이스는 다형성(polymorphism)을 구현하는데 사용된다. 추상 클래스를 상속하는 여러 클래스들은 추상 클래스의 추상 메서드를 오버라이딩하여 각자의 방식으로 구현할 수 있다. 그리고 이들 객체들은 모두 추상 클래스 타입으로 다룰 수 있다.

따라서 추상 클래스는 단순히 상속의 문제 때문에만 필요한 것이 아니라, 객체 지향 프로그래밍의 여러 측면에서 유용하게 활용될 수 있다.

'언어 > Java' 카테고리의 다른 글

[JAVA] 스레드  (0) 2024.04.13
[Java] record  (0) 2024.04.12
[Java] JVM 개요  (0) 2024.04.11
Java static  (0) 2024.04.07
Java 객체 속성 설정 관련 공부  (1) 2024.04.06