열 다섯번째, 인터페이스
개요: 필자가 자바를 공부하면서 정리한 게시물이다. 드디어 인터페이스 작성하는 날이 오다니..
아는것은 최대한 빼겠다... 시간 낭비..
인터페이스
- 사전적으로 의미로 두 장치를 연결하는 접속기를 말한다. 즉 두 객체를 인터페이스를 통해 연결한다는 것이다.
- 인터페이스는 다형셩 구현에 주된 기술로 이용된다.
ex) 객체 A가 인터페이스의 메소드를 호출하면 실제로 실행되는 것은 인터페이스 뒤편의 객체 B 또는 객체 C 메소드이다.
만약 객체 B의 메소드 실행 결과와 객체 C의 매소드 실행 결과가 다르다면 객체 A는 객체 교체로 인해 다른 결과를 얻게 된다.
- class 키워드 대신 interface 키워드를 사용한다.
- 구현 클래스는 public 구현 클래스 implements 인터페이스명 이렇게 한다.!
- 상속과 다르게 다중상속이 가능하다.
- 다중 인터페이스 구현이 가능하다.
- 인터페이스에 선언된 필드는 모두 public static final 특성을 갖기 때문에 다음과 같다.
public interface Test1 {
int a=1;
int b=1;
}
public class Test {
public static void main(String[] args) {
System.out.println(Test1.a);
}
}
- 인터페이스로 구현 객체를 사용하려면 인터페이스 변수를 선언하고 구현 객체를 대입해야 한다.
인터페이스 변수는 참조 타입이기 때문에 구현 객체가 대입되면 구현 객체의 번지를 저장한다.
- 인터페이스는 무조건 추상메소드만 가능! but 디폴트메서는 예외! 아래를 한번 보자
추상메소드
- 리턴 타입, 메소드명, 매개변수만 기술! {}중괄호를 붙이지 않는다.
디폴트메소드
- 완전한 실행 코드를 가진 것이다.
- 디폴트매소드 안에서는 상수 필드를 읽거나 추상메소드를 호출할 수 있다. 또한 private 메소드도 가능
public interface Test1 {
int a = 1;
int b = 1;
public void show1();
default void show() {
System.out.println("a");
}
}
정적메소드
- 인터페이스에 선언된 정적 메소드는 구현 객체 없이 인터페이스명으로 접근해서 호출할 수 있다.
- 상수 필드를 제외한 나머지 메소드들을 호출할 수 없다.
private 메소드
- 상수 필드, 추상 메소드, 디폴트 메소드, 정적 메소드는 모두 public 접근 제한을 갖는다.
- private메소드는 디폴트메소드안에서 호출이 가능하다.(360page)
- private 정적메소드는 디폴트메소드, 정적메소드 안에서 호출이 가능하다.(360page)
383page
대체적으로 상속과 비슷하다.