안녕하세요.
오늘은 자바의 인터페이스(Interface)에 대해 알아보겠습니다.
또한 인터페이스와 추상 클래스의 차이점에 대해서도 알아보겠습니다.
[ 목차 ]
인터페이스란?
인터페이스는, 클래스가 반드시 구현해야하는 메서드들의 집합입니다.
메서드의 선언만 포함합니다. (구현은 포함하지 않습니다.)
인터페이스의 특징
인터페이스 내의 메서드는 public 과 abstract로 선언됩니다.
java 8부터는 default(인터페이스내 기본 구현 가능)와 static 메서드를 구현할 수 있습니다.
클래스는 인터페이스 다중상속이 가능합니다.
인터페이스 내 변수(필드)를 가질 수 있습니다. 필드는 public static final로 고정됩니다.
추상 클래스
일부 메서드는 구현할 수 있습니다.
하지만 인스턴스는 만들 수 없습니다.(= 필드를 가질 수 없습니다.)
단일 상속만 지원합니다.
인터페이스와 추상 클래스: 개념과 차이점
인터페이스와 추상 클래스는 둘 다 객체 지향 프로그래밍에서 상속과 다형성을 활용해 코드의 재사용성과 확장성을 높이기 위해 사용됩니다. 하지만, 각각의 목적과 특징에서 중요한 차이가 있습니다.
1. 인터페이스 (Interface)
정의
- 인터페이스는 클래스가 반드시 구현해야 하는 메서드의 청사진을 정의합니다.
- 메서드와 필드를 포함할 수 있지만, 메서드는 기본적으로 추상 메서드이며, 필드는 public static final로 자동 설정됩니다.
특징
- 메서드는 기본적으로 구현되지 않으며, 클래스에서 반드시 구현해야 합니다. (Java 8 이상부터는 default와 static 메서드로 구현 가능)
- 다중 상속이 가능합니다. 하나의 클래스는 여러 인터페이스를 구현할 수 있습니다.
- 인터페이스의 모든 메서드는 기본적으로 public입니다.
- 상태(필드)를 가질 수 없고, 오직 상수만 정의할 수 있습니다.
예제
java
코드 복사
public interface Animal { void eat(); // 추상 메서드 void sleep(); }
java
코드 복사
public class Dog implements Animal { @Override public void eat() { System.out.println("Dog eats bones."); } @Override public void sleep() { System.out.println("Dog sleeps in a kennel."); } }
2. 추상 클래스 (Abstract Class)
정의
- 추상 클래스는 일부 메서드의 구현을 포함하거나, 포함하지 않을 수 있는 클래스입니다.
- 주로 **공통된 동작(메서드)**과 **특성(필드)**을 공유할 때 사용됩니다.
특징
- 추상 메서드를 가질 수 있으며, 구현된 메서드도 포함할 수 있습니다.
- 상속을 통해서만 사용됩니다. (직접 인스턴스를 생성할 수 없음)
- 단일 상속만 가능합니다. 한 클래스는 오직 하나의 추상 클래스만 상속받을 수 있습니다.
- 일반 필드를 포함할 수 있습니다.
예제
java
코드 복사
public abstract class Animal { private String name; public Animal(String name) { this.name = name; } public String getName() { return name; } public abstract void makeSound(); // 추상 메서드 }
java
코드 복사
public class Dog extends Animal { public Dog(String name) { super(name); } @Override public void makeSound() { System.out.println("Bark!"); } }
3. 인터페이스와 추상 클래스의 주요 차이점
특징인터페이스추상 클래스| 목적 | 행동(메서드) 정의 | 공통된 동작과 상태(필드)를 정의 |
| 상속 관계 | 다중 구현 가능 | 단일 상속만 가능 |
| 메서드 구현 | 기본적으로 구현 불가 (default, static 예외) | 구현 가능 |
| 필드 | 상수만 포함 (자동으로 public static final) | 일반 필드 포함 가능 |
| 생성자 | 생성자 없음 | 생성자 포함 가능 |
| 사용 시점 | 서로 다른 클래스들이 동일한 동작을 구현해야 할 때 | 클래스 간에 공통된 동작과 상태를 공유해야 할 때 |
'JAVA' 카테고리의 다른 글
| [JAVA] 자바의 Map, 그리고 순회 (0) | 2024.12.10 |
|---|---|
| [JAVA] Stack (0) | 2024.12.07 |
| [JAVA] Deque + 왜 LinkedList보다 ArrayDeque로 구현하는 것이 더 좋을까? (0) | 2024.12.06 |
| [Java] Queue (0) | 2024.12.05 |