추상 클래스와 봉인된 클래스

2023. 8. 14. 21:24·BackEnd/JAVA 공부

추상 클래스

추상 클래스(Abstract Class)는 객체 지향 프로그래밍에서 사용되는 중요한 개념으로, 완전히 구현되지 않은 메소드를 가질 수 있는 클래스입니다. 추상 클래스는 직접적으로 객체를 생성할 수는 없지만, 이를 상속받은 하위 클래스에서 추상 메소드를 구현하여 사용할 수 있습니다. 추상 클래스는 클래스 간의 공통된 특성을 추출하여 정의하는 데 사용됩니다.

즉, 다시 말하면 객체를 생성할 수 있는 클래스를 실체 클래스라고 한다면, 이 클래스들의 공통적인 필드나 메소드를 추출해서 선언한 클래스를 추상 클래스라고 합니다!!!

abstract class Shape {
    abstract double calculateArea(); // 추상 메소드, 하위 클래스에서 구현
  
    void displayArea() {
        System.out.println("Area: " + calculateArea());
    }
}

class Circle extends Shape {
    private double radius;

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

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

class Rectangle extends Shape {
    private double width;
    private double height;

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

    @Override
    double calculateArea() {
        return width * height;
    }
}

public class AbstractClassExample {
    public static void main(String[] args) {
        Circle circle = new Circle(5.0);
        Rectangle rectangle = new Rectangle(4.0, 6.0);
        
        circle.displayArea();
        rectangle.displayArea();
    }
}

이 코드는 추상 클래스를 사용한 예시입니다. 여기서 중요한 것은 추상 메소드입니다.

추상 메소드는 자식 클래스들이 가지고 있는 공통 메소드를 뽑아내어 추상 클래스로 작성할 때, 메소드 선언부만 동일하고 실행 내용은 자식 클래스마다 달라야 하는 경우가 있습니다. 이 때 사용합니다. 위에 코드는 calculateArea()로 각 도형마다 계산 하는 법이 다르므로 추상 메소드로 선언했습니다. 

 

봉인된 클래스

기본적으로 final 클래스를 제외한 모든 클래스는 부모 클래스가 될 수 있습니다. 그러나 java 15부터는 무분별한 자식 클래스 생성을 방지하기 위해 봉인된 클래스가 도입되었습니다.

public sealed class Person permits Employee, Manager { ... }

이렇게 하면 Person의 Employee와 Manager만 자식 객체 선언할 수 있습니다.

public final class Employee extends Person { ... }
public non-sealed class Member extends Person { ... }

final은 더 이상 상속할 수 없다는 뜻입니다. 그러므로 더 이상 자식 객체를 못 만듭니다.

non-sealed는 봉인을 해제한다는 뜻입니다. 그래서 Manager는 자식 클래스를 만들 수 있습니다!!

 

 

출처

이것이 자바다

https://product.kyobobook.co.kr/detail/S000061695652

 

이것이 자바다 | 신용권 - 교보문고

이것이 자바다 | JAVA 17 버전으로 업그레이드해서 돌아왔다! 7년 동안 꾸준히 사랑받은 자바 베스트셀러 1위, 『이것이 자바다』 개정판!『이것이 자바다』는 기본 개념에 충실한 설명으로 2015년

product.kyobobook.co.kr

 

'BackEnd > JAVA 공부' 카테고리의 다른 글

인터페이스에 대해(2)  (1) 2023.08.17
인터페이스에 대해(1)  (0) 2023.08.16
상속에 대해(2)  (0) 2023.08.14
상속에 대해(1)  (0) 2023.08.13
메모리 사용 영역에 대해  (0) 2023.08.08
'BackEnd/JAVA 공부' 카테고리의 다른 글
  • 인터페이스에 대해(2)
  • 인터페이스에 대해(1)
  • 상속에 대해(2)
  • 상속에 대해(1)
인프라 감자
인프라 감자
  • 인프라 감자
    삶은 인프라
    인프라 감자
  • 전체
    오늘
    어제
    • 분류 전체보기 (243)
      • 클라우드&인프라 (28)
        • 인프라 공부 (4)
        • AWS 구조와 서비스 (18)
        • 클라우드 공부 (4)
        • Terraform (2)
      • AWS Cloud School (13)
        • project (5)
        • Linux, Network (6)
        • Docker (2)
      • BackEnd (162)
        • JAVA 공부 (15)
        • 알고리즘 공부 (71)
        • MySQL 문제 풀기 (8)
        • 스프링 핵심 원리 - 기본편 (18)
        • 스프링 MVC 1편 (4)
        • 자바 ORM 표준 JPA 프로그래밍 (21)
        • 실전! 스프링 부트와 JPA 활용1 (8)
        • 실전! 스프링 부트와 JPA 활용2 (5)
        • 스프링 데이터 JPA (8)
        • Querydsl (4)
      • 혼자하는 프로젝트 (32)
        • 배달의 민족 클론코딩 (7)
        • 나만의 프로젝트 (10)
        • 스프링 부트로 구현한 웹 (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Email
    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    linux
    백트래킹
    자바
    이것이 자바다
    VPN
    스프링 핵심 원리-기본편
    다이나믹 프로그래밍
    정렬
    프로그래머스
    유니온 파인드
    자동 배포
    쿼드 압축
    중첩 선언
    디팬스 게임
    완전탐색
    dp
    조합
    네트워크 기본 용어
    querydsl
    상속
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
인프라 감자
추상 클래스와 봉인된 클래스
상단으로

티스토리툴바