티스토리 뷰

JAVA

인터페이스란

RRachel 2021. 1. 10. 19:16

인터페이스는 일종의 추상클래스

추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 

오직 추상메서드와 상수만 멤버로 가질 수 있다. 그 외의 다른 어떠한 것도 허용하지 않는다.

추상클래스를 부분적으로만 완성된 미완성 설계도라고 한다면, 인터페이스는 구현된 것은 아무 것도 없고 밑그림만 그려져 있는 기본 설계도 라고 할 수 있다.

인터페이스도 추상클래스처럼 완성되지 않은 불완전한 것이기 때문에 그 자체만으로 사용되기 보단 다른 클래스를 작성하는데 도움 줄 목적으로 작성된다.

 

interface 인터페이스이름 {

     public static final 타입 상수이름 = 값;

     public abstract 메서드이름(매개변수목록);

}

  • 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
  • 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.

 

static메서드와 디폴트 메서드는 예외

 

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

 

인터페이스의 모든 메서드는 추상메서드여야 하는데, 1.8부터 인터페이스에 static메서드와 디폴트 메서드의 추가를 허용하는 방향으로 변경되었다. 

 

인터페이스는 인터페이스러부터만 상속받을 수 있으며, 클래스와는 달리 다중상속, 여러개의 인터페이스로부터 상속 받는 것이 가능하다.

 

interface Movable {

 void move(int x, int y);

}

interface Attackable {

void attack(Unit u);

}

interface Fightable extends Movabel, Attackable { }

 

Fightable은 Movable, Attackable에 정으된 멤버 모두 상속 받는다,

 

그렇다면 인터페이스는 어떻게 구현할까?

인터페이스는 자신에 정의된 추상메서드의 몸통을 만들어주는 클래스를 작성해야 하는데, 그 방법은 추상클래스가 자신을 상속받는 클래스를 정의하는 것과 다르지 않다. 단지 클래스는 확장한다는 의미의 'extends'를 사용하지만 인터페이스는 구현한다는 의미의 'implements'를 사용한다.

 

class 클래스이름 implements 인터페이스이름 {

//인터페이스에 정의된 추상메서드를 구현한다

}

만약 구현하는 인터페이스 중 일부만 구현한다면 abstract를 붙여서 추상클래스로 선언해야한다.

abstract class Fighter implements Fightable{

 

}

 

 

 

'JAVA' 카테고리의 다른 글

클래스 작성시 주의 사항  (0) 2019.01.26
자바(JAVA)에 대하여  (0) 2018.02.14
댓글
공지사항
최근에 올라온 글
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함