자바 Java
6. 인터페이스와 추상 클래스의 차이
안녕하세요! 태마입니다.
Java 기초 강좌입니다.
강좌의 경우
1. 주제 간단 정리
2. 상세 주제 정리
으로 이루어져 있습니다.
자바 Java
포스팅 시작하겠습니다 :)
1. 주제 간단 정리
1. 추상 클래스(Abstract Class)란?
추상 클래스는 완전히 구현되지 않은 메서드를 포함할 수 있는 클래스입니다.
✔ 상속을 통해 구체적인 구현을 제공해야 합니다.
✔ 추상 클래스는 일반 메서드와 추상 메서드를 모두 가질 수 있으며, abstract 키워드로 선언됩니다.
✔ 직접 객체를 생성할 수 없으며, 자식 클래스에서 상속받아 사용합니다.
✅ 추상 클래스 선언 예제
abstract class Animal {
String name;
// 일반 메서드
public void eat() {
System.out.println(name + "가 음식을 먹습니다.");
}
// 추상 메서드 (구현이 없음)
public abstract void makeSound();
}
class Dog extends Animal {
public Dog(String name) {
this.name = name;
}
// 추상 메서드 구현
@Override
public void makeSound() {
System.out.println(name + "가 멍멍 소리를 냅니다.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("바둑이");
dog.eat(); // "바둑이가 음식을 먹습니다."
dog.makeSound(); // "바둑이가 멍멍 소리를 냅니다."
}
}
📌 추상 클래스의 특징
✔ abstract 키워드를 사용하여 추상 클래스를 정의
✔ 일부 메서드는 구현하고 일부는 추상 메서드로 남겨둘 수 있음
✔ 객체를 직접 생성할 수 없으며, 반드시 하위 클래스에서 구현해야 함
2. 인터페이스(Interface)란?
인터페이스는 클래스가 구현해야 하는 메서드들의 선언만 포함된 설계도입니다.
✔ **모든 메서드는 자동으로 abstract**로 간주되고 구현은 자식 클래스가 제공합니다.
✔ 다중 상속이 가능하여 여러 개의 인터페이스를 구현할 수 있습니다.
✅ 인터페이스 선언 예제
interface Animal {
void makeSound(); // 추상 메서드
}
class Dog implements Animal {
public void makeSound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // "멍멍!" 출력
}
}
📌 인터페이스의 특징
✔ 모든 메서드는 기본적으로 추상 메서드
✔ 다중 상속이 가능 → 여러 개의 인터페이스를 동시에 구현할 수 있음
✔ 구현체는 반드시 implements 키워드를 사용하여 인터페이스를 구현해야 함
3. 추상 클래스 vs 인터페이스
비교 항목추상 클래스(Abstract Class)인터페이스(Interface)
상속 방식 | extends 키워드 사용 | implements 키워드 사용 |
다중 상속 가능 여부 | ❌ 단일 상속만 가능 | ✅ 다중 구현 가능 |
메서드 구성 | 일반 메서드 + 추상 메서드 포함 가능 | 모든 메서드가 추상 메서드 |
변수 선언 | private/protected/public 가능 | public static final (자동 적용) |
사용 목적 | 공통된 기능을 포함하면서 확장 | 여러 클래스가 공통 기능을 구현하도록 강제 |
📌 한 마디로 정리하면?
✔ 추상 클래스 → "기본적인 기능을 제공하면서 추가적인 기능을 확장 가능하게 하고 싶을 때"
✔ 인터페이스 → "여러 클래스에서 같은 동작을 강제하고 싶을 때"
2. 상세 주제 정리
1. 추상 클래스 활용 예제
추상 클래스는 상속을 통해 공통된 기능을 제공하고, 구체적인 동작은 자식 클래스에서 구현하도록 합니다.
✅ 추상 클래스 활용 예제 (동물 클래스)
abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
// 일반 메서드
public void eat() {
System.out.println(name + "가 음식을 먹습니다.");
}
// 추상 메서드
public abstract void makeSound();
}
class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void makeSound() {
System.out.println(name + "가 멍멍 소리를 냅니다.");
}
}
class Cat extends Animal {
public Cat(String name) {
super(name);
}
public void makeSound() {
System.out.println(name + "가 야옹 소리를 냅니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog("바둑이");
dog.eat(); // "바둑이가 음식을 먹습니다."
dog.makeSound(); // "바둑이가 멍멍 소리를 냅니다."
Animal cat = new Cat("냥이");
cat.eat(); // "냥이가 음식을 먹습니다."
cat.makeSound(); // "냥이가 야옹 소리를 냅니다."
}
}
📌 추상 클래스는 공통된 기능을 제공하고, 자식 클래스에서 구체적인 동작을 정의할 수 있도록 함!
2. 인터페이스 활용 예제
인터페이스는 여러 클래스에 동일한 기능을 강제하고 싶을 때 사용합니다. 다중 구현이 가능합니다.
✅ 인터페이스 활용 예제 (동물 인터페이스)
interface Animal {
void makeSound(); // 추상 메서드
}
interface Swimmer {
void swim(); // 추상 메서드
}
class Dog implements Animal {
public void makeSound() {
System.out.println("멍멍!");
}
}
class Fish implements Animal, Swimmer {
public void makeSound() {
System.out.println("블르블르!");
}
public void swim() {
System.out.println("물속을 헤엄칩니다.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // "멍멍!"
Fish fish = new Fish();
fish.makeSound(); // "블르블르!"
fish.swim(); // "물속을 헤엄칩니다."
}
}
📌 인터페이스는 다중 상속이 가능하여, 여러 클래스를 동시에 구현할 수 있음!
✅ 지금까지 인터페이스와 추상 클래스의 차이와 활용 방법을 배웠어요!
👉 "이제 컬렉션 프레임워크(List, Set, Map)에 대해 배우고 싶다면?"
✅ 다음 회차에서 컬렉션 프레임워크의 개념과 활용을 다뤄봅시다!
'IT Developer > Java' 카테고리의 다른 글
Java 기초 <10. Java 입출력 스트림 (I/O) 기본과 활용> (1) | 2025.03.11 |
---|---|
Java 기초 <9. 멀티스레딩과 동시성 프로그래밍> (1) | 2025.03.10 |
Java 기초 <8. 예외 처리와 사용자 정의 예외> (0) | 2025.03.09 |
Java 기초 <7. 컬렉션 프레임워크 (List, Set, Map) 활용 및 성능 비교> (2) | 2025.03.08 |
Java 기초 <5. 객체지향 4대 원칙 (캡슐화, 상속, 다형성, 추상화)> (0) | 2025.03.06 |
Java 기초 <4. 메서드, 생성자, 접근제어자 정리> (1) | 2025.03.05 |
Java 기초 <3. Java 기본 문법과 자료형> (1) | 2025.03.04 |
Java 기초 <2. JDK, JRE, JVM 차이 및 Java 개발 환경 구축> (0) | 2025.03.03 |