Chapter 11. 인터페이스
학습목표
객체의 사용 방법을 정의하는 인터페이스와 다형성 구현 방법을 학습합니다.
목차
8.1 인터페이스의 역할
인터페이스Interface는 사전적인 의미로 두 장치를 연결하는 접속기를 말한다. 여기서 두 장치를 서로 다른 객체로 본다면, 인터페이스는 이 두 객체를 연결하는 역할을 한다. 다음 그림과 같이 객체 A는 인터페이스를 통해 객체 B를 사용할 수 있다. graph LR…
8.2 인터페이스와 구현 클래스 선언
인터페이스는 .java 형태의 소스 파일로 작성되고 .class 형태로 컴파일되기 때문에 물리적 형태는 클래스와 동일하다. 단, 소스를 작성할 때 선언하는 방법과 구성 멤버가 클래스와 다르다. 인터페이스 선언은 class 키워드 대신 interface 키워드를 사용한다…
8.3 상수 필드
인터페이스는 public static final 특성을 갖는 불변의 상수 필드를 멤버로 가질 수 있다. public static final 타입 상수명 = 값; 인터페이스에 선언된 필드는 모두 public static final 특성을 갖기 때문에 public stat…
8.4 추상 메소드
인터페이스는 구현 클래스가 재정의해야 하는 public 추상 메소드abstract method를 멤버로 가질 수 있다. 추상 메소드는 리턴 타입, 메소드명, 매개변수만 기술되고 중괄호 {}를 붙이지 않는 메소드를 말한다. public abstract를 생략하더라도 컴파…
8.5 디폴트 메소드
인터페이스에는 완전한 실행 코드를 가진 디폴트 메소드를 선언할 수 있다. 추상 메소드는 실행부중괄호가 없지만, 디폴트 메소드는 실행부가 있다. 선언 방법은 클래스 메소드와 동일한데, 차이점은 default 키워드가 리턴 타입 앞에 붙는다. public default 리…
8.6 정적 메소드
인터페이스에는 정적 메소드도 선언이 가능하다. 추상 메소드와 디폴트 메소드는 구현 객체가 필요하지만, 정적 메소드는 구현 객체가 없어도 인터페이스만으로 호출할 수 있다. 선언 방법은 클래스 정적 메소드와 완전 동일하다. 단, public을 생략하더라도 자동으로 컴파일…
8.7 private 메소드
인터페이스의 상수 필드, 추상 메소드, 디폴트 메소드, 정적 메소드는 모두 public 접근 제한을 갖는다. 이 멤버들을 선언할 때에는 public을 생략하더라도 컴파일 과정에서 public 접근 제한자가 붙어 항상 외부에서 접근이 가능하다. 또한 인터페이스에 외부에서…
8.8 다중 인터페이스 구현
| 구현 객체는 여러 개의 인터페이스를 implements할 수 있다. 구현 객체가 인터페이스 A와 인터페이스 B를 구현하고 있다면, 각각의 인터페이스를 통해 구현 객체를 사용할 수 있다. graph LR A인터페이스 A –> | 메소드 A 호출 | C구현 객체 B인터페이스… |
8.9 인터페이스 상속
인터페이스도 다른 인터페이스를 상속할 수 있으며, 클래스와는 달리 다중 상속을 허용한다. 다음과 같이 extends 키워드 뒤에 상속할 인터페이스들을 나열하면 된다. public interface 자식인터페이스 extends 부모인터페이스1, 부모인터페이스2 { ……
8.10 타입 변환
인터페이스의 타입 변환은 인터페이스와 구현 클래스 간에 발생한다. 인터페이스 변수에 구현 객체를 대입하면 구현 객체는 인터페이스 타입으로 자동 타입 변환된다. 반대로 인터페이스 타입을 구현 클래스 타입으로 변환시킬 수 있는데, 이때는 강제 타입 변환이 필요하다. 자동…
8.11 다형성
우리는 7장 상속에서 다형성에 대해 살펴보았다. 인터페이스 또한 다형성을 구현하는 주된 기술로 사용된다. 현업에서는 상속보다는 인터페이스를 통해서 다형성을 구현하는 경우가 더 많다. 다형성Polymorphism이란 사용 방법은 동일하지만 다양한 결과가 나오는 성질을 말…
8.12 객체 타입 확인
우리는 상속에서 객체 타입을 확인하기 위해 instanceof 연산자를 사용했는데, 인터페이스에서도 사용할 수 있다. 예를 들어 Vehicle 인터페이스 변수에 대입된 객체가 Bus인지 확인하는 코드는 다음과 같다. if vehicle instanceof Bus { /…
8.13 봉인된 인터페이스
Java 15부터는 무분별한 자식 인터페이스 생성을 방지하기 위해 봉인된sealed 인터페이스를 사용할 수 있다. InterfaceA의 자식 인터페이스는 InterfaceB만 가능하고, 그 이외는 자식 인터페이스가 될 수 없도록 다음과 같이 InterfaceA를 봉인된…