[JAVA] 인터페이스란?

Hochul-y·2022년 3월 25일
0

JavaStudy

목록 보기
3/3

📢 인터페이스

  • 자식 클래스가 여러 부모 클래스를 상속받는 다중상속을 자바에서는 지원하지 않습니다.

  • 다중 상속의 이점은 버릴수가 없기때문에 인터페이스 라는것을 통해 지원합니다.

결론적으로 인터페이스란 기본이 되는 틀만 제공되는 일종의 추상 클래스 입니다.

1.1 인터페이스 선언

  • 자바에서 클래스를 선언하는 거와 비슷하게 선언합니다.
접근제어자 interface 인터페이스명{
	...

}

위와 같이 class 대신 interface 키워드를 사용하며 클래스와 달리
인터페이스의 모든 필드는 public static final 이어야하며 메서드는 추상메서드 여야합니다.

🧾그럼 추상클래스와 인터페이스는 뭐가 다른 걸까?

추상클래스는 is-a 개념 (~는 ~ 이다)
인터페이스는 has-a 개념(~는 ~ 를 할수있다)

1.2 인터페이스 구현

  • 인터페이스는 추상 클래스와 마찬가지로 자신이 직접 인스턴스를 생성할 수 없습니다.
  • 이에 따라추상 메소드를 구현할 클래스를 작성해야합니다.
<class 클래스이름 implemnets 인터페이스이름{ . . .}

// 인터페이스에 선언된 추상 메소드의 실제 메소드를 구현

위와 같이 implements 키워드를 넣고 인터페이이름을 명시해야합니다.

1.3 인터페이스 래퍼런스를 통해 구현체를 사용하는 법

  • 인터페이스 참조변수에 구현체를 할당하여서 , 다형성을 확보할수있다.

  • 인터페이스의 참조 변수로 클래스의 인스턴스를 참조할수 있고 타입의 형변환도 가능합니다.

interface a = new class 형으로 구현 할수있고
(class) a.메서드() 도 가능합니다.
하지만 인터페이스에 선언된 메서드만 호출이 가능합니다.

1.4 인터페이스 상속

  • 위에서 말했듯이 자바는 다중상속이 불가능 하지만 인터페이스는 예외이다.

  • 하나의 클래스는 여러개의 인터페이스를 받을 수 있습니다.

  • 인터페이스의 조상은 인터페이스만 가능합니다(Objec가 최고조상이 아니에요!)

🎈 출처 : http://www.tcpschool.com/java/java_class_declaration

interface Animal { public abstract void cry(); }

interface Cat extends Animal { public abstract void cry(); }

interface Dog extends Animal { public abstract void cry(); }

class MyPet implements Cat, Dog {
    public void cry() {
        System.out.println("멍멍! 냐옹냐옹!");
    }
}

public class Polymorphism05 {
    public static void main(String[] args) {
        MyPet p = new MyPet();
        p.cry();
    }
}

위처럼 인터페이스를 통해 다중상속을 할경우 메서드 호출의 모호성도 방지할수 있습니다.

1.5 인터페이스의 기본 메서드 (Default Method), 자바 8

  • java 8 에 추가된 문법입니다.

  • 인터페이스에서 메서드 구현이 가능해졌습니다.

interface Animal {
default void cry(){
	System.out.println("크앙");
	}
}
추상메서드가 아닌 일반 메서드이기때문에 이를 구현한 클래스는 변경할 것이 없습니다.
  • 위처럼 일반 메서드 처럼 구현부가 있어야 하고 접근제어자의 생략이 가능합니다.

  • 위의 Animal 을 상속받은 자식클래스는 @Override 로 재정의 할 수 있습니다.

1.6 static 메서드 , 자바 8

  • 디폴드와는 달리 객체가 없어도 인터페이스만으로 호출이 가능합니다.
interface Animal {
static void cry(){
	System.out.println("크앙");
	}
}
  • 위처럼 일반 메서드 처럼 구현부가 있어야 하고 접근제어자의 생략이 가능합니다.

  • 하지만 default와 다르게 상속받은 자식클래스는 @Override 로 재정의 할 수 없습니다.

1.7 private 메서드, 자바 9

  • java 9 이후에 private 메서드 와 private static 메서드를 추가 할 수 있습니다.

  • 구현 클래스와 인터페이스가 상속되지 않는다

  • 인터페이스에서 다른 메서드를 호출 할 수 있습니다.

  • private 은 private / abstract / default / static 메서드를 호출 가능

  • private static 은 static 과 static private 만 호출 가능합니다.

profile
코딩이 즐거운사람~

0개의 댓글

관련 채용 정보