- 자바의 정석 (기본편)을 참고했습니다.
- 복습을 위한 게시글입니다.
- 소스에 오타가 있을 수 있습니다. ^^;;
인터페이스(Interface)의 특징
인터페이스란 일종의 추상 클래스인데, 추상화의 정도가 높아서 구현부를 갖춘 일반 메서드, 멤버변수를 가질 수 없다.
오직 추상 메서드와 상수만을 멤버로 가질 수 있고 그 외는 어떠한 요소도 허용하지 않는다.
불완전한 설계도이기 때문에 그 자체로 이용하기보단 다른 클래스를 작성하는데 도움을 주는 용도로 사용된다.
모든 멤버변수는 public static final을 붙인 제어자가 있어야하며, 이를 생략할 수 있다.
모든 메서드는 public abstract 붙인 제어자가 있어야하며, 이를 생략할 수 있다.
인터페이스의 장점
1. 개발시간을 단축시킬 수 있다.
- 다른 개발자들이 각각의 부분을 완성할 때 까지 기다리지 않고 서로 규칙만 정해두어 따로 나눠서 작성된 코드를
컴파일 할 수 있다.
2. 표준화가 가능하다.
- 기본 틀을 인터페이스로 작성하고 이 틀에 맞춰 인터페이스를 구현하는 식으로 프로그램을 작성함으로써 일관적이고
정형화된 프로그램의 개발이 가능해진다.
3. 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.
- 상속 관계를 가지지 않고 같은 조상을 가지고 있지 않는 전혀 상관없는 클래스들에게 하나의 인터페이스를 공통으로
구현하도록 함으로써 관계를 맺어줄 수 있다.
4. 독립적인 프로그래밍이 가능하다.
- 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제 구현에 독립적인 프로그램을 작성하는 것이 가능해진다.
- 클래스 - 클래스 간의 직접적인 관계를 클래스 - 인터페이스와 같은 간접적인 관계로 변경하면, 한 클래스의 변경이
관련된 다른 클래스에 영향을 미치지 않기 때문이다.
즉, 코드의 종속성을 줄이고 유지보수성을 높일 수 있다.
제어자 생략 예제 코드
interface playingCart {
public static final int SPADE = 4;
// public static fianl int DIAMOND = 3; (생략 가능)
fianl int DIAMOND = 3;
// public static fianl int HEART = 2; (생략 가능)
static int HEART = 2;
// public static fianl int CLOVER = 1; (생략 가능)
int CLOVER = 1;
// public abstract String getCardNumber(); (생략 가능)
String getCardNumber();
}
인터페이스의 상속
인터페이스는 클래스와 다르게 다중 상속을 허용한다.
인터페이스의 다중 상속 예제 코드
interface Moveable {
void move(int x, int y);
}
interface Attackable {
void attack(Unit u);
}
interface Fightable extends Moveable, Attackable {
// 다중 상속 가능
}
인터페이스는 다중 상속이 가능하기 때문에 Fightable 인터페이스는 정의된 멤버가 하나도 없지만 조상 인터페이스로
상속받은 두 개의 추상 메서드를 멤버로 갖게 된다.
인터페이스의 구현
인터페이스 또한 추상 클래스처럼 그 자체로 인스턴스를 생성할 수 없다.
추상 클래스와 구현방법이 다르지 않지만, extends를 사용하지 않고 implements를 사용한다.
구현하는 인터페이스에서 일부의 추상 메서드만 구현한다면 abstract를 붙여 추상클래스로 선언해야 한다.
인터페이스의 구현 예제 코드
// 인터페이스 Fightable을 구현하는 클래스 Fighter
class Fighter implements Fightable {
public void move(int x, int y) {
// 내용 생략
}
public void attack(Unit u) {
// 내용 생략
}
}
// 인터페이스 Fightable을 구현하는 클래스 Fighter
// attack()를 따로 구현하지 않기 때문에 abstrack를 붙여줘야 한다.
abstract class Fighter implement Fightable {
public void move(int x, int y) {
// 내용 생략
}
}
첫 번째 클래스에서는 모든 추상 메서드를 구현했기 때문에 abstract를 붙이지 않지만, 두 번째 클래스에서는 하나를
구현하지 않기 때문에 abstract를 붙여 추상 클래스로 만들어줘야 한다.
'JAVA' 카테고리의 다른 글
[JAVA 복습] 추상 클래스(abstract class) (0) | 2021.09.02 |
---|---|
[JAVA 복습] 다형성(Ploymorphism) (0) | 2021.09.02 |
[JAVA 복습] 캡슐화와 접근 제어자 (0) | 2021.09.02 |
[JAVA 복습] 참조변수 super와 조상의 생성자 super() (0) | 2021.09.02 |
[JAVA 복습] 상속에 대해 (0) | 2021.09.02 |