Java

10.26.(수) Java-12: 인터페이스

콜라든포비 2022. 10. 30. 23:59

인터페이스

추상클래스를 활용함으로써 실행클래스에서 함수를 재정의를 강제시키는 방법을 알아봤다.

인터페이스란 일종의 추상클래스이지만, 그 성격이 훨씬 추상메소드를 위한 클래스라고 볼 수 있다.

인터페이스는 내부적으로 public static final 상수와 public abstract 함수로 구성되어야한다. 그리고 추상클래스와는 달리 일반 메소드 또한 자기자신만의 멤버변수를 가질 수 없다. 오로지 다른 클래스에게 넘겨줄 수 있는 추상메소드 및 정적 변수와 정적 메소드만 가질 수 있다. 그리고 추상클래스와 마찬가지로 자기 자신의 객체를 만들 수 없다.

package Interface1;

public interface XX {
	public int SU=10;	// static final 상수
	public void disp();	// abstract 메소드
}
package Interface1;
/*
 * class <--- class extends
 * interface <--- class implements
 * interface <--- interface extends
 * class <--- interface (이런 경우는 없음)
 */
public class YY implements XX {	// disp() 반드시 재정의

	private int value;
	
	public YY(int value) {
		this.value=value;
	}
	
	@Override
	public void disp() {
		System.out.println("수요일입니다");
		System.out.println(SU);
		System.out.println(value);
	}
	
	public void apple() {
//		SU=77;	ERROR
		value=88;
	}
}
package Interface1;

public class Ex01 {

	public static void main(String[] args) {
		// XX a=new XX();	자기 자신의 객체 못 만든다
		
		YY b=new YY(100);
		b.disp();
		System.out.println(XX.SU);
		System.out.println(YY.SU);
		
		XX c=new YY(10);
		c.disp();
		
	}
}

인터페이스를 쓰는 이유는 관계없는 함수들에게 관계를 자유롭게 만들어줄 수 있기 때문이다. 그리고 다른 클래스와는 다르게 상수와 추상메소드만으로 구성되어있어서 개발 시간을 단축시킬 수 있고, 코드 변경 없이 실행내용과 리턴값을 다양하게 구성할 수 있다는 장점이 있다.