인터페이스
인터페이스란?
- 클래스들이 동일한 역할을 수행하기 위해 필수로 구현해야 할 메서드를 정의한 규약
- 이를 통해 다형성과 확장성을 확보 가능
예를 들어 여러 종류의 로봇을 만든다고 할 때 각 로봇마다 처음부터 다른 방식으로 제작하는 것보다는 공통적으로 구현해야 하는 기능은 미리 정해놓고 각 로봇은 그 기능을 자신만의 방식으로 구현하는 것이 효율적일 것이다.
이러한 기능의 약속을 정의한 것이 인터페이스다.
인터페이스 규칙
- 인터페이스에서 선언 가능한 것
- 추상 메서드
- 상수 (public static final)
- default 메서드
- static 메서드
- 인터페이스에서 선언할 수 없는 것
- 인스턴스 변수
- 생성자 사용 불가
- 인터페이스만으로는 객체를 생성할 수 없기 때문에 생성자를 사용할 수 없다.
- 메서드 오버라이딩 필수
- 자식클래스는 부모 인터페이스의 추상 메서드를 모두 오버라이딩 해야 한다.
- 다중 상속 가능
- 인터페이스는 구현을 강제하지 않는 규약이기 때문에 클래스의 다중 상속에서 발생하는 메서드 충돌 문제를 피할 수 있다.
이러한 규칙들을 통해 객체들 간의 네이밍을 통일할 수 있고 코드의 가독성과 유지보수가 향상된다.
즉, 확장에는 열려 있고 변경에는 닫혀 있는 개방-폐쇄 원칙(객체 지향 설계 원칙)에 따른 설계를 가능하게 한다.
그렇다면 인터페이스는 언제 사용하는 것이 좋을까?
=> 여러 구현체가 동일한 역할을 수행해야 하거나 구현이 변경될 가능성이 있는 경우에 사용하는 것이 적절하다
코드로 예를 들어보면
//로봇 인터페이스 예제
//로봇 인터페이스
public interface Robot {
void move();
}
//청소 로봇 클래스 구현
public class CleaningRobot implements Robot {
@Override
public void move() {
System.out.println("청소합니다.");
}
}
//일 로봇 클래스 구현
public class WorkRobot implements Robot {
@Override
public void move() {
System.out.println("업무를 수행합니다.");
}
}
Robot 인터페이스에서 정의해놓은 move() 라는 추상메서드를 각 로봇 클래스가 구현한 것을 볼 수 있다.
이처럼 Robot 인터페이스를 기준으로 코드를 작성하면 새로운 로봇이 추가되더라도 기존 코드를 수정할 필요 없이 구현체만 추가하면 된다.
이는 다형성과 확장성을 활용한 설계 방식이라고 볼 수 있다.
느낀점
인터페이스에 대해 학습하여 간단하게 정리해보면서 인터페이스의 정의, 규칙과 같은 부분들을 정리하며 되새김질 할 수 있게 되었다.
자바를 학습하며 점점 객체 지향 설계를 위한 객체들 간의 관계나 연결 방식, 그 안에서 발견할 수 있는 여러가지 특징들과 규칙들을 학습하면서 객체 지향의 아름다움을 느끼고 자바에 빠져들고 있는 것 같다 ㅎㅎ
'AIBE5 TIL' 카테고리의 다른 글
| [TIL 26/02/12](Java) Stream (0) | 2026.02.12 |
|---|---|
| [TIL 26/02/11](Java) hashCode(), equals() 오버라이딩 (0) | 2026.02.11 |
| [TIL 26/02/09](Java) 상속 (0) | 2026.02.09 |
| [TIL 26/02/06](Java) 접근제어자와 캡슐화 (0) | 2026.02.06 |
| [TIL 26/02/05](Java) 배열(Array)과 Wrapper Class (0) | 2026.02.05 |