인터페이스는 객체에 대한 명세이다. (어떤 메소드를 제공할건지, 어떤 역할은 하는 객체인지에 대한 설명서라고 본다.)
인터페이스의 요소
- 추상메서드: 모든 메서드는 추상메서드이다.
- 상수: 선언된 모든 변수는 상수로 처리 됨
- 디폴트 메서드: 기본 구현을 가지는 메서드(재정의 가능)
- 정적 메서드: 인스턴스 생성과 상관없이 인터페이스 타입으로 호출하는 메서드
- private메서드: 인터페이스 내에서 사용하기 위해 구현한 메서드(재정의 x)
인터페이스 선언과 구현
public interface Calc {
double PI = 3.14;
int ERROR = -99999999; //인터페이스에서 선언한 변수는 컴파일 과정에서 상수로 변환된다.(public static final)
int add(int a, int b); //인터페이스에서 선언한 메서드는 컴파일 과정에서 추상메서드로 변환된다.
int sub(int a, int b);
int mul(int a, int b);
}
인터페이스를 구현한 클래스는 인터페이스 타입으로 변수를 선언하여 인스턴스를 생성할 수 있다.
인터페이스의 역할은?
인터페이스는 클라이언트 프로그램에 어떤 메서드를 제공하는지 알라주는 명세(specification) 또는 약속이다.
한 객체가 어떤 인터페이스의 타입이라 함은 그 인터페이스의 메서드를 구현했다는 의미이다.
클라이언트 프로그램은 실제 구현내용을 몰라도 인터페이스의 정의만 알면 그 객체를 사용할 수 있다.
인터페이스 다형성 구현하기 예문
고객 센터에는 전화 상담을 하는 상담원들이 있다. 일단 고객 센터로 전화오면 대기열에 저장된다. 상담원이 지정되기 전까지 대기상태가 됩니다. 각 전화가 상담원에게 배분되는 정책은 다음과 같이 여러 방식으로 구현될 수 있다.
- 상담원 순서대로 배분하기
- 대기가 짧은 상담원 먼저 배분하기
- 우선순위가 높은 상담원에게 먼저 배분하기
위와 같은 다양한 정책이 사용되는 경우 인터페이스를 정의하고 다양한 정책을 구현하시오
추상클래스와 인터페이스의 차이?
추상 클래스와 인터페이스는 둘 다 인스턴스가 생성되지 않고, 이 둘은 언뜻 보면 비슷한 기능을 하는 관계로 보여 차이에 대해 명확히 정리해두자.
추상 클래스는 클래스내 추상 메소드가 하나 이상 포함되거나 포함되지 않더라도 abstract로 정의된 경우를 말한다.
반면 인터페이스는 모든 메소드가 추상메소드이다.
어차피 추상클래스가 있는데 뭐하러 인터페이스가 존재하나?
추상 클래스는 자식 클래스가 상속을 받아 기능을 이용하고 확장시키는데 그 목적이 있다. 반면 인터페이스는 함수의 구현을 강제하기 위해 모든 메소드가 추상메소드이다. 인터페이스의 목적은 구현하는 객체가 같은 동작을 한다는 것을 보장하기 위함에 있다.(명세)
참고: https://myjamong.tistory.com/150
여러 인터페이스 구현
인터페이스는 구현 코드가 없기때문에 하나의 클래스가 여러 인터페이스를 구현할 수 있다.
인터페이스 상속
인터페이스 간에도 상속이 가능하다. 구현 내용이 없으므로 타입 상속이라고 한다.
'공부 > 자바 (Java)' 카테고리의 다른 글
[Java] Lombok(롬복)이란? Lombok설치 (0) | 2021.12.30 |
---|---|
[Java] Object 클래스 & Class 클래스 - toString(), equals(), hashCode(), clone(), forName() (0) | 2021.12.29 |
[Java] 추상 클래스, 템플릿 메서드 패턴 -final 예약어 (0) | 2021.12.21 |
[Java] 상속(Inheritance), 메서드 오버라이딩, 다형성, 다운캐스팅, 업캐스팅 (0) | 2021.12.21 |
[Java] 싱글톤 패턴 (Singleton Pattern) -static (0) | 2021.12.08 |
댓글