JAVA

인터페이스 (interface)

인디아나쥰이 2021. 7. 11. 22:57

인터페이스란?

일종의 추상클래스.

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

가질 수 없다.

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

 

인터페이스의 작성

 

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

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

-모든 멤버변수는 public static final 이어야하며, 이를 생략할 수 있다.

-모든 메서드는 public abstract 이어야하며, 이를 생략 할 수 있다.(static메서드와 디폴트 메서드는 예외 : jdk1.8부터)

 

인터페이스의 상속

클래스와는 달리 다중상속이 가능하다.

interface Movable{

	void move(int x, int y);
}

interface Attackable {

	void attack(Unit u);
}

interface Fightable extends Movable, Attackable {}

 

인터페이스의 구현

 

인터페이스도 추상클래스처럼 그 자체로는 인스턴스를 생성할 수 없으며, 추상클래스가 상속을 통해 추상메서드를 완성하는 것처럼,

인터페이스도 자신에 정의된 추상메서드의 몸통을 만들어주는 클래스를 작성하여야 하는데,

키워드는 'implements'를 사용한다.

 

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

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

class Fighter implements Fightable {

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

 

그러나 만약 구현하는 인터페이스 메서드 중 일부만 구현한다면,

abstract를 붙여서 추상클래스로 선언해야한다.

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

 

그리고 동시에 상속과 구현을 할 수도 있다.

class Fighter extends Unit implements Fightable {

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

 

728x90
반응형