반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- javascript
- HashMap
- 테스트자동화
- 자바스크립트
- input
- junit
- 자바
- vscode
- list
- 이클립스
- Visual Studio Code
- junit5
- json
- 문자열
- string
- Array
- 단위테스트
- 자바문법
- 배열
- js
- IntelliJ
- Eclipse
- 인텔리제이
- 정규식
- ArrayList
- java테스트
- CSS
- Java
- html
- math
Archives
- Today
- Total
어제 오늘 내일
[Java] 추상 클래스와 인터페이스 차이 본문
Java에서 추상 클래스(abstract class)와 인터페이스(interface)는 모두 "규칙을 정의하고 자식 클래스가 구현하도록 만드는 기능"을 하지만, 목적과 사용 방식, 설계 개념에서는 분명한 차이가 있습니다.
이 글에서는 두 개념의 차이를 명확히 이해할 수 있도록 구조와 예제를 중심으로 정리합니다.
1. 공통점
추상 클래스와 인터페이스 모두:
- 객체 생성 불가
- 미완성 메서드(추상 메서드)를 포함할 수 있음
- 자식 클래스가 반드시 구현해야 하는 기능을 정의
- 다형성을 지원
하지만, 실제 설계 시 선택 기준은 둘의 차이점에서 결정됩니다.
2. 추상 클래스란?
abstract 키워드로 선언하며, 상속을 통해 공통 기능 + 확장 가능한 구조를 제공하는 클래스입니다.
특징
- 일반 메서드 + 추상 메서드 모두 포함 가능
- 객체 생성 불가
- 단일 상속만 허용
- 상태(필드)와 공통 로직을 가질 수 있음
예:
abstract class Animal {
String name;
void eat() {
System.out.println("먹습니다");
}
abstract void sound();
}
3. 인터페이스란?
인터페이스는 클래스가 반드시 구현해야 하는 기능의 규칙을 정의하는 용도입니다.
특징
- 모든 메서드는 기본적으로 추상 (Java 8+: default, static 메서드 허용)
- 다중 구현 가능
- 상태(필드)를 가질 수 없음(상수만 가능)
- 강한 규칙 제시 역할
예:
interface Animal {
void sound(); // 추상 메서드
}
4. 추상 클래스와 인터페이스의 주요 차이
비교 항목 추상 클래스 인터페이스
| 비교 항목 | 추상 클래스 | 인터페이스 |
| 키워드 | abstract class | interface |
| 상속/구현 | 단일 상속만 가능 | 다중 구현 가능 |
| 메서드 | 일반 + 추상 메서드 포함 가능 | 기본적으로 추상, default·static 지원 |
| 필드 | 인스턴스 변수 선언 가능 | 상수(public static final)만 가능 |
| 생성자 | 있음(직접 호출 불가) | 없음 |
| 목적 | 공통된 속성과 기능을 가진 “상위 클래스” 제공 | 구현해야 할 기능의 “규칙” 제공 |
| 사용 상황 | 공통 로직이 필요한 경우 | 서로 다른 클래스에 동일 규칙을 적용할 경우 |
5. 예제로 비교 이해하기
5-1. 추상 클래스 예
abstract class Animal {
String name;
void sleep() {
System.out.println("잠을 잡니다");
}
abstract void sound();
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
설명
- 공통 기능(sleep)은 부모가 제공
- 구현해야 하는 기능(sound)은 자식이 처리
5-2. 인터페이스 예
interface Soundable {
void sound();
}
class Cat implements Soundable {
@Override
public void sound() {
System.out.println("야옹");
}
}
설명
- Cat은 Soundable이 요구하는 기능(sound)을 반드시 구현
- Cat 클래스는 다른 여러 인터페이스도 동시에 구현 가능
6. 둘 중 무엇을 선택할까?
✔ 추상 클래스를 사용할 때
- 공통 로직을 여러 자식이 공유해야 할 때
- 공통된 상태(필드)가 필요할 때
- 상속 구조를 명확하게 설계하고 싶을 때
✔ 인터페이스를 사용할 때
- 서로 다른 클래스에 동일한 기능을 강제하고 싶을 때
- 자유로운 구조가 필요할 때 (다중 구현 가능)
- 메서드 규칙만 제시하면 충분할 때
7. 정리
- 추상 클래스는 공통 기능을 가진 상위 클래스 역할
- 인터페이스는 기능의 규칙을 정의하는 설계 문서 역할
- 추상 클래스는 단일 상속, 인터페이스는 다중 구현 가능
- 목적과 구조가 다르므로 상황에 따라 적절하게 선택해야 함
반응형
'IT > Java' 카테고리의 다른 글
| [Java] static 변수와 static 메서드 차이 (0) | 2025.12.25 |
|---|---|
| [Java] final 키워드 (변수, 메서드, 클래스) (0) | 2025.12.25 |
| [Java] 추상클래스란? (abstract class) (0) | 2025.12.24 |
| [Java] 인터페이스(interface) 사용법 및 예제 (0) | 2025.12.23 |
| [Java] 객체 타입 확인 (instanceof) (0) | 2025.12.23 |
Comments
