인터페이스(interface)란?
- 추상 메서드의 집합
- 실제 구현된 것이 없는 기본 설계도.
- 추상 메서드와 상수만을 멤버로 가질 수 있다.
두 대상(객체) 간의 연결, 대화, 소통을 돕는 중간 역할을 한다!
선언(설계)와 구현을 분리시키는 것을 가능하게 한다!!
인터페이스와 추상 클래스의 공통점
- 추상메서드를 가지고 있다! (미완성 설계도)
인터페이스와 추상 클래스의 차이
- 인터페이스는 추상 메서드의 집합, 추상 클래스는 추상 메서드만 가지고 있음!
- 인터페이스는 iv를 가질 수 없다.
그럼 우리는 왜 인터페이스를 사용할까?
- 클래스 작성에 도움을 줄 목적으로 사용된다!!
인터페이스의 작성
- 클래스 대신 인터페이스를 사용한다는 것 외에 클래스 작성과 동일
interface nameOfInterface {
public static final 타입 상수 이름 = 값; //상수
public abstract 메서드 이름(매개변수이름 목록); // 추상메서드
}
모든 인터페이스는 public, 추상 메서드가 핵심이다!! 상수는 부가적인 요인!!
모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
모든 메서드는 public abstract 이어야 하며, 이를 생략 할 수 있다.
interface PlayCard {
puvlic static final int SPADE = 4;
final int DIAMOND = 3;
static int HEART = 2;
int CLOVER =1 ;
// 이까지 상수
public abstract String getCardNumber();
public abstract String getCardKind();
}
위 코드와 아래 코드는 같다!
interface PlayCard {
int SPADE = 4;
int = 3;
int HEART = 2;
int CLOVER =1 ;
// 이까지 상수
public abstract String getCardNumber();
String getCardKind();
}
위 조건에 맞춰서 생략해서 간단하게 적을 수 있다!!
인터페이스의 구현
- 인터페이스는 추상 메서드의 집합이다! 따라서 인터페이스의 구현은 인터페이스에 정의된 추상 메서드를 완성시키면 된다!
class Fighter implements Fightable {
public void move(int x, int y){ /*내용생략*/ }
public void attack(){ /*내용생략*/ }
}
interface Fightable {
void move(int x, int y);
void attack(Unit u);
}
인터페이스는 클래스를 상속받는 것과 같은데 이때 상속의 extends 대신에 implements를 사용한다!!
abstract class Fighter implements Fightable {
public void move(int x, int y) { /*내용 생략*/ }
}
위 클래스 Fighter 에서 일부만 구현 시, 클래스 앞에 abstract를 붙혀줘야 한다!!
class Fighter extends Unit implements Fighteable {
public void move(int x, int y) { }
public void attack(Unit u) { }
}
상속과 구현이 동시에 가능하다.
인터페이스의 상속
인터페이스도 클래스처럼 상속이 가능하다. 그러나 단일상속만 가능한 클래스와 달리 인터페이스는 다중상속이 가능!!
interface Movable{
void move(int x, int y);
}
interface Attackable {
void attack(Unit u);
}
interface Fightable extends Movable, Attackable { } //다중 상속
추상메서드는 충돌해도 문제가 안생겨서 다중 상속이 가능하다!
인터페이스는 Object 클래스와 같은 최고 조상이 없음!
인터페이스의 조상은 인터페이스만 가능하다!!
인터페이스를 이용한 다형성
- 인터페이스 타입의 변수로 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다.
class Fighter extends Unit implements Fightable {
public void move (int x, int y) { }
public void attack(Fightable f) { }
}
- 인터페이스를 메서드의 매개변수 타입으로 지정할 수 있다
void attack(Fightable f){
// Fightable 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 받는 메서드
}
- 인터페이스를 메서드의 리턴타입으로 지정할 수 있다.
Fightable method() {
return new Fighter();
}
Fightable 인터페이스를 구현한 클래스의 인스턴스를 반환
인터페이스의 장점
1. 개발 시간을 단축시킬 수 있다.
2. 표준화가 가능하다.
3. 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.
4. 독립적인 프로그래밍이 가능하다!
'Programming > Java, Spring' 카테고리의 다른 글
[Spring] JSP & Servlet / JSP와 Servlet의 역할 (0) | 2022.06.17 |
---|---|
[Spring] MVC (Model, View, Controller) 패턴이란?? (0) | 2022.06.15 |
[JAVA] 추상 클래스란? / 추상 메서드란?? / 추상 클래스의 작성 (2) | 2022.06.02 |
[JAVA] 다형성(polymorphism)이란?? (0) | 2022.06.01 |
[JAVA] 상속(inheritance)이란? / 상속의 특징 / 상속의 장점 / 예시 (0) | 2022.05.28 |