Java 추상 클래스(abstract class)와 추상 메서드

코딩Java
읽는데 9분 소요
처음 쓰여진 날: 2026-02-17
마지막 수정일: 2026-02-17
조회수: 4

요약

Java 추상 클래스(abstract class)와 추상 메서드(abstract method)의 개념을 알아봅니다. 추상 클래스의 일반 메서드와 추상 메서드의 차이, 그리고 자식 클래스에서의 구현 방식을 이해하여 정보처리기사 실기 문제를 풀어봅니다.

추상 클래스 핵심 정리

개념설명예시
추상 클래스직접 객체를 만들 수 없는 클래스abstract class Vehicle { }
추상 메서드선언만 있고 본문이 없는 메서드abstract String getName(String val);
일반 메서드본문이 있는 메서드 (추상 클래스 안에도 가능)String getName() { return "Vehicle"; }
구현 의무자식 클래스는 추상 메서드를 반드시 구현Car에서 getName(String val) 구현

추상 클래스란?

추상 클래스(abstract class)abstract 키워드가 붙은 클래스로, 직접 객체를 생성할 수 없는 클래스입니다.

쉽게 말하면, "설계도만 제공하고, 실제 사용은 자식 클래스가 한다" 는 뜻입니다.

java
코드 하이라이팅 중...

추상 클래스는 반드시 자식 클래스가 상속(extends) 해서 사용해야 합니다.

Java 추상 클래스와 자식 클래스의 관계
추상 클래스 Vehicle의 추상 메서드는 자식 클래스 Car에서 반드시 구현해야 하지만, 일반 메서드는 그대로 사용할 수 있습니다.
java
코드 하이라이팅 중...

추상 메서드

추상 메서드(abstract method) 는 선언만 있고 본문(중괄호 안의 코드)이 없는 메서드입니다. abstract 키워드가 붙고, 세미콜론(;)으로 끝납니다.

java
코드 하이라이팅 중...

자식 클래스는 이 추상 메서드를 반드시 구현(오버라이딩) 해야 합니다.

java
코드 하이라이팅 중...
구분추상 메서드일반 메서드
키워드abstract 있음abstract 없음
본문없음 (세미콜론으로 끝남)있음 (중괄호 { } 안에 코드)
자식 클래스반드시 구현구현하지 않아도 됨 (그대로 사용 가능)


추상 클래스 안의 일반 메서드

추상 클래스는 추상 메서드만 가질 수 있는 것이 아닙니다. 일반 메서드(본문이 있는 메서드)도 함께 가질 수 있습니다.

java
코드 하이라이팅 중...

위 코드에서 Vehicle 클래스에는 세 개의 메서드가 있습니다.

메서드종류본문자식 클래스에서
getName(String val)추상 메서드없음반드시 구현해야 함
getName()일반 메서드있음구현하지 않으면 부모 것 사용
setName(String val)일반 메서드있음구현하지 않으면 부모 것 사용

추상 클래스 vs 인터페이스

추상 클래스와 인터페이스는 비슷하지만 차이가 있습니다.

구분추상 클래스인터페이스
키워드abstract classinterface
상속/구현extendsimplements
일반 메서드가질 수 있음기본적으로 불가 (추상 메서드만)1
필드 (변수)가질 수 있음상수만 가능
다중 상속불가능 (하나만 상속)가능 (여러 개 구현)
java
코드 하이라이팅 중...

메서드 오버로딩과 혼동 주의

문제에서 같은 이름이지만 매개변수가 다른 메서드가 여러 개 있을 수 있습니다. 이것은 메서드 오버로딩입니다.

java
코드 하이라이팅 중...

이 경우 getName()이라는 이름의 메서드가 여러 개 있지만, 매개변수 타입이 다르므로 서로 다른 메서드입니다.

메서드매개변수정의된 클래스호출 조건
getName()없음Vehicle (부모)매개변수 없이 호출할 때
getName(String val)StringCar (자식)String을 전달할 때
getName(byte val[])byte[]Car (자식)byte 배열을 전달할 때

실전 예제: 문제 풀이 과정

20년 3회 기출문제와 동일한 구조로 단계별 풀이를 연습합니다.

java
코드 하이라이팅 중...

1단계: 클래스 구조 파악

클래스메서드종류설명
VehiclegetName(String val)추상 메서드선언만 있음
VehiclegetName()일반 메서드"Vehicle name:" + name 반환
VehiclesetName(String val)일반 메서드name에 val 저장
CarCar(String val)생성자setName(val) 호출
CargetName(String val)구현 (오버라이딩)"Car name:" + val 반환
CargetName(byte val[])오버로딩"Car name:" + val 반환

2단계: 객체 생성

java
코드 하이라이팅 중...
  1. new Car("Spark")로 Car 생성자가 호출됩니다
  2. Car 생성자 안에서 setName("Spark")이 호출됩니다
  3. setName()은 부모(Vehicle)의 일반 메서드이므로, name = "Spark"이 저장됩니다
변수참조 타입실제 객체name 값
objVehicleCar"Spark"

3단계: getName() 호출 분석

java
코드 하이라이팅 중...

핵심 질문: 매개변수가 없는 getName()은 어느 클래스의 메서드인가?

  • Car에 getName()(매개변수 없음)이 있는가? 없습니다
  • Car에는 getName(String val)getName(byte val[])만 있습니다
  • 따라서 부모 클래스 Vehicle의 getName()이 실행됩니다
java
코드 하이라이팅 중...

4단계: 최종 결과

text
코드 하이라이팅 중...

실행 순서 추적

순서코드설명
1new Car("Spark")Car 생성자 호출
2setName("Spark")부모의 setName() 실행, name = "Spark"
3obj.getName()매개변수 없는 getName() 호출
4Vehicle의 getName() 실행Car에 없으므로 부모의 메서드 실행
5"Vehicle name:" + "Spark"결과: "Vehicle name:Spark"

문제 풀이 전략

풀이 순서

  1. 추상 메서드 찾기: abstract 키워드가 붙은 메서드 확인
  2. 일반 메서드 찾기: 본문이 있는 메서드 확인
  3. 자식 클래스 확인: 어떤 메서드를 구현(오버라이딩)했는지 확인
  4. 호출 분석: 매개변수 타입과 개수를 보고 어떤 메서드가 호출되는지 판단

자주 하는 실수

실수올바른 이해
getName()과 getName(String)을 같은 메서드로 봄매개변수가 다르면 다른 메서드 (오버로딩)
추상 클래스의 일반 메서드도 반드시 오버라이딩해야 한다고 생각일반 메서드는 오버라이딩하지 않으면 부모 것 사용
Vehicle obj면 Vehicle 메서드만 호출된다고 생각오버라이딩된 메서드는 실제 객체(Car) 기준으로 호출

추상 클래스를 활용한 디자인 패턴

추상 클래스는 디자인 패턴에서도 자주 활용됩니다. 대표적으로 추상 팩토리(Abstract Factory) 패턴이 있습니다. 추상 팩토리 패턴은 추상 클래스가 API(인터페이스 역할)를 제공하고, 구체 클래스가 실제 객체 생성을 담당하는 구조입니다.

추상 클래스는 Java 언어 문법이고, 추상 팩토리는 추상 클래스를 활용한 설계 패턴입니다. 시험에서는 별개 주제로 출제됩니다.


정보처리기사 실기 기출 문제


Footnotes

  1. Java 8부터 인터페이스에도 default 키워드를 붙인 일반 메서드를 선언할 수 있습니다. 하지만 정보처리기사 시험에서는 "인터페이스 = 추상 메서드만"으로 이해하면 문제 풀기에 충분합니다.