본문 바로가기
프로그래밍/Java

Java - 인터페이스

by 왕거 2020. 7. 8.

17강은 인터페이스에 대한 내용이었다.

 

인터페이스란?

  • 메소드의 몸체가 없고 선언부만 존재하는 추상 메소드만 가지고 있다.
  • 인터페이스 인스턴스는 생성 불가능 하다. -> new 키워드를 통한 인스턴스 생성 불가함
    • 단 인터페이스 참조변수는 선언 가능함.
  • implements 키워드를 사용해서 클래스에서 인터페이스의 추상 메소드의 몸체를 작성해서 메소드를 완성한다.
    • "메소드를 구현한다." 라고도 말함
  • 인터페이스를 선언할 때 추상 메소드의 접근 수준을 명시하지 않더라도 기본적으로 public으로 설정된다.
  • 일반적인 변수는 선언할 수 없으나, 상수는 선언이 가능하다.
    • 이 경우에는 상수 키워드인 static final이 없이 변수를 선언하면 상수를 선언한 것으로 컴파일러 레벨에서 간주

 

상속과 구현

Class Robot extends Machine implements Movable, Runnable { ... }
  • 예시와 같이 상속과 구현은 동시에 가능하다.
  • 둘 이상의 인터페이스를 한 클래스에서 구현 가능하다.

 

인터페이스 간 상속

interface print {
	public void printable(String doc);
}

interface print_color extends {
	public void color_printable(String doc);
}
  • 클래스 상속과 동일한 방법으로 이루어진다.
  • 인터페이스를 구현하는 클래스는 인터페이스에 선언된 모든 추상 메소드에 대한 구현을 진행해야 한다.
    • 보다 효율적인 사용을 위한 인터페이스 상속
    • 기본적으로 사용되는 인터페이스에 추상 메소드가 추가되는 수정이 발생되면 해당 인터페이스를 구현한 모든 클래스에 추가적인 수정이 필수, 해당 클래스에서 추가된 메소드를 시용 할 일이 없더라도 진행해야 하는 비효율 발생 가능  ->  상속이 이를 해결한다.

 

디폴트 메소드

interface print {
	void printable(String doc);
        default void color_printable(String doc) {
            System.out.println("Color print");
            System.out.println(doc);
        }
}
  • default 키워드를 사용해서 메소드를 선언한다.
  • 기존 인터페이스의 추상 메소드와는 다르게 메소드 몸체까지 전부 선언한다.
  • 해당 메소드에 대한 오버라이딩 여부는 개발자가 선택.

 

 

인터페이스의 ststic 메소드

  • 인터페이스에서도 정의 가능하다.
  • 클래스의 static 메소드 마냥 동일한 방법으로 사용할 수 있음

 

 

인터페이스 대상의 instanceof 연산

  • 연산 구성에서 클래스 이름이 들어가는 부분에 인터페이스 이름을 사용 할 수 있다.
    • 이 경우 참조변수가 참조하는 인스턴스가 지정된 인터페이스를 직접 또는 간접적으로 구현한 클래스의 인스턴스 일 경우에 True를 반환하도록 동작
  • instanceof 연산의 조건으로 사용할 수 있는 빈 인터페이스를 선언하고 사용할 수 있다.
    • Marker 인터페이스라고 부르며, 완전히 빈 인터페이스로 빈 공간으로 놔두면 된다.

 

 

추상 클래스

  • 하나 이상의 추상 메소드를 가지는 클래스를 추상 메소드라고 부름
  • 인터페이스와 동일하게 인스턴스 생성 불가능, 참조변수 선언은 가능
  • abstract 키워드를 사용한다.
  • 상속을 통해서 추상 메소드를 구현한 후 사용한다.

 

'프로그래밍 > Java' 카테고리의 다른 글

Java - 예외처리 (2)  (0) 2020.07.17
Java - 예외처리 (1)  (0) 2020.07.12
Java - 상속 (3)  (0) 2020.07.08
Java - 상속 (2)  (0) 2020.07.06
Java - 상속 (1)  (0) 2020.07.05