Skip to content

Latest commit

 

History

History
85 lines (68 loc) · 1.92 KB

23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라.md

File metadata and controls

85 lines (68 loc) · 1.92 KB

태그 달린 클래스보다는 클래스 계층구조를 활용하라.

  • 핵심 : 추상클래스를 잘 활용해!
// 태그 달린 
public class Figure {

    enum Shape {RECTANGLE, CIRCLE};

    final Shape shape;
    
    double length;
    double width;
    
    double radius;

    public Figure(double length, double width) {
        this.shape = Shape.RECTANGLE;
        this.length = length;
        this.width = width;
    }

    public Figure(double radius) {
        this.shape = Shape.CIRCLE;
        this.radius = radius;
    }
    
    double area() {
        switch (shape) {
            case RECTANGLE:
                return length * width;
            case CIRCLE:
                return Math.PI * (radius * radius);
            default:
                throw new AssertionError(shape);
        }
    }
}
  • 태그 달린 클래스의 단점
    • 가독성이 떨어진다.
    • 코드가 변경에 취약하고 오류를 내기 쉽다.
    • 사실상 안쓰는게 맞다.
// 추상클래스
abstract class Figure {
    abstract double area();
}

class Circle extends Figure {
    final double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    double area() {
        return Math.PI * (radius * radius);
    }
}

class Rectangle extends Figure {
    final double length;
    final double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    double area() {
        return length * width;
    }
}
  • 추상클래스의 장점
    • 사실상 태그달린 클래스와 같은 컨셉이지만 단점은 없고 장점은 더 많다.
    • 없어도 되는 필드는 없게 만들수 있기 때문에 간결하다.
    • area() 메서드에서 오류가 발생할 가능성이 낮고 코드의 유지보수성이 좋아진다.
    • 상속 받은 클래스는 더 자유롭게 확장할 수 있다.