2024. 8. 15. 11:48ㆍJava/객체지향
인터페이스 역할
인터페이스는 다른 객체를 서로 연결하는 역할을 한다. 객체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 |