-
인터페이스(Interface)JAVA 2023. 3. 2. 21:00
- 인터페이스와 추상 클래스는 사용설명서로 비유할 수 있다.
- 인터페이스와 추상 클래스는 객체지향 프로그래밍의 특징 중 다형성과 깊게 관련되어 있다.
- 한 객체를 구성하는 구성 요소가 공통의 인터페이스로 구현되어 있다면 쉽게 교체가 가능하다. - 자동차 관점에서 자동차와 운전자 사이에서 정보를 주고 받을 수 있는 계기판을 인터페이스에 비유할 수 있다.
- 인터페이스로 연결된 두 객체는 서로 어떤 내용을 갖는지 몰라도 동작에 영향을 주지 않는다.
- class 대신 interface를 입력하면 인터페이스가 된다.
- 인터페이스도 컴파일되면 .class 파일로 생성된다.
인터페이스의 장점
- 객체의 교체가 쉽다.
- 사용 방법은 같아도 객체 별로 다양한 결과를 얻을 수 있다.(= 다형성)
인터페이스의 구성 요소(멤버)
public 상수 필드
- 인터페이스의 필드(= 변수)는 public static final 키워드를 생략해도 상수로 인식한다.
- 상수이기 때문에 관례 상 이름을 대문자와 "_"로 작성한다.
- 값도 같이 부여해준다.(= 상수)
- 대부분 구현 객체에서 사용한다.
public 추상 메소드
- 인터페이스 내부의 메소드는 실행부가 없는 추상 메소드
- abstract 키워드를 생략해도 추상 메소드로 인식한다.
public 디폴트 메소드
- JAVA 8부터 추가된 기능
- 실행부가 존재하는 완전한 메소드 선언 가능
- default 키워드를 추가하여 선언
- 인터페이스에 존재하지만 객체가 있어야 사용 가능하다.
- 모든 객체 가지는 기본 메소드.
- 인터페이스에 존재하지만 구현 객체에 소속된 메소드
- 구현 객체에서 재정의 가능(디폴트 메소드는 public이기 떄문에 재정의할 때도 public으로 선언해야하고, default 키워드는 생략 가능하다.)
- 주로 모든 실행 객체가 동일한 실행 내용을 가지고 있을 경우에 사용한다.
public 정적 메소드
- 인터페이스 소속의 메소드
private 메소드
- 인터페이스 내에서만 사용 가능한 메소드
- static 키워드 추가 시 구현 객체 생성하지 않고 사용 가능하다는 점이 다름
- 구현 클래스의 재정의 대상이 아님
- 각각의 디폴트 메소드에서 공통된 부분을 한 번에 작성하기 위해 사용
private 정적 메소드
- 구현 객체가 필요 없는 메소드
- 구현 클래스의 재정의 대상이 아님
인터페이스의 구현
- 인터페이스는 클래스와 달리 '상속'받는다고 하지 않고, '구현'한다고 말한다.
- 인터페이스를 '구현'할 때는 implements 키워드를 사용한다.
- 인터페이스가 가지고 있는 모든 추상 메소드를 재정의하여 실제 기능을 가지는 클래스를 구현 클래스라고 한다.
- 인터페이스를 구현하는 하위 클래스는 반드시 인터페이스에 정의된 추상 메소드를 하나도 빠짐없이 모두 오버라이딩(재정의)해야 한다.
- 인터페이스를 구현한 클래스에서 재정의하지 않은 인터페이스의 추상 메소드가 하나라도 존재한다면 해당 클래스는 추상 클래스가 되기 때문에 반드시 하위 클래스에서 재정의하지 않은 인터페이스 메소드를 오버라이딩해야 한다.
- 객체 중간에 인터페이스를 추가하면 의존성을 낮출 수 있다.
- 인터페이스도 참조 타입으로 변수 선언이 가능하며, 구현 클래스로 객체를 생성해야 한다.
interfaceName if = new className();
다중 인터페이스 구현
- 하나의 구현 클래스에서 여러 개의 인터페이스 구현 가능
- implements 키워드에 구현할 인터페이스 명을 ","로 나열하여 선언
인터페이스의 상속
- 인터페이스는 다중 상속을 허용
- 추상 메소드와 디폴트 메소드가 상속의 대상이 됨
타입 변환
- 구현 객체가 인터페이스로의 타입 변환을 말함
- 인터페이스로 구현된 객체를 다시 구현 객체의 타입으로 변환하는 경우
- 구현 객체 고유의 메소드를 사용하고자 할 때(인터페이스로 구현하면 해당 인터페이스의 메소드만 사용 가능하기 떄문) - 객체 타입 변환
- 강제 타입 변환 전에 instanceof로 객체의 타입을 확인해야 한다.
다형성
- 상속 이외에 인터페이스로도 다형성 구현 가능
- 구현 객체 타입 변환 가능
- 클래스의 필드와 메소드의 매개변수에도 인터페이스 타입을 선언할 수 있다.(= 구현 객체 대입)
봉인된 인터페이스(sealed interface)
- JAVA 15부터 사용 가능
- 지정된 인터페이스만 상속하도록 제한하는 것
- 봉인된 인터페이스 선언
public sealed interface InterfaceA permits InterfaceB { ... }- 인터페이스 봉인 해제
public non-sealed interface InterfaceB extends InterfaceA { ... }'JAVA' 카테고리의 다른 글
싱글톤(Singleton) 패턴 (0) 2023.03.02 익명 클래스(Anonymous Class) (0) 2023.03.02 추상 클래스(abstract class) (0) 2023.03.02 다형성(Polymorphism) (0) 2023.03.02 final 키워드 (0) 2023.03.02