본문 바로가기
JAVA

[JAVA] 자바 인터페이스(Interface)의 기본 개념을 알아보자

by IT 정복가 2023. 8. 25.
728x90

인터페이스(Interface)는 사전적 의미로 두 장치를 연결하는 접속기라고 나온다.

인터페이스의 역할

https://hyuntaekhong.github.io/blog/java-basic20/

위의 그림으로 설명하자면

인터페이스는 '객체'와 '개발 코드A', '객체' 와 '개발 코드B'를 연결하는 역할을 한다.

 '객체'는 인터페이스를 통해 '개발코드 A''개발코드 B'를 사용할 수 있다는 것이다.

 


인터페이스와 구현 클래스 선언

인터페이스는 물리적 형태는 클래스와 동일하다.

단, 소스를 작성할 때 선언하는 방법구성 멤버가 클래스와 다르다.

인터페이스 선언

인터페이스 선언은 class 키워드 대신 interface 키워드를 사용한다.

접근제한자로는 클래스와 마찬가지로 같은 패키지 내에서만 사용 가능한 default

패키지와 상관없이 사용하는 public을 붙일 수 있다.

interface 인터페이스명{ ... }
or
public interface 인터페이스명 { ... }

{ } 안에는 인터페이스가 가지는 멤버들을 선언할 수 있는데 

다음과 같은 종류가 있다.

  • public 상수 필드
  • public 추상 메소드
  • public 디폴트 메소드
  • public 정적 메소드
  • private 메소드
  • private 정적 메소드

예제)

RemoteControl.java(인터페이스)

public interface RemoteControl {

	//public 추상 메소드
	public void turnOn();
}

 

구현 클래스 선언

https://hyuntaekhong.github.io/blog/java-basic20/

객체가 인터페이스의 추상 메소드A를 호출하면 인터페이스는 '개발 코드A'의 메소드를 실행한다.

그렇다면 '개발 코드A'는 인터페이스에 선언된 추상 메소드와 동일한 선언부를 가진 메소드를 가지고 있어야 한다.

 

'개발코드A'와 같은 구현 객체는 다음과 같이 인터페이스를 구현하고 있음을 선언부에 명시해야 한다.

public class 개발코드A implements 인터페이스명 { ... }

implements 키워드는 해당 클래스가 인터페이스를 통해 사용할 수 있다는 표시이며

인터페이스의 추상 메소드를 재정의한 메소드가 있다는 뜻이다.

 

예제) 위의 RemoteControl의 추상 메소드인 turnOn( )을 재정의 해보자.

Television.java

public class Television implements RemoteControl{

	@Override
	public void turnOn() {
		System.out.println("TV를 켭니다.");
	}
	
}

 


변수 선언과 구현 객체 대입

인터페이스도 하나의 타입이므로 변수의 타입으로 사용할 수 있다.

RemoteControl rc;
RemoteControl rc = null;

 

인터페이스를 통해 구현 객체를 사용하려면, 인터페이스 변수에 구현 객체를 대입해야 한다.

rc = new Television( );

위의 코드는 Television 객체를 생성하고 번지를 대입하는 코드이다.

 

인터페이스 변수에 구현 객체가 대입이 되었다면 변수를 통해 인터페이스의 추상 메소드를 호출할 수 있게 된다.

rc.turnOn( );

 

예제)

RemoteControl.java(인터페이스)

public interface RemoteControl {

	//public 추상 메소드
	public void turnOn();
}

 

Television.java

public class Television implements RemoteControl{

	@Override
	public void turnOn() {
		System.out.println("TV를 켭니다.");
	}
	
}

 

RemoteControlExample.java(메인 클래스)

public class RemoteControlExample {

	public static void main(String[] args) {
		
		RemoteControl rc = new Television();
		
		rc.turnOn();

	}

}


rc 변수에는 RemoteControl을 구현한 어떠한 객체든 대입이 가능하다.

만약 Audio 객체가 구현객체라면 다음과 같이 Audio 객체로 교해서 대입할 수도 있다.

rc = new Audio();
rc.turnOn();

예제)

RemoteControl.java(인터페이스)

public interface RemoteControl {

	//public 추상 메소드
	public void turnOn();
}

 

Television.java

public class Television implements RemoteControl{

	@Override
	public void turnOn() {
		System.out.println("TV를 켭니다.");
	}
	
}

 

Audio.java

public class Audio implements RemoteControl{

	@Override
	public void turnOn() {
		System.out.println("오디오를 켭니다.");
		
	}

}

 

RemoteControlExample.java(메인 클래스)

public class RemoteControlExample {

	public static void main(String[] args) {
		
		RemoteControl rc;
		rc = new Television();
		
		rc.turnOn();

		
		rc = new Audio();
		
		rc.turnOn();
	}

}

 

728x90