-
[Java] 8주차 과제 : 자바의 인터페이스Java/온라인 자바 스터디 2021. 1. 16. 18:58반응형
목표
자바의 인터페이스 학습하기
학습할 것
인터페이스 정의하는 방법
인터페이스 구현하는 방법
인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
인터페이스 상속
인터페이스의 기본 메소드 (Default Method), 자바 8
인터페이스의 static 메소드, 자바 8
인터페이스의 private 메소드, 자바 9
인터페이스 정의하는 방법
인터페이스를 작성하는 것은 크래스를 작성하는 것과 같다. 다만 키워드로 class 대신 interface를 사용한다는 것만 다르다. 그리고 interface에도 클래스와 같이 접근제어자로 public 또는 default를 사용할 수 있다.
interface 인터페이스명 {
public static final 타입 상수명 = 값;
public abstract 메서드명(매개변수);
}
일반적으로 클래스의 멤버들과 달리 인터페이스의 멤버들은 다음과 같은 제약사항을 가지고 있다.
- 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.
인터페이스 구현하는 방법
인터페이스도 추상클래스처럼 그 자체로는 인스터스를 생성할 수 없으며, 추상클래스가 상속을 통해 추상메서드를 완성하는 것처럼, 인터페이스도 자신에 정의된 추상메서드의 몸통을 만들어주는 클래스를 작성해야하는데, 그 방법은 추상클래스가 자신을 상속받는 클래스를 정의하는 것과 다르지 않다. 다만 클래스는 확장한다는 의미의 키워드 'extends'를 사용하지만 인터페이스는 구현한다는 의미의 키워드 'implements'를 사용할 뿐이다.
class 클래스명 implements 인터페이스명 {
// 인터페이스에 정의된 추상메서드를 구현해야한다.
}
인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
인터페이스 Parseable을 클래스 Parser가 구현했을 때, 다음과 같이 Parser인스턴스를 Parseable타입의 참조변수로 참조하는 것이 가능하다.
Parseable p = (Parseable)new Parser();
또는
Parseable p = new Parser();
Parseable타입의 참조변수로는 인터페이스 Parseable에 정의된 멤버들만 호출이 가능하다.
따라서 인터페이스는 다음과 같이 메서드의 매개변수의 타입으로 사용될 수 있다.
void parse(Parseable p){
// ...
}
인터페이스 타입의 매개변수가 갖는 의미는 메서드 호출 시 해당 인터페이스를 구현할 클래스의 인스턴스를 매개변수로 제공해야한다는 것이다.
그래서 parse메서드를 호출할 때는 매개변수로 Parseable인터페이스를 구현한 클래스의 인스턴스를 넘겨주어야 한다.
class Parser implements Parseable{
public void parse(Parseable p){ // ... }
}
위와 같이 Parseable인터페이스를 구현한 Parser클래스가 있을 때, parse메서드의 매개변수로는 Parser인스턴스를 넘겨 줄 수 있다. 즉, parse(new Parser())와 같이 할 수 있다는 것이다.
그리고 다음과 같이 메서드의 리턴타입으로 인터페이스의 타입을 지정하는 것 역시 가능하다.
Parseable method() {
// ...
return new Parser();
}
리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다.
위에 코드에서는 method()의 리턴타입이 Parseable인터페이스이기 때문에 메서드의 return문에서 Parseable인터페이스를 구현한 Parser클래스의 인스턴를 반환한다.
인터페이스 상속
인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와는 달리 다중상속, 즉 여러 개의 인터페이스로부터 상속을 받는 것이 가능하다.
interface Interface01 {
doSomething01();
}
interface Interface02 {
doSomething02();
}
interface Interface03 extends Interface01, Interface01 {}
클래스의 상속과 마찬가지로 Interface03는 Interface01, Interface02에 정의된 멤버를 모두 상속받는다.
그래서 Interface03자체에는 정의된 멤버가 하나도 없지만 Interface01, Interface02으로 부터 상속받은 두 개의 추상메서드, doSomething01(), doSomething02()을 멤버로 갖게 된다.
출처 : 자바의 정석
인터페이스의 기본 메소드 (Default Method), 자바 8
인터페이스는 메소드 선언만 가능하기 때문에 구체적인 구현을 담은 메서드를 선언할 수 없다. 자바8에서는 인터페이스의 메소드 선언 시 default를 명시하면 구체적인 구현을 할 수 있다.
interface Parseable{
default void parse(){
// ...
}
}
반응형'Java > 온라인 자바 스터디' 카테고리의 다른 글
[Java] 10주차 과제 : 자바의 멀티쓰레드 프로그래밍 (0) 2021.01.23 [Java] 9주차 과제 : 자바의 예외 처리 (0) 2021.01.17 [Java] 7주차 과제 : 자바의 패키지 (0) 2020.12.29 [Java] 6주차 과제 : 자바의 상속 (0) 2020.12.28 [Java] 5주차 과제 : 자바의 Class (0) 2020.12.19