[Java] 인터페이스

2024. 8. 15. 11:48Java/객체지향

인터페이스 역할

인터페이스는 다른 객체를 서로 연결하는 역할을 한다. 객체A는 인터페이스를 통해 객체B를 사용할 수 있다. 

객체 A가 직접 객체 B를 호출하지 않는 이유는 아래와 같은 상황 때문이다. 객체 A는 객체 B에서 직접 객체 C로 변경할 필요가 없다. 객체 A는 객체 B든 C든 상관없이 메서드 실행 결과만 다르면 다른 결과를 얻을 수 있다. 이처럼 인터페이스는 다형성 구현을 위해 사용된다. 

 

 

인터페이스 선언

인터페이스는 class 키워드 대신 interface를 사용한다. 제한 접근자로는 default와 public을 붙일 수 있다. 인터페이스는 상수 필드, 추상 메서드, 디폴트 메서드, 정적 메서드, 메서드, 정적 메서드를 사용할 수 있다. 

interface 인터페이스명{}
public interface 인터페이스명{}

 

인터페이스를 구현하기 위해서는 implement를 사용해야 한다. implement 키워드는 인터페이스를 통해 사용할 수 있다는 표시이며, 인터페이스의 추상 메서드를 재정의한 메서드가 있다는 의미를 뜻이다. 

public class B implements 인터페이스명{}

 

변수 선언과 구현 객체 타입

인터페이스도 참조 타입에 속하기 때문에 null을 대입할 수 있다. 또한 변수 선언과 동시에 구현 객체를 대입할 수 있다. 아래의 rc변수는 RemoteControl을 구현한 어떤한 객체든 대입이 가능하다. 

RemoteControl rc = new Television();

아래 코드에서 실제로 실행되는 것은 Audio에서 재정의한 메서드이다. 

re = new Audio();
rc.turnOn();

 

상수 필드

인터페이스는 불변의 상수 필드를 멤버로 가질 수 있다. 생략하더라도 컴파일 과정에서 public static final이 붙게 된다. 

[public static final] 타입 상수명 = 값;
public interface RemoteControl {
  int MAX_VOLUME = 10;
  int MIN_VOLUME = 0;
}

추상메서드

인터페이스는 구현 클래스가 재정의해야하는 public 추상 메서드를 멤버로 가질 수 있다. 리턴 타입, 메서드명, 매개변수만 기술되고 중괄호를 붙이지 않는다. 추상 메서드는 기본적으로 public 접근 제한이라 더 낮은 접근 제한으로 재정의할 수 없다. 

 

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

RemoteControl rc = new Audio();

 

디폴트 메서드

인터페이스는 추상 메서드만 선언할 수 있는데 JDK1.8부터 디폴트 메서드와 static 메서드도 추가할 수 있게 되었다. 인터페이스에 메서드를 추가하면 모든 상속자들이 메서드를 추가해야한다는 것을 뜻한다. 그래서 디폴트 메서드가 추가되었다. 디폴트 메서드는 구현을 하지 않아도 된다. 몸통이 있다는 점에서 추상 메서드와 다르다. 

[public] default 리턴타입 메서드명(매개변수 ...) {}

 

디폴트 메서드 앞에 키워드 default가 붙으며 public은 생략이 가능하다. 

 

다중 인터페이스 구현 

구현 객체는 여러 개 인터페이스의 implements를 할 수 있다. 모든 인터페이스를 재정의해야 한다. 

public class 구현클래스명 implements 인터페이스A, 인터페이스B {}

 

인터페이스 상속

인터페이스도 다른 인터페이스를 상속할 수 있으며 클래스와 달리 다중 상속을 허용한다. 

public interface 자식인터페이스 extends 부모인터페이스1, 부모인터페이스2 {}

 

'Java > 객체지향' 카테고리의 다른 글

[Java] 인터페이스 연습 문제 풀이  (0) 2024.08.23
[Java] 인터페이스 연습 문제  (0) 2024.08.23
[Java] 상속 2  (0) 2024.08.14
[Java] 객체 지향 연습 정답  (0) 2024.08.13
[Java] 객체 지향 연습 문제  (0) 2024.08.13