본문 바로가기

JAVA/복습

인터페이스(interface) 사용

인터페이스를 정의할 때는 그 객체를 선언하기 전에

이 객체가 어떤 어떤기능들을 갖고 있으면 좋을까?하는 

이런 기능들을 모아놓은 것이다라고 생각하면 된다.

 

그런데 그기능들을 정의만 했지, 실제 구현을 하지않았기 때문에 인터페이스만 갖고 무언가를 사용할 수는 없다.

 

그래서 이런 인터페이스를 반드시 구현해서 사용해야만 한다.

 

 

LedTV.java(interface인 TV를 구현, implements)

package Java02;


// class LedTV를 정의하는데 이 LedTV는 인터페이스 TV를 구현하겠다라는 의미
// 이 의미는 TV가 가진 기능들을 LEDTV도 갖게하겠다라는 의미와 같다.
public class LedTV implements TV{


    @Override
    public void turnOn() {
        
    }

    @Override
    public void turnOff() {

    }

    @Override
    public void changeVolume(int volume) {

    }

    @Override
    public void changeChannel(int channel) {

    }
}

TV가 가진 기능들을 LEDTV도 갖게하겠다라는 의미와 같다.

 

이렇게 문법을 만들어두면 이 LedTV는 TV가 가지고 있는 모든 기능들을 구현해야 한다.

 


TV.java

package Java02;

public interface TV {
 
    public int MIN_VOLUME = 0;
    public int MAX_VOLUME = 100;

    public void turnOn();

    public void turnOff();

    public void changeVolume(int volume);

    public void changeChannel(int channel);
}

 

LedTV.java

package Java02;

public class LedTV implements TV {


    @Override
    public void turnOn() {
        System.out.println("켜다.");
    }

    @Override
    public void turnOff() {
        System.out.println("끄다.");
    }

    @Override
    public void changeVolume(int volume) {
        System.out.println("볼륨을 조절하다.");
    }

    @Override
    public void changeChannel(int channel) {
        System.out.println("채널을 변경하다.");
    }
}

 

LedExam.java

package Java02;

public class LedExam {
    public static void main(String[] args) {

        TV tv = new LedTV();
        tv.turnOn();
        tv.changeVolume(8);
        tv.changeChannel(10);
        tv.turnOff();
   
   }
}

TV라는 타입으로 참조변수를 만들어 줄 수 있는데, 인터페이스도 타입이 될 수 있다.

위와 같이 인터페이스가 LedTV라는 것을 구현해서 사용할 수 있다.

이 LedTV가 모든 내용들을 구현하고 있었기 때문에 위와 같이 수행할 수 있다.

 

-- 실행결과 

 

1. 참조변수의 타입으로 인터페이스를 사용할 수 있다.

2. 인터페이스가 가지고 있는 메소드만 사용할 수 있다.

 

- > 인터페이스긴 하지만 상속과 개념과 같다.

 

TV라는 인터페이스는 타입이 될 수는 있으나 TV가 가지고 있는 기능들만 사용할 수 있다.

만약, LedTV가 TV라는 인터페이스가 가지지 않은 기능들을 확장해서 사용하고 있다던가

또는 그 기능들을 더 사용하고 싶다할 때 클래스의 형변환을 이용해서 사용하면 된다.

 

* 인터페이스를 사용해야되는 중요한 이유

이런 TV라는  인터페이스를 구현하는 클래스가 LedTV만 있는것이 아니라 LCDTV 등. 다른 TV들을 만들었다했을 때 

이 TV 인터페이스를 활용하여 만들 수 있을 것이다.