## 인터페이스의 개념

인터페이스는 사전적으로 inter(=between) + face(면) 을 의미한다. 즉 사이에 있는 면인 접점이다. 가령, 우리가 TV를 사용한다고하면, 전원버튼, 채널버튼, 그리고 음량버튼만 알면 TV를 사용하는 데에 아무 지장이 없는 것처럼 굳이 전원버튼을 누르면, 내부에서 어떤 스위치의 상태가 변동하여 전류가 흘러 LCD가 어떻게 동작하는 지 사용자인 우리는 알 필요가 없다. 

 

## 인터페이스를 정의하는 방법 

인터페이스 정의는 간단하다. public + interface 키워드조합으로 간단히 정의할 수 있으며, 

내부에는 구현이 없는 메소드(시그니처)만 정의하면 끝난다. 이때, private 으로 public 을 바꿔보면 now allowed here 이라고 나오는데, 이는 당연히 이를 활용해여 구현을 해야하는데 접근제어자가 private 이면 말이 안되는 것(...)

public interface CookHelper {
    void boil(Dish food);
    void bake(Dish food);
    void fry(Dish food);
}

## 인터페이스를 구현하는 방법 

구현 역시 간단하다. 사용하고자 하는 인터페이스를 implements 하면 된다. 

이때, 정의해놓은 메소드 시그니처를 구현하지 않으면 컴파일 에러가 발생한다. 

public class NewChef implements CookHelper {

    @Override
    public void boil(Dish food) {
        // Do Something by new Chef!
    }

    @Override
    public void bake(Dish food) {
        // Do Something by new Chef!
    }

    @Override
    public void fry(Dish food) {
        // Do Something by new Chef!
    }
}

 

## 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 

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

    public static void main(String[] args) {
        CookHelper cook = new OldChef();
        Dish dish = new Dish();
        cook.bake(dish);
        
        cook = new NewChef();
        cook.bake(dish);
    }

## 인터페이스의 상속 

인터페이스는 다중 상속받을 수 있는며, 인터페이스끼리도 상속받을 수 있다. 

public interface DeliveryHelper extends ServiceHelper {
    void makeBill();
}

public class OldChef implements CookHelper, DeliveryHelper {

    @Override
    public void boil(Dish food) {
        // Do Something by new Chef!
        System.out.println("Old Cook boils");
    }

    @Override
    public void bake(Dish food) {
        // Do Something by new Chef!
        System.out.println("Old Cook bakes");
    }

    @Override
    public void fry(Dish food) {
        // Do Something by new Chef!
        System.out.println("Old Cook fries");
    }

    @Override
    public void makeBill() {
        System.out.println("Old Cook gets bill to customer");
    }

    @Override
    public void serve(Dish dish) {
        // Serve
    }
}

--------------------------------------------------------------------------------------------------------

 

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

## 인터페이스의 static 메소드, 자바 8

## 인터페이스의 private 메소드, 자바 9

-> 위의 3개 주제는 기존 인터페이스 개념을 흔들어놓기 때문에, 어떤 불편한점에 의해서 private, static 등이 생겨났는지는 충분한 시간이 필요할 것 같아서 추후 충분한 자료를 검토 후 업데이트 예정.  

 

 

 

'가치코딩 [Java] > 기초문법' 카테고리의 다른 글

[Java 문법] 상속  (0) 2021.03.06
[Java 문법] I/O  (0) 2021.03.04
[Java 문법] 어노테이션  (0) 2021.02.06
[Java 문법] enum  (0) 2021.02.04
[Java 문법] 패키지  (1) 2021.02.03

+ Recent posts