2 minute read

먼저, 추상 클래스란?

  • 추상 클래스는 클래스인데 추상적인 클래스이다. 추상 메서드를 가질 수 있고, 일반 메서드도 가질 수 있는 클래스이다.
  • 반면, 인터페이스는 모든 메서드가 추상 메서드로 정의된다!

추상 클래스는 꼭 추상 메서드를 가져야하나???

  • 추상 클래스는 추상 메서드를 포함할 수 있지만, 않을 수도 있다.
  • 추상 클래스는 일반 메서드를 포함할 수도 있고, 필드와 생성자를 가질수 있다.
  • 이러한 일반 메서드들은 오버라이딩이 가능하고 반드시 구현할 필요는 없다.
  • 이러한 특성은 추상 클래스를 상속받는 클래스들이 일부 공통적인 기능을 가지면서도 다른 부분을 구현할 수 있도록 유연성을 제공한다.
  • 즉, 추상 클래스는 인터페이스와 비슷한 역할을 하지만 더 많은 기능을 제공할 수 있다.

그럼 인터페이스는 굳이 왜 쓰나?

  • 다중 상속 가능 : 자바에서는 클래스 다중 상속을 허용하지 않는다. 그러나 인터페이스는 다중 상속을 지원함으로, 여러 개의 인터페이스를 구현함으로써 다중 상속과 유사한 효과를 얻을 수 있다.
  • 설계의 유연성 : 인터페이스를 사용하면, 클래스와 인터페이스 간의 결합도를 낮출 수 있다. 이를 통해 코드의 유지보수성과 확장성을 높일 수 있다.

예시코드

public abstract class Shape {
    String color;
    abstract double calArea(); //추상메서드
    abstract void printName(); //추상메서드

    String getColor() { //일반 메서드
        return color;
    }

    void setColor(String color) {
        this.color = color;
    }
}

class Circle extends Shape {
    double radius;
    // 추상 클래스(부모 클래스)의 추상 메서드를 세부 구현.
    double calArea() {
        double area = 0;
        area = 3.14 * radius * radius;
        return area;
    }

    void printName() {
        System.out.println("I'm Circle");
    }
}

class Rectangle extends Shape {
    double width;
    double heigth;

    double calArea() {
        double area = 0;
        area = width * heigth;
        return area;
    }

    void printName() {
        System.out.println("I'm Rectangle");
    }
}

추상 클래스를 상속받았을때 부모클래스의 추상메서드는 꼭 구현해줘야하나요?

  • 부모 클래스가 추상 클래스인 경우, 그 클래스에는 하나 이상의 추상 메서드가 선언될 수 있습니다. 하위 클래스가 부모 추상 클래스를 상속받은 경우에는, 하위 클래스에서 부모 추상 클래스의 추상 메서드를 반드시 구현해야 한다. 그렇지 않으면 하위 클래스도 추상 클래스가 되어야 한다.
  • 따라서 추상 클래스를 상속받은 하위 클래스는 부모 클래스의 모든 추상 메서드를 구현하거나, 하위 클래스를 다시 추상 클래스로 선언해야 한다. 추상 클래스의 추상 메서드를 구현하지 않고도 하위 클래스를 구현할 수 있는 경우는, 하위 클래스에서도 해당 메서드를 추상 메서드로 선언하면 된다.
  • 하지만, 추상 클래스에 구현된 일반 메서드는 구현하지 않아도 된다. 추상 클래스에서 구현된 메서드는 하위 클래스에서 오버라이드하거나 그대로 사용할 수 있다.
  • 추상 클래스의 구현된 일반 메서드는 상속 클래스의 규칙을 따른다.
  • 즉, 하위 클래스에서 오버라이드하거나 그대로 사용할 수 있다. (추상화)
  • 안써도 된다.
  • 추상 메서드는 꼭 구현해줘야한다. (다형성)

추상클래스를 쓰는 가장 큰 이유? (개인적인 의견)

  • 공통적인 부분을 추려낸다.
  • 중복 코드를 없앤다.
  • 다형성을 구현할 수 있다. (메서드 재정의)

추상화와 다형성 개념의 차이?

  • 추상화는 객체들의 공통적인 특성을 추출하여 일반화하는 것
  • 다형성은 하나의 타입에 대해 다양한 구현을 제공하는 것
  • 추상화는 객체를 분류하고 구조화하는 과정에서 사용되며, 다형성은 유연하고 확장성 있는 코드를 작성하기 위한 개념이다.

Leave a comment