[Java] 09. OOP - 추상 클래스(abstract class)

2024. 6. 24. 22:46·Java/Core

추상 클래스(abstract class)

  • 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성할 수 없다.
  • 추상 클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다.
  • 추상 클래스는 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서의 중요한 의미를 갖는다
abstract class 클래스이름 {
    // ...
}
  • 키워드 'abstract'를 붙이기만 하면 된다
  • 추상 클래스에도 생성자가 있으며, 멤버변수와 메서드를 가질 수 있다

추상메서드(abstract method)

  • 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 메서드. 미완성 메서드임
    • 미완성으로 남겨둔 이유는?
    • 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만을 작성하고, 주석을 덧붙여 어떤 기능을 수행할 목적으로 작성되었는지 알려주고, 실제 내용은 상속받는 클래스에서 구현하도록 비워 두는 것
/* 주석 */
abstract 리턴타입 메서드이름();
  • 추상 메서드 역시 키워드 'abstract'를 앞에 붙여주고, 괄호{} 대신 문장의 끝을 알리는 ';'를 적어준다
  • 자손 클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현해주어야 한다.
    • 상속받은 추상메서드 중 하나라도 구현하지 않는다면, 자손 클래스 역시 추상클래스로 지정해 주어야 한다

구현부가 없는 메서드가 갖는 의미

  • 메서드를 작성할 때 실제 작업내용인 구현부보다 더 중요한 부분이 선언부이다.
    • 사용하는 쪽에서 구현을 알 필요가 없고, 선언부만 알고 있으면 되기 때문
    • 인터페이스를 생각해보면 된다

추상클래스의 작성

  1. 여러 클래스에 공통적으로 사용될 수 있는 클래스를 바로 작성하기도 하고
  2. 기존의 클래스의 공통적인 부분을 뽑아서 추상클래스로 만들어 상속하도록 하는 경우도 있다
  • 상속이 자손 클래스를 만드는데 조상 클래스를 사용하는 것이라면, 이와 반대로 추상화는 기존의 클래스의 공통부분을 뽑아내서 조상 클래스를 만드는 것이라고 할 수 있다

추상메서드로 선언하는 이유

  • 추상메서드로 선언하는 것이나 그냥 빈 몸통을 가진 메서드로 만들어 놓는 것이나 별 차이가 없어 보인다고요?
    • abstract를 붙여서 추상메서드로 선언하는 이유는 자손 클래스에서 추상 메서드를 반드시 구현하도록 강요하기 위해서이다
    • 만약 추상 메서드로 정의되어 있지 않고 빈 몸통만 가지도록 정의되어 있다면, 상속받는 자손 클래스에서는 이 메서드들이 온전히 구현된 것으로 인식하고 오버라이딩을 통해 자신의 클래스에 맞도록 구현하지 않을 수도 있기 때문이다

공통 부분 뽑아내기

  • 서로 다른 종류의 인스턴스를 하나의 묶음으로 다룸으로써 조상 클래스타입의 배열에 자손 클래스의 인스턴스를 담을 수 있게 된다
    • 이렇게 되면 여러 타입의 인스턴스의 공통적인 부분을 다루기 편해진다 (ex. for문 내에서 사용)
  • Object 클래스 타입의 배열로도 서로 다른 종류의 인스턴스를 하나의 묶음으로 다룰 수 있지만, Object 클래스에는 공통 메서드가 정의되어 있지 않기 때문에 에러가 발생한다

참조) Java의 정석 3rd edition(남궁성, 도우출판)

'Java > Core' 카테고리의 다른 글

[Java] 11. OOP - 내부 클래스(Inner Class), 익명 클래스  (0) 2024.07.07
[Java] 10. OOP - 인터페이스(Interface)  (0) 2024.07.07
[Java] 08. OOP - 다형성(polymorphism)  (0) 2024.06.24
[Java] 07. OOP - 상속과 접근제어자  (0) 2024.03.12
[Java] 06. OOP - 클래스와 객체  (0) 2024.03.12
'Java/Core' 카테고리의 다른 글
  • [Java] 11. OOP - 내부 클래스(Inner Class), 익명 클래스
  • [Java] 10. OOP - 인터페이스(Interface)
  • [Java] 08. OOP - 다형성(polymorphism)
  • [Java] 07. OOP - 상속과 접근제어자
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (463)
      • 개발 일지 (0)
        • Performance (0)
        • TroubleShooting (0)
        • Refactoring (0)
        • Code Style, Convetion (0)
        • Architecture (0)
      • Software Engineering (36)
        • Test (8)
        • 이론 (18)
        • Clean Code (10)
      • Java (72)
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (13)
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (16)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (130)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (6)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[Java] 09. OOP - 추상 클래스(abstract class)
상단으로

티스토리툴바