# 인터페이스란?

  • 일종의 추상클래스이다.
  • 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높다.
    => 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.
         오직 추상메서드와 상수만을 멤버로 가질 수 있다.
  • 인터페이스는 구현된 것은 아무것도 없고 밑그림만 그려진 '기본 설계도'

 

interface 인터페이스이름 {
    public static final 타입 상수이름 = 값;
    public abstract 메서드이름(매개변수목록);
}

 

인터페이스 멤버들의 제약사항

  • 모든 멤버변수는 public static final ,이어야 하며, 이를 생략할 수 있다.
  • 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.
    => 단, static 메서드와 디폴트 메서드는 예외(JDK1.8부터)

 

 

interface PlayingCard {
    public static final int SPADE = 4;
    final int DIAMOND = 3;    // public static final int DIAMOND = 3;
    static int HEART = 2;        // public static final int HEART = 2;
    int CLOVER = 1;              // public static final int CLOVER = 1;

    public abstract String getCardNumber();
    String getCardKind();        // public abstract String getCardKind();
}
  • 인터페이스에 정의된 모든 멤버에 예외없이 적용되는 사항이기 때문에 제어자를 생략할 수 있는 것이며,
    편의상 생략하는 경우가 많다. 생략된 제어자는 컴파일 시에 컴파일러가 자동적으로 추가해준다.

 

 

 

# 인터페이스 구현

  • 인터페이스도 추상클래스처럼 그 자체로는 인스턴스를 생성할 수 없다.
  • 인터페이스는 자신에 정의된 추상메서드의 몸통을 만들어주는 클래스를 작성해야 한다.
  • 추상클래스는 확장한다는 의미의 키워드 'extends', 인터페이스는 구현한다는 의미의 키워드 'implements'
  • 인터페이스의 이름은 주로 Fightable과 같이 '~ 을 할 수 있는'의 의미인 able로 끝나는 경우가 많다.

 

class 클래스이름 implements 인터페이스이름 {
    // 인터페이스에 정의된 추상메서드를 구현해야 한다.
}


class Fighter implements Fightable {
    public void move(int x, int y)   {  /* 내용 생략 */ }
    public void attack(Unit u)       {  /* 내용 생략 */ }
}

 

 

 

# 인터페이스의 장점

  • 개발시간을 단축시킬 수 있다.
  • 표준화가 가능하다.
  • 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
  • 독립적인 프로그래밍이 가능하다.
    - 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제구현에 독립적인 프로그램을 작성하는 것이 가능하다.

 

 

 

반응형

+ Recent posts