반응형

인터페이스의 특징

1. class 대신 interface 선언이 붙어있고, 메소드는 구현없이 선언부만 존재합니다.

인터페이스는 다음과 같이 생겼습니다.

기본 골격은 클래스와 동일합니다.

이렇게 메소드의 구현부 없이 선언부만 존재하는 메소드를 가리켜 '추상 메소드(Abstract Methods)' 라 합니다.

interface Printable {
    public abstract void print(String doc); //추상 메소드
}

 

2. 인터페이스를 대상으로는 인스턴스 생성이 불가능합니다.

따라서 아래의 코드처럼 다른 클래스에 의해 다음과 같이 상속이 될 뿐입니다.

이 때 키워드 implements 가 사용됩니다.

package interfaceAndAbstractClass;

interface Printable {
    public abstract void print(String doc); //추상 메소드
}

class Printer implements Printable {

    @Override
    public void print(String doc) {
        System.out.println(doc);
    }
}

public class PrintableInterface {
    public static void main(String[] args) {
        Printable printable = new Printer();
        printable.print("abc");
    }
}

다만 아래의 코드와 같이 익명클래스를 구현할 수 있습니다.

익명 클래스의 형태로 정의하면 아래의 코드처럼 클래스의 정의와 인스턴스의 생성을 하나로 묶을 수 있습니다.

interface Printable {
    public abstract void print(String doc); //추상 메소드
}

public class PrintableInterface {
    public static void main(String[] args) {
        Printable printable = new Printable() {
            @Override
            public void print(String doc) {
                System.out.println(doc);
            }
        };
        printable.print("abc");
    }
}

그리고 이 익명클래스는 람다표현식을 이용해 아래와 같이 간소화 될 수 있습니다.

이 때 람다표현식과 익명 클래스는 분명히 다릅니다. (내부적인 동작 원리가 다릅니다.)

interface Printable {
    public abstract void print(String doc); //추상 메소드
}

public class PrintableInterface {
    public static void main(String[] args) {
        Printable printable = System.out::println;
        printable.print("abc");
    }
}

 

3. 한 클래스는 둘 이상의 인터페이스를 동시에 구현할 수 있습니다.

4. 상속과 구현은 동시에 가능합니다.

따라서 Robot이라는 클래스가 Machine 클래스를 상속하면서

인터페이스 Movable, Runnable 을 구현한다면 다음과 같이 정의할 수 있습니다.

class Robot extends Machine implements Movable, Runnable {}

 

5. 인터페이스의 형을 대상으로 참조변수의 선언이 가능합니다.

6. 인터페이스의 추상 메소드와 이를 구현하는 메소드 사이에 오버라이딩 관계가 성립합니다.

따라서 어노테이션 @Override 선언이 가능합니다.


 

인터페이스의 본질적 의미

인터페이스의 사전적 의미는 '연결점' 또는 '접점' 으로 둘 사이를 연결하는 매개체를 의미합니다.

이와 관련하여 간단한 예를 들면

 


인터페이스 내의 메소드와 변수의 특징

  1. 인터페이스의 모든 메소드는 public이 선언된 것으로 간주합니다.
  2. 인터페이스의 추상 메소드는 abstract 예약어를 생략해도 됩니다. (추상 클래스는 추상 메소드 선언 시 abstract 예약어 생략 불가능)
  3. 인터페이스 내에 선언되는 변수는 선언과 동시에 초기화 해야 합니다.
  4. 인터페이스 내에 선언되는 변수는 모두 public, static, final 이 선언된 것으로 간주합니다.결론적으로 인터페이스 내의 변수는 상수입니다.따라서 상수는 대문자로 이름을 짓는 관례를 따라 인터페이스 내에 변수의 이름은 대문자로 작성합니다.

인터페이스의 문법 구성과 추상 클래스

인터페이스에는 다음 세 가지 종류의 메소드만 존재할 수 있습니다.

1. 추상 메소드

2. 디폴트 메소드

3. static 메소드

 

그리고 인터페이스 간 상속도 가능하며 인터페이스의 형(Type) 이름을 대상으로 instanceof 연산을 할 수도 있습니다.

즉 많은 특성이 클래스와 유사합니다.

 

1. 추상 메소드

2. 디폴트 메소드

3. static 메소드

반응형

'JAVA > 기본 개념' 카테고리의 다른 글

#8 Object 클래스  (0) 2022.08.23
#4 예외처리(Exception Handling)  (0) 2022.08.22
#1 자바 개발 핵심 원칙  (0) 2022.07.11
[Java] 컴파일(Compile)의 이해  (0) 2020.11.04
[JAVA] 구조 개념 및 명명 규칙  (0) 2020.11.03

+ Recent posts