Java/혼공자

Chapter 08 인터페이스

yeooniyeoon 2023. 1. 18. 23:56
728x90
SMALL

08-1 인터페이스

개발 코드와 객체가 통신하는 접점 역할

코드가 인터페이스의 메소드 호출 시 -> 인터페이스는 객체의 메소드를 호출한다.

코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만 알면 된다.

 

인터페이스를 두는 이유는 인터페이스는 여러 객체들과 사용 가능하기 때문에 코드 변경 없이 실행 내용과 리턴값을 다양화 할 수 있다.

 

인터페이스 선언

인터페이스 선언은 class 대신 interface 키워드를 사용한다.

인터페이스명은 클래스명 작성 규칙과 동일하다.

[public] interface 인터페이스명 { ... }

인터페이스는 구성 멤버로 상수 필드와 추상 메소드만을 가진다.

인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다.

 

상수 필드 선언

인터페이스는 객체 사용 방법을 정의한 것이므르 인스턴스/정적 필드 선언이 불가하다.

하지만 상수 필드는 선언할 수 있다.

상수는 실행 시 데이터를 변경할 수 없다.

 

인터페이스 선언된 필드는 모두 public static final의 특성을 가진다.

=> 생략해도 컴파일 시 자동으로 붙음.

 

상수명은 대문자로 작성하며, 두 단어 이상으로 구성될 경우 언더바(_)로 연결한다.

 

추상 메소드 선언

인터페이스를 통해 호출된 메소드는 객체에서 실행된다.

따라서 인터페이스 메소드는 추상 메소드로 선언해야 한다.

 

인터페이스에 선언된 메소드는 모두 public abstract의 특성을 가진다.

=> 생략해도 컴파일 시 자동으로 붙음.

 

 

인터페이스 구현

개발 코드가 인터페이스 메소드를 호출하면 -> 인터페이스가 객체 메소드를 호출하므로

객체는 추상 메소드에 대한 실체 메소드가 있어야 한다.

이런 객체를 구현 객체, 구현 객체를 생성하는 클래스를 구현 클래스라 한다.

 

구현 클래스가 작성되면 new 연산자로 객체 생성이 가능하다.

인터페이스로 구현 객체를 사용하려면 인터페이스 변수를 선언한 후 변수에 구현 객체를 대입한다.

인터페이스는 참조타입이므로 변수에 구현 객체의 번지를 저장한다.

 

다중 인터페이스 구현 클래스

객체는 여러개의 인터페이스 타입으로 사용 가능하다.

다중 인터페이스를 구현하려면 구현 클래스는 모든 인터페이스의 추상 메소드에 대해 실체 메소드를 작성해야 한다.

 

 

08-2 타입 변환과 다형성

자동 타입 변환

구현 객체가 인터페이스 타입으로 변환되는 것은 자동 타입 변환에 해당한다.

인터페이스 구현 클래스를 상속하는 자식 클래스도 인터페이스 타입으로 자동 타입 변환이 가능하다.

 

 

강제 타입 변환

구현 객체가 인터페이스 타입으로 자동 타입 변환되면 인터페이스에 선언된 메소드만 사용할 수 있다.

자동 타입 변환된 구현 클래스에 선언된 필드/메소드를 사용해야 할 경우에는

구현 클래스 타입으로 강제 타입 변환하여 사용이 가능하다.

구현클래스 변수 = (구현클래스) 인터페이스 변수;

 

 

객체 타입 확인

인터페이스 타입으로 자동 타입 변환된 매개값을 다시 강제 타입 변환해야 할 경우에

상속과 마찬가지로 instanceof 연산자를 통해 매개값이 어떤 객체인지 확인 후

안전하게 강제 타입 변환을 해야한다.

if (vehicle instanceof Bus) {
	Bus bus = (Bus) vehicle;
}

 

 

인터페이스 상속

인터페이스 상속이 가능한데 클래스와는 달리 다중 상속이 가능하다.

public 인터페이스C extends 인터페이스A, 인터페이스B

 

하위 인터페이스를 구현하는 클래스는 상위 인터페이스의 추상 메소드에 대한 실체 메소드까지 모두 구현해야 한다.

-> 구현 클래스로 객체 생성 후 상위/하위 인터페이스 타입으로 변환 가능하다.

 

하위 인터페이스로 변환 시 상위 인터페이스에 선언된 메소드까지 사용 가능하지만,

상위 인터페이스로 변환 시 상위 인터페이스에 선언된 메소드만 사용 가능하다.

728x90
반응형
SMALL

'Java > 혼공자' 카테고리의 다른 글

Chapter 10 예외 처리  (2) 2023.01.26
Chapter 09 중첩 클래스와 중첩 인터페이스  (2) 2023.01.20
Chapter 07 상속  (0) 2023.01.16
[혼공학습단 9기] 혼공자 2주차  (0) 2023.01.15
Chapter 06 클래스  (0) 2023.01.10