[JAVA] 추상화

집 가고 싶다.·2024년 1월 4일

JAVA

목록 보기
25/33
post-thumbnail

1. 상속성과 다형성

  • 상속성: 객체 간 공통 기능을 관리하여 코드 재사용과 유지보수 편의성 제공.
  • 다형성: 메서드의 이름을 통일하여 다른 기능을 가진 메서드도 통일된 형식으로 처리, 프로그램 일관성 유지.

2. Override 처리의 문제

  • 문제 발생 가능성: @Override 미사용 시 실수로 새 메서드 정의, 의도치 않은 결과 발생 가능.
  • 해결: @Override 사용해도 개발자 실수로 인한 부모 메서드 미재정의 시, 다형성 구현 불가.

3. 상속 처리 시, Override 강제하기

  • 추상화 기법: 상속 시 부모 메서드 무조건 재정의 강제.
  • 목적: 자식 클래스에 대한 가이드 제공, 설계도로서의 역할 수행.

4. 추상 메서드 만들기

  • 추상 메서드 정의: abstract 키워드 사용, 자식 클래스에게 구현 가이드 제공.
    public abstract void sayHello();

5. 추상 메서드를 포함한 클래스

  • 추상 클래스: 하나 이상의 추상 메서드를 포함한 클래스.
  • 정의: abstract 키워드 사용, 객체 생성 불가, 상속을 통한 사용만 가능.
    public abstract class Hello {
        public abstract void sayHello();
    }
    예제 코드
/*
 * 추상 클래스 Shape가 도형의 개념을 정의하고,
 * 이를 상속받는 Circle와 Square 클래스가 추상 메서드를 구현합니다.
 * 이를 통해 다형성을 활용하여 각 도형의 면적을 계산합니다.
 */
// 추상 클래스 정의
abstract class Shape {
    // 추상 메서드 정의 (하위 클래스에서 반드시 재정의해야 함)
    public abstract double calculateArea();
}

// 추상 클래스를 상속받는 구체적인 도형 클래스들
class Circle extends Shape {
    private double radius;

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

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

class Square extends Shape {
    private double side;

    public Square(double side) {
        this.side = side;
    }

    @Override
    public double calculateArea() {
        return side * side;
    }
}

public class Main {
    public static void main(String[] args) {
        // 추상 클래스의 객체 생성 불가능
        // Shape shape = new Shape(); // 에러 발생

        // 다형성을 통한 활용
        Shape circle = new Circle(5.0);
        Shape square = new Square(4.0);

        // 다형성을 통해 각 도형의 면적 계산
        System.out.println("원의 면적: " + circle.calculateArea());
        System.out.println("정사각형의 면적: " + square.calculateArea());
    }
}

실행 결과

원의 면적: 78.53981633974483
정사각형의 면적: 16.0
profile
틀린거 있으면 알려주세요.

0개의 댓글