[Java] 인터페이스 (interface)

CountryGirl·2023년 6월 12일
0

Java

목록 보기
14/18
post-thumbnail

📌 인터페이스

인터페이스는 두 객체를 연결해주는 다리 역할을 한다.

상속 관계가 없는 다른 클래스들이 서로 동일한 메서드를 구현해야할 때 인터페이스는 구현 클래스들의 동일한 사용 방법과 행위를 보장해줄 수 있다.

  • 스펙이 정의된 메서드들의 집합
  • 인터페이스의 구현 클래스들은 반드시 정의된 메서드들을 구현해야한다.

😎 인터페이스 선언

public interface 인터페이스명 {

}

클래스처럼 public, default 접근 제어자를 지정할 수 있다.


😎 인터페이스 구성

인터페이스의 멤버

  • 모든 멤버변수는 public static final 이어야 한다.
  • 모든 메서드는 public abstract 이어야 한다.

제어자는 생략이 가능하다. 생략할 경우 컴파일러가 자동으로 제어자를 추가해준다.
(걱정할 필요가 없어요 ~!~!)


😎 인터페이스 구현

인터페이스는 추상 클래스와 마찬가지로 직접 인스턴스를 생성할 수 없기 때문에 클래스에 구현되어 생성된다.
즉, 구현체가 있어야한다.

implements 키워드를 사용하여 인터페이스를 구현할 수 있다.

public class 클래스명 implements 인터페이스명 { 
		@Override
	    public 리턴타입 메서드이름(매개변수, ...) {
	
	    }
}

인터페이스의 추상 메서드는 구현될 때 반드시 오버라이딩 되어야한다.

만약 인터페이스의 추상 메서드를 전부 구현하지 않고 일부만 구현하고 싶다면 해당 클래스를 추상 클래스로 변경해준다.

바꾼 추상 클래스를 다른 클래스가 상속해 오버라이딩하여 구현하도록 한다.


😎 인터페이스 상속

인터페이스 간에도 상속이 가능하다.
인터페이스 간에 상속은 implements 가 아니라 extends 키워드를 사용한다.

  • 인터페이스 (interface) - 인터페이스 (interface) : implements
  • 인터페이스 (interface) - 클래스 (class) : extends

인터페이스는 클래스와는 다르게 다중상속이 가능하다 !!!!

public class Main extends D implements C {

    @Override
    public void a() {
        System.out.println("A");
    }

    @Override
    public void b() {
        System.out.println("B");
    }

    @Override
    void d() {
        super.d();
    }

    public static void main(String[] args) {
        Main main = new Main();
        main.a();
        main.b();
        main.d();
    }
}

interface A {
    void a();
}

interface B {
    void b();
}

interface C extends A, B {
}

class D {
    void d() {
        System.out.println("D");
    }
}

Mainclass D를 상속 받고, interface Cimplements 하고 있다.
interface Cinterface Ainterface B를 상속받고 있으므로 interface C는 A가 가지고 있는 void a(), B가 가지고 있는 void b()를 모두 사용할 수 있다. void a()void b()는 오버라이딩 되었기 때문에 결과값은 다음과 같이 나오게 된다.
[OUTPUT]
A
B
D

profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글

관련 채용 정보