자바

JAVA 자바 인터페이스 사용 추상 메서드 사용, 디폴트 메서드 사용, 정적 메서드 사용

알통몬_ 2017. 3. 13. 10:14
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

인터페이스 사용

 인터페이스로 구현 객체를 사용하려면 아래와 같이 인터페이스를 선언하고 구현 객체를 대입해야 합니다. 인터페이스 변수는 참조 타입이기 때문에 구현 객체가 대입될 경우 구현 객체의 번지를 저장합니다.

인터페이스 변수;      또는 인터페이스 변수 = 구현 객체;

변수 = 구현 객체;

 RemoteControl 인터페이스의 구현 객체인 Television 과 Audio를 사용하려면 다음과 같이 RemoteControl 타입 변수를 선언하고 구현 객체에 대입해야 합니다.

RemoteControl rc;

rc = new Television();

rc = new Audio();


 인터페이스는 클래스의 필드, 생성자 또는 메서드의 매개 변수, 생성자 또는 메서드의 로컬 변수로 선언될 수 있습니다.


public classMyClass {

   //field

   RemoteControl rc = new Television();


  //Constructor

  MyClass(RemoteControl rc) {
   this.rc = rc;

 

 //Method

  void methodA() {
   //로컬 변수

  RemoteControl rc = new Audio();

}


void methodB(RemoteControl rc) { ... }

}


추상 메서드 사용

 구현 객체가 인터페이스 타입에 대입되면 인터페이스에 선언된 추상 메서드를 개발 코드에서 호출할 수 있게 됩니다. 개발 코드에서 RemoteControl의 변수 로 turnOn() 또는 turnOff()메서드를 호출하면

구현 객체의 turnOn() 과 turnOff() 메서드가 자동 실행됩니다.

RemoteControl rc = new Television();

rc.turnOn(); -> Television 의 turnOn() 실행

rc.turnOff(); -> Television 의 turnOff() 실행


예제)


디폴트 메서드 사용

 디폴트 메서드는 인터페이스에서 선언되지만, 인터페이스에서 바로 사용할 수 없습니다. 

디폴트 메서드는 인스턴스 메서드이므로 구현 객체가 있어야 사용할 수 있습니다.

RemoteControl 인터페이스는 setMute() 라는 디폴트 메서드를 가지고 있다고 하면, 

이 메서드를 RemoteControl.setMute(); 처럼 호출할 수 없습니다.


setMute()를 호출하려면 구현 객체가 필요합니다.


예제


정적 메서드 사용

 인터페이스의 정적 메서드는 인터페이스로 바로 호출 가능합니다. 

ex)

인터페이스

public interface RemoteControl {

//정적 메소드

static void changeBattery() {

System.out.println("건전지를 교환합니다.");

}

}


실행 클래스

public class RemoteControlExample {

public static void main(String[] args) {

RemoteControl.changeBattery();

}

}

반응형