인터페이스 구현

Sunny·2023년 1월 2일
0

개발 코드가 인터페이스 메소드를 호출하면 인터페이스는 객체의 메소드를 호출한다. 객체는 인터페이스에서 정의된 추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드를 가지고 있어야 한다. 이러한 객체를 인터페이스의 구현(implement) 객체라고 하고, 구현 객체를 생성하는 클래스를 구현 클래스라고 한다.


🌱 구현 클래스

구현 클래스는 보통의 클래스와 동일한데, 인터페이스 타입으로 사용할 수 있음을 알려주기 위해 클래스 선언부에 implements 키워드를 추가하고 인터페이스명을 명시해야 한다.

public class 구현클래스명 implements 인터페이스명 {
	// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}

구현 클래스의 예시를 보자. Television이라는 이름을 가지고 있는 RemoteControl 구현 클래스를 작성하는 방법을 보여준다. 클래스 선언부 끝에 implements RemoteControl이 붙어 있기 때문에 이 클래스는 RemoteControl 인터페이스로 사용이 가능하다. RemoteControl에는 3개의 추상 메소드가 있기 때문에 Television은 이 추상 메소드들에 대한 실체 메소드를 가지고 있어야 한다.

public class Television implements RemoteControl {
	//필드
    private int volume;
    
    //turnOn() 추상 메소드의 실체 메소드
    public void turnOn() {
    	System.out.println("TV를 켭니다.");
    }
    
    //turnOff() 추상 메소드의 실체 메소드
    public void turnOff() {
    	System.out.println("TV를 끕니다.");
    }
    
    //setVolume() 추상 메소드의 실체 메소드
    //인터페이스 상수를 이용해서 volume 필드의 값을 제한한다
    public void setVolume(int volume){
    	if(volume > RemoteControl.MAX_VOLUME) {
        	this.volume = RemoteControl.MAX_VOLUME;
        } else if(volume < RemoteControl.MIN_VOLUME) {
        	this.volume = RemoteControl.MIN_VOLUME;
        } else {
        	this.volume = volume;
        }
        
        System.out.println("현재 TV 볼륨 : " + volume);
    }
}

구현 클래스에서 인터페이스의 추상 메소드들에 대한 실체 메소드를 작성할 때 주의할 점은 인터페이스의 모든 메소드는 기본적으로 public 접근 제한을 갖기 때문에 public보다 더 낮은 접근 제한으로 작성할 수 없다.

만약 인터페이스에 선언된 추상 메소드에 대응하는 실체 메소드를 구현 클래스가 작성하지 않으면 구현 클래스는 자동적으로 추상 클래스가 된다. 그렇기 때문에 클래스 선언부에 abstract 키워드를 추가해야 한다.

public abstract class Television implements RemoteControl {
	public void turnOn() {...}
    public void turnOff() {...}
}

이클립스는 인터페이스의 추상 메소드에 대한 실체 메소드를 자동으로 생성해주는 기능을 제공하고 있다. 자동 생성된 실체 메소드는 @Override 가 붙는데, @Override는 인터페이스의 추상 메소드에 대한 정확한 실체 메소드인지 컴파일러가 체크하도록 지시하는 어노테이션이다. 생략해도 상관없지만, 잘못된 실체 메소드가 생기지 않도록 해주기 때문에 붙여 주는 것이 좋다.

인터페이스로 구현 객체를 사용하려면 다음과 같이 인터페이스 변수를 선언하고 구현 객체를 대입해야 한다.

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

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

public class RemoteControlExample {
	public static void main(String[] args) {
    	RemoteControl rc;
        rc = new Television();
        rc = new Audio();
    }
}
profile
개발에 재미를 붙여보기 :)

0개의 댓글