[Java] 인터페이스 01.소개, 구현, 상속

김세림·2024년 4월 26일

Java

목록 보기
16/24
post-thumbnail

인터페이스 01.소개, 구현, 상속


인터페이스

인터페이스란?

  • 두 객체를 연결해주는 다리역할을 뜻한다.
    (face와 face사이를 inter해준다~)
  • 상속 관계가 없는 다른 클래스들이 서로 동일한 메소드를 구현해야할 때 (추상클래스와 비슷한 역할) 인터페이스는 구현 클래스들의 동일한 사용 방법과 행위를 보장해 줄 수 있다.

인터페이스 선언과 사용 방법

class가 아닌 interface로 만들고 extends가 아닌 implements로 클래스에 구현되어 생성할 수 있다.

public interface 인터페이스명() {
} //접근제어자는 클래스와 마찬가지로 지정 가능하다.

인터페이스의 구성

인터페이스 멤버 변수는 모두 public static final이어야 한다.
이부분은 생략 가능하지만 컴파일러가 자동으로 추가해준다.
(따로 생성자를 만들지 않아도 호출하여 사용할 수 있는 변치않는 상수값)
메서드는 public abstract여야 한다.
이또한 생략 가능하지만 컴파일러가 자동으로 추가해준다.
그렇다고 다른 메서드를 만들 수 없는 것은 아니다.
static과 default 메서드는 구현부분이 있는 메서드로 인터페이스 안에 작성 가능한데 이부분은 다음 포스트 인터페이스 02. default, static, 다형성에서 진행하겠다.

인터페이스 구현과 상속

구현

위 사용방법에서 언급했듯 implements를 사용해 인터페이스를 구현할 수 잇다.
또한, 인터페이스의 추상메서드는 구현될 때 반드시 오버라이딩 되어야하며, 일부만 구현한다면 해당 클래스를 추상클래스로 변경해주면된다.

상속

인터페이스들끼리의 상속이 가능하며, 클래스와는 다르게 다중 상속이 가능하다.
이전 포스트에서 자바는 다중 상속을 지원하지않는다 했는데 무슨 소리냐~하면
public static final로 상수를 사용하고, 메서드는 구현부분이 없지않겠는가! 그래서 다중 상속이 가능하다.

public class Main implements C {

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

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

interface A {
    void a();
}
interface B {
    void b();
}
interface C extends A, B { } //다중 상속!

이뿐 아니라 인터페이스의 구현은 상속과 함께 사용될 수 있다.

public class Main extends D implements C {
//D는 상속 C는 인터페이스
//그 C마저 A와 B를 상속받은 인터페이스이다!
    @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");
    }
}

0개의 댓글