[TIL] 추상 클래스란? 개념, 사용 이유, 예제로 이해하기

2026. 2. 5. 18:07·Programming Language/Java

추상 클래스

추상 클래스 덕분에 기본 알고리즘 정의가 가능

추상화란?

알고는 있지만 정확하게 표현하기 힘든 것들을 중요한 부분이나 특징점을 잡아 설명하는 것
  • 즉, 클래스들의 중요하고 공통된 성질들을 추출하여 부모(슈퍼) 클래스를 선정하는 개념과 이벤트 발생의 정확한 절차나 방법을 정의하지 않고 대표할 수 있는 표현으로 대체하는 것을 말합니다.
    • 객체 지향 프로그래밍의 추상화는 크게 두 가지로 나뉩니다.
      1. 데이터 추상화
        • 객체의 관련 속성만 표시
      2. 제어 추상화
        • 불필요한 세부 정보는 숨김

출처 & 더 자세히 알아보기 : [Inpa Dev 👨‍💻:티스토리]


추상 클래스 사용 이유

자바에서 추상 클래스(Abstract Class)는 공통된 필드와 메서드를 추출하여 상위 클래스에서 정의하고, 하위 클래스에서 이를 상속받아 구체적으로 구현하도록 강제하여 코드의 재사용성, 일관성, 그리고 유지보수성을 높이기 위해 사용합니다. 인스턴스화를 막아 설계도 역할을 하며, 템플릿 메서드 패턴을 통해 구조적이고 유연한 시스템을 구축할 수 있게 합니다.

추상 클래스 문법

  • 추상 클래스는 단순히 abstract 를 붙임으로써 자바 컴파일러에게 추상 클래스라는 것을 알려줍니다
public abstract class AbstractRecipe {
    public void execute(){
        getReady();
        doTheDish();
        cleanup();
    }
    abstract void getReady();
    abstract void doTheDish();
    abstract void cleanup();
}
  • 추상 메소드에서는 메소소드 선언만 작성하고 구현 부분은 작성하지 않습니다.
    • 즉, 빈껍데기 상태

추상 메서드를 비워두는 이유

  • 자식 클래스에 따라 어떤 행동을 할지 모르기 때문입니다.
    • 즉, 주제만 추상 클래스에서 작성하고 실제 행동은 상속받는 클래스에서 작성하면 되는거죠

추상 클래스 상속 받기

public class Recipe1 extends AbstractRecipe{
}
  • 단순히 extends 키워드를 사용하면 쉽게 상속 받을 수 있습니다

추상 메소드 구현하기

public abstract class AbstractRecipe {
    public String recipeName; //인스턴스 필드
    public void execute(){ //인스턴스 메소드
        getReady();
        doTheDish();
        cleanup();
    }
    //추상 메소드
    abstract void getReady();
    abstract void doTheDish();
    abstract void cleanup();
}

class Recipe1 extends AbstractRecipe{
    @Override
    void getReady(){
        System.out.println("Get the raw materials");
        System.out.println("Get the utensils");
    };

    @Override
    void doTheDish(){
        System.out.println("prepare the dish");
    }

    @Override
    void cleanup(){
        System.out.println("Cleanup the utensils");
    }

    public static void main(String[] args) {
        Recipe1 recipe1 = new Recipe1();
        recipe1.execute();
    }
}
  • @Overide 는 물론 생략이 가능합니다.
  • 추상 클래스는 일반 클래스와 거의 동일하지만, 인스턴스 생성 불가 + 추상 메서드 강제 구현이라는 설계 제약이 핵심 차이
  • 추상 클래스에도 생성자가 있으며 독립적인 인스턴스 멤버 변수와 메서드도 가질 수 있기 때문입니다.

추상적 클래스는 인스턴스를 만들 수 없다.

AbstractRecipe recipe = new AbstractRecipe();
  • 이렇게 작성을하면 에러가 납니다.
  • 그 이유는 추상 클래스는 상속 구조에서 부모 클래스를 나타내는 역할로만 이용되기 때문입니다.
  • 추상 메소드는 정의도 없고 형태도 없는 메소드를 의미
  • 따라서 구상 클래스가 추상 클래스를 연장하려면 모든 추상 메소드에 대해 구현해야 합니다

추상 클래스 끼리 확장 시키기

abstract class Recipe1 extends AbstractRecipe{
	...
}
  • 추상 클래스끼리 확장하는 방법도 물론 가능합니다
  • 하지만 나중에 자식 클래스가 구상 클래스라면 모든 추상 클래스의 메소드를 구현해야합니다.
추상 클래스는 상태(필드)를 가질 수 있고, 인터페이스는 행동 규약에 집중한다

참고 자료 📚

  • 추상 클래스 -inpa

'Programming Language > Java' 카테고리의 다른 글

[TIL]자바 컬렉션 프레임워크 구조 분석 — List 내부 동작과 정렬 원리 파헤치기  (1) 2026.02.12
[TIL] 인터페이스  (0) 2026.02.06
[TIL] 자바 객체 설계부터 상속까지 (+ toString이 자동 호출되는 이유)  (0) 2026.02.03
[TIL] JAVA 배열에 관해서  (0) 2026.01.30
[TIL] Wrapper클래스  (1) 2026.01.28
'Programming Language/Java' 카테고리의 다른 글
  • [TIL]자바 컬렉션 프레임워크 구조 분석 — List 내부 동작과 정렬 원리 파헤치기
  • [TIL] 인터페이스
  • [TIL] 자바 객체 설계부터 상속까지 (+ toString이 자동 호출되는 이유)
  • [TIL] JAVA 배열에 관해서
dev_Hyeonjoon
dev_Hyeonjoon
문제를 풀며 사람들에게 감동✨을 전하고 가치를 만드는 개발자가 되고 싶습니다 💻
  • dev_Hyeonjoon
    Hyeonjoon's code
    dev_Hyeonjoon
  • 전체
    오늘
    어제
    • 분류 전체보기 (50)
      • Programming Language (29)
        • JavaScript (0)
        • Java (27)
      • Front-end (10)
        • React-project (5)
        • Vanilla[JS]-project (5)
        • study (0)
      • AI Tools (1)
      • Back-end (0)
      • 독서록 (0)
      • 기타 (5)
      • Trouble Shooting (2)
        • Python (1)
      • 자격증 (1)
      • 알고리즘 (1)
        • 백준 (1)
      • FrameWork (0)
        • Node.js (Express.js) (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    형변환
    사지방
    Java
    Til
    사지방코딩
    군대에서코딩
    OOP
    자바
    토이프로젝트
    코딩
    자바공부
    조건문
    객체지향
    자바기초
    리액트
    파이썬
    vanillajs
    바닐라js
    구름IDE
    군자기계발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
dev_Hyeonjoon
[TIL] 추상 클래스란? 개념, 사용 이유, 예제로 이해하기
상단으로

티스토리툴바