본문 바로가기
JAVA/객체지향

인터페이스

by chogigang 2023. 2. 23.

인터페이스는     추상메서드의 집합

 

아무것도 없는 기본 설계도 이며  다른클래스를 작성하는데 도움 줄 목적으로 작성됩니다.

 

 

 

추상 클래스 와 인터페이스의 차이는 

 

인터페이스 (추상메서드)

 

추상클래스(일반클래스인대 추상메서드를 가지고있다.)

  • 추상 클래스는 클래스인데 추상 메서드를 포함하는 클래스, 멤버 변수를 가질 수 있음.
  • 인터페이스는 추상 메서드’만’ 포함하는 클래스, 멤버 변수(iv, cv)를 가질 수 없음
    • 정확히 말하자면 추상 메서드외에도 상수, static메서드, default메서드를 가질 수 있으나, 핵심은 인터페이스가 추상 메서드의 집합이라는 것임
  추상 클래스 인터페이스
사용 키워드 abstract interface
사용 가능 변수 제한 없음 static final (상수)
사용 가능 접근 제어자 제한 없음 (public, private, protected, default) public
사용 가능 메소드 제한 없음 abstract method, default method, static method, private method
상속 키워드 extends implements
다중 상속 가능 여부 불가능 가능 (클래스에 다중 구현, 인터페이스 끼리 다중 상속)
공통점 1. 추상 메소드를 가지고 있어야 한다.

2. 인스턴스화 할 수 없다 (new 생성자 사용 X)

3. 인터페이스 혹은 추상 클래스를 상속받아 구현한 구현체의 인스턴스를 사용해야 한다.

4. 인터페이스와 추상클래스를 구현, 상속한 클래스는 추상 메소드를 반드시 구현하여야 한다.

 

인터페이스의 작성

 

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

 

    interface PlayingCard {
        public static final int SPADE = 4;
        final int DIAMOND = 3; // public static final int DIAMOND = 3;
        static int HEART = 2; // public static fianl int HEART = 2;
        int CLOVER = 1;  // public static final int CLOVER = 1;
}

 

인터페이스의 상속

다중 상속 가능하고

 

인터페이스는 클래스와 달리 Object클래스와 같은 최고 조상이 없습니다

 

 

인터페이스의 구현

  • 인터페이스의 정의된 추상 메서드를 완성하는 것(=구현)
  • 인터페이스에 정의된 추상 메서드를 모두 구현해야합니다.

 

class 클래스이름 implements 인터페이스이름 {
	// 인터페이스에 정의된 추상메서드를 모두 구현
}
interface Fightable {
	void move(int x, int y); // public abstract
	void attack(Unit u);
}

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) { /* 내용 생략 */ }
	// 멤버로 'public abstract vboid attack(Unit u);' 를 가짐
}

 

인터페이스를 이용한 다중 상속

  • 자바는 다중 상속을 허용하지 않는 언어이나, 인터페이스를 통해 다중 상속이 가능 하기야 합니다.(실제로 인터페이스로 다중 상속을 하는 경우는 거의 없습니다)
  • 두 개의 클래스로부터 상속을 받아야하는 상황이라면
    1. 두 조상클래스 중에서 비중이 높은 쪽을 선택하고 다른 한쪽을 클래스 내부에 멤버로 포함시키는 방식으로 처리하거나
    2. 어느 한쪽의 필요한 부분만 뽑아서 인터페이스로 만든 다음 구현하도록 합니다.

인터페이스를 이용한 다형성

 

인터페이스 여깃 이를 구현한 클래스의 조상이라 할수 있으므로 참조 할수 있으며 형변환도 가능합니다.

 

 

메서드 호출 시 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공해야합니다.

 

 

 

인터페이스의 장점

 

1.개발시간 단축

2.표준화가 가능합니다 (jdbc)

3.서로 관계없는 클래스들에게 관계를 맺어 줄 수 있습니다.

4.독립적인 프로그래밍이 가능합니다

 

 

 

디폴트 메서드와 static메서드

자바 8 부터 추가 되었습니다

 

디폴트 메서드 (예외상황)

 

인터페이스에 메서드를 추가한다는 것은 추상메서드를 추가한다는 것이고 이 인터페이스를 구현한 기존의 모든 클래스들이 새로 추가된 메소드를 구현해야 하기 때문입니다 새로 추가되어도/해당 인터페이스를 구현한 클래스를 변경하지 않아도 됩니다.    디폴트 메서드가 기존의 메서드와 이름이 중복되어 충돌 될수 있습니다

 

1여러 인터페이스의 디롶트 메서드 간의 충돌

-인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 합니다.

 

2. 디폴트 메서드와 조상 클래스의 메서드 간의 충돌

조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시됩니다.

 

그냥 직접 오버라이딩 합시다.

'JAVA > 객체지향' 카테고리의 다른 글

예외처리  (0) 2023.02.23
내부 클래스  (0) 2023.02.23
추상 클래스  (0) 2023.02.23
다형성  (0) 2023.02.23
제어자  (0) 2023.02.23