7.클래스 - (7) 인터페이스(interface)

한승록·2023년 5월 1일
0
post-thumbnail

1) 인터페이스의 개념

인터페이스 추상 클래스의 한 종류로 모든 필드는 public static final 속성을 포함합니다.
interface Exam1 {

	public int NUM1 = 10;
	// Illegal modifier for the interface field Exam1.
    // NUM1; only public, static & final are permitted
    // -> 세가지 속성 이외의 속성을 걸었을때 에러 메시지

    
}
해당 속성들을 포함함으로써 가지는 특성은 다음과 같습니다.
  • public은 누구나 접근이 가능하도록 합니다.
  • static 속성으로 인한 특징으로 클래스명으로 접근이 가능하다는 점입니다.
  • final은 입력값이 변화하지 않는다는 특성을 가집니다.




2) 인터페이스 상속

인터페이스 역시 추상화 클래스이므로 상속이 가능합니다.
그러나 일반적으로 상속에 'extends'가 사용되는것에 반해 인터페이스에서는 'implements'가 사용됩니다.
interface Exam2 {
	
    public void inherit();
	
}

class Exam2_1 implements Exam2 {

	@Override
    public void inherit() {
    
    	System.out.println("Exam2로 부터 상속받음");
    
    }
}

<※ 결과는 다음과 같습니다.>

여기서!!! 저는 해당 개념을 처음 접했을때 이런 의문이 들었습니다.

그냥 일반적인 추상 클래스를 사용하면 되는것이 아닐까?
일반적 추상화 클래스와 다르게 인터페이스는 미완성 메서드만 가질 수 있는데 더 비효율적인것 같은데?

하지만 인터페이스에는 엄청난 장점이 있는데 그것이 바로 다중 상속기능입니다.
class PC {
	// PC는 USB타입의 장치를 연결할 수 있다
	void connect(USB device) {
		device.onConnect(); // 연결된 장치마다, 연결되었을 때 수행하는 동작이 있다
	}
}


interface USB {
	/*public abstract*/void onConnect();
	// 함수형 인터페이스를 만들기 위해서는 메서드가 하나만 있어야 함
}

class DataCable implements USB {

	@Override
	public void onConnect() {
		System.out.println("데이터를 전송할 준비가 되었습니다");
	}
	
}

class Keyboard implements USB {

	@Override
	public void onConnect() {
		System.out.println("키보드가 연결되었습니다");
	}
	
}

class Mouse implements USB {

	@Override
	public void onConnect() {
		System.out.println("마우스가 연결되었습니다.");
	}
	
}
이처럼 명확한 장점이 있기 때문에 인터페이스 클래스를 사용하여 일반적 추상 클래스 이상의 효율을 낼 수 있는 것입니다.
profile
개발 학습

0개의 댓글