이 글은 2026년 2월 10일에 작성된 글입니다.
Interface
클래스 구현을 위한 기능정의 & 규약.
클래스가 구현해야 하는 메서드를 강제함으로써, 구현된 객체들의 동일한 기능을 보장한다.
- 인터페이스는 상수 필드, 추상 메서드, default 메서드, static 메서드, private 메서드로 구성된다. (생성자는 없다).
- 인터페이스의 변수는 컴파일 과정에서
public static final키워드가 붙어 상수로 자동 변환된다. - 인터페이스의 메서드는
public abstract를 명시하지 않아도 컴파일 과정에서 추상 메서드로 자동 변환된다.
// 인터페이스
public interface MemberService {
// 상수. public static final 생략 가능
double PI = 3.14;
// 추상 메서드. public abstract 생략 가능
void regist();
void unregist();
void updateMyInfo();
}
// 구현 클래스
public class MemberServiceImpl implements MemberService {
// 추상 메서드 구현
public void regist(){};
public void unregist(){};
public void updateMyInfo(){};
}
- 인터페이스는 그 자체로 인스턴스를 생성할 수 없다.
- 인터페이스를 구현하는 클래스는 반드시 인터페이스의 추상 메서드들을 구현해야 한다.
- 한 클래스는 여러 인터페이스를 구현할 수 있다. (다중 구현)
- 한 인터페이스는 여러 인터페이스를 상속받을 수 있다. (다중 상속)
추상 클래스랑 뭐가 다른가?
인터페이스는 하위 클래스가 상위 클래스의 추상 메서드를 구현해야 하는 책임을 갖는 추상 클래스의 특징과 비슷하다. 사실 이 둘이 큰 차이가 없는 건 맞지만 그래도 분명한 차이가 있다.
- 나를 구현하는 애들은 내가 정의한 추상 메서드들을 무조건 구현해야 돼 👉 강제성 (이건 공통점)
- 상속처럼 너무 밀접한 관계가 되기는 싫어 👉 느슨한 관계
- 하나의 클래스에 여러 역할(기능 규약)을 부여하고 싶어 👉 다중 구현 가능
⇒ 기능 구현의 강제성은 살리고 싶고, 관계는 느슨하게 하고 싶어서 만든 게 인터페이스 (다중 구현도 가능)
디폴트 메서드
인터페이스에서 구현 코드까지 작성한 메서드.
default void method(){
// 구현
}
원래 인터페이스는 구현된 메서드를 작성하면 오류가 나지만 default 예약어를 쓰면 구현된 메서드를 작성할 수 있다.
디폴트 메서드는 이후 인터페이스를 구현할 클래스가 사용할 기본 기능이 된다.
static 메서드
static void method(){
// 구현
}
인터페이스에서는 static 예약어를 사용하여 정적 메서드를 추가할 수 있다.
인터페이스 이름으로 직접 참조하여 정적 메서드를 호출할 수 있다.
❕느낀점
어제 추상 메서드를 배우면서 그럼 인터페이스랑은 뭐가 다른거지? 하는 의문이 있었는데 오늘 인터페이스를 자세히 배우며 차이점에 대해 확실히 정리가 되었다. 그리고 추상 메서드보다 중요한 것이 인터페이스라고 배웠으니 인터페이스를 잘 활용할 수 있게 공부해야겠다고 생각했다.
'Java' 카테고리의 다른 글
| [TIL-260212] 자바 기초: 내부 클래스, 스레드, 람다, 스트림 (0) | 2026.02.17 |
|---|---|
| [TIL-260211] 자바 기초: 예외처리와 제네릭, 컬렉션 프레임워크 (0) | 2026.02.17 |
| [TIL-260209] 자바 기초: static, 상속, 추상 클래스 (0) | 2026.02.17 |
| [TIL-260206] 자바 기초: 메소드와 생성자 (0) | 2026.02.17 |
| [TIL 260205] 자바 기초: 배열과 ArrayList, Map, 그리고 클래스 (0) | 2026.02.17 |