[문법/자바/JAVA] 인터페이스

이나영·2022년 3월 27일
0

문법 - Java

목록 보기
6/7
post-thumbnail

🔰인터페이스(Interface)

인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. 따라서 개발자는 객체 내부 구조를 알 필요 없이 인터페이스의 메소드만 알고 있으면 된다.

  • 인터페이스명은 보통 대문자로 시작하고 형용사를 쓴다.
  • 개발 코드 측면에서 코드 변경 없이 실행 내용과 리턴값을 다양화할 수 있다.
[public] interface 인터페이스 이름 {
	// 상수
    타입 상수이름 =;
    
    // 추상 메소드
    타입 메소드이름(매개변수, .. );
}

인터페이스 선언

상수 필드 선언

  • 상수 필드 선언이 가능하지만, 고정된 값으로 실행 시 데이터 변경은 불가하다.

추상 메소드 선언

  • 메소드는 실행 불록이 필요 없는 추상 메소드로 선언한다.
  • public abstract를 생략해도 자동으로 붙는다.
  • 인터페이스의 모든 메소드는 기본적으로 public 접근 제한을 가지기 때문에 더 낮은 접근 제한으로 작성할 수 없다.

인터페이스 구현

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

구현 클래스

  • 인터페이스 타입으로 사용할 수 있음을 알려주기 위해 implements 키워드를 추가하고 인터페이스 이름을 명시한다.
  • 인터페이스에 선언된 추상 메소드의 실체 메소드를 재정의 해야한다. (안하면 오류)
  • 상속과 다르게 여러개 추가할 수 있다.!
public class 구현클래스이름 implements 인터페이스이름 {
	// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}

// RemoteControl.java

public interface RemoteControl {
	// 상수
    public int MAX_VOLUME = 10;
    public int MIN_VOLUME = 0;
    
    // 추상 메소드
    public void turnOn();
    public void turnOff();
    public void setVolume(int volume); // 메소드 선언부만 작성
}
// Television.java

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() 추상 메소드의 실체 메소드
    public void setVolume(int volume) {
    	if(volume > RemoteControl.MAX_VOLUME) {
        	this.volume = RemoteControl.MAX_VOLUME;
        }
        else if(volume < RemoteControl.MAX_VOLUME) {
        	this.volume = RemoteControl.MIN_VOLUME;
        }
        else {
        	this.volume = volume;
        }
        
        System.out.println("현재 TV 볼륨: " + this.volume);
    } // 인터페이스 상수를 이용해서 volume 필드의 값을 제한
}

구현 클래스가 적성되면 new 연산자로 객체를 생성할 수 있다.

Television tv = new Television();

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

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

// Searchable.java

public interface Searchable {
	void search(String url);
}



인터페이스 변수에 구현 객체 대입

public class SmartTelevisionExample {
	public static void main(String[] args) {
    	SmartTelevision tv = new SmartTelevision();
        
        RemoteControl rc = tv;
        Searchable searchable = tv;
    }
}



👀책 <혼공자>를 참고하여 작성하였습니다 :)

profile
소통하는 백엔드 개발자로 성장하기

0개의 댓글