Programming/Java, Spring

[JAVA] 인터페이스란?? 인터페이스의 작성, 구현 / 인터페이스의 상속 / 인터페이스의 다형성 / 인터페이스의 장점

Juun 2022. 6. 4. 20:18
반응형

인터페이스(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. 독립적인 프로그래밍이 가능하다!

 

반응형