[TIL 26/02/10](Java) 인터페이스
2026. 2. 10. 23:55

 

 

 

인터페이스

 

 

인터페이스란?

  • 클래스들이 동일한 역할을 수행하기 위해 필수로 구현해야 할 메서드를 정의한 규약
  • 이를 통해 다형성과 확장성을 확보 가능

 

예를 들어 여러 종류의 로봇을 만든다고 할 때 각 로봇마다 처음부터 다른 방식으로 제작하는 것보다는 공통적으로 구현해야 하는 기능은 미리 정해놓고 각 로봇은 그 기능을 자신만의 방식으로 구현하는 것이 효율적일 것이다.

이러한 기능의 약속을 정의한 것이 인터페이스다.

 

 

인터페이스 규칙

 

  • 인터페이스에서 선언 가능한 것
    • 추상 메서드
    • 상수 (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 인터페이스를 기준으로 코드를 작성하면 새로운 로봇이 추가되더라도 기존 코드를 수정할 필요 없이 구현체만 추가하면 된다.

 

이는 다형성과 확장성을  활용한 설계 방식이라고 볼 수 있다.

 

 

 

 

느낀점

 

인터페이스에 대해 학습하여 간단하게 정리해보면서 인터페이스의 정의, 규칙과 같은 부분들을 정리하며 되새김질 할 수 있게 되었다.

 

자바를 학습하며 점점 객체 지향 설계를 위한 객체들 간의 관계나 연결 방식, 그 안에서 발견할 수 있는 여러가지 특징들과 규칙들을 학습하면서 객체 지향의 아름다움을 느끼고 자바에 빠져들고 있는 것 같다 ㅎㅎ