Programming Language/Java

[Java] 인터페이스(interface)

성니 2021. 2. 23. 15:46

 

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994492032&orderClick=LEa&Kc=

 

Java의 정석 - 교보문고

자바의 기초부터 객제지향개념을 넘어 실전활용까지 수록한『Java의 정석』. 저자의 오랜 실무경험과 강의한 내용으로 구성되어 자바를 처음 배우는 초보자들의 궁금한 점을 빠짐없이 담고 있

www.kyobobook.co.kr


[인터페이스(interface)]

* 인터페이스란?

일종의 추상클래스.

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

추상클래스가 '미완성 설계도'라고 한다면, 인터페이스는 '기본설계도'라고 할 수 있다.

 

 

* 인터페이스의 작성

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

일반 클래스를 작성하는 것과 같은데, 키워드로 class 대신 interface를 쓴다.

interface에도 클래스와 같이 접근제어자로 public이나 default를 사용할 수 있다.

 

다음은 인터페이스 멤버들의 제약사항이다.

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

- 모든 메서드는 public abstract 이어야 하고, 이를 생략할 수 있다.

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

 

 

* 인터페이스의 상속

interface Movable {
	void move(int x, int y);
	}

	interface Attackable {
		void attack (Unit u);
	}
	interface Fightable extends Movable, Attackable {}

인터페이스는 인터페이스로부터만 상속받을 수 있는데, 클래스와는 달리 다중상속이 가능하다.

 

 

* 인터페이스의 구현

자신에 정의된 추상메서드의 몸통을 만들어주는 클래스를 작성해야 한다.

추상클래스가 자신을 상속받는 클래스를 정의하는 것과 동일하지만

인터페이스는 키워드 'extends' 대신 'implements'를 사용한다.

class 클래스이름 implements 인터페이스이름 {
		// 인터페이스에 정의된 추상메서드를 구현해야 한다.
}
class Fighter implements Fightable {
	public void move(int x, int y) {/*내용 생략*/}
	public void attack (Unit u) {/*내용 생략*/}
	}

 

// 구현하는 인터페이스의 메서드 중 일부만 구현해야 할 때
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