JAVA 인터페이스

박승현·2022년 3월 27일
0

JAVA

목록 보기
12/16

인터페이스

인터페이스란 객체간 상호 작용을 위한 일종의 규약이다.

인터페이스 문법

인터페이스는 상수와 추상 메서드를 멤버로 가질 수 있다. 추상 메서드와 일반 멤버를 모두 가질 수 있는 추상 클래스보다 더 기본적인 구조라고 한다. 인터페이스는 키워드로 interface를 사용하며 제어자로 상수 앞에는 public final static을 메서드 앞에는 public abstract를 붙인다.

interface 인터페이스이름{
	public static final 데이터타입 변수명 =;
    
    public abstract 반환타임 메서드이름(매개변수);
}

제어자를 생략하더라도 에러가 발생하지 않는다. 컴파일러에서 자동으로 제어자를 추가하기 때문이다.
인터페이스는 상속한다는 말 대신에 구현한다는 말을 사용한다. 자식 클래스는 키워드 implements를 사용해서 인터페이스를 구현한다. 인터페이스를 구현한 자식 클래스는 오버라이딩을 통해 인터페이스 내부의 추상 메서드를 구체적으로 구현해야 한다.

interface A{
	int a = 4; // 제어자 생략가능
    void methodA(); // 제어자 생략가능
    void methodB();
}

class B implements A{
	public void methodA{
    	/*구체적인 구현, 오버라이딩*/
    }
    
    public void methodB{
    	/*구체적인 구현, 오버라이딩*/
    }
}

오버라이딩을 할 때는 부모의 접근제어자보다 더 넓거나 같은 범위의 제어자를 사용해야 한다. 그러므로 public 제어자를 붙이고 오버라이딩 해야 한다.

하나의 클래스가 상속을 받으면서 구현을 동시에 할 수도 있다.

class B extends C implements A{
	/*
    
    C의 멤버
    
    A의 멤버
    
    */
}

인터페이스 간 상속이 가능하다. 클래스는 다중상속이 불가했지만 인터페이스는 다중 상속이 가능하다.

interface A{
	void methodA();
}

interface B{
	void methodB();
}

interface C extends A,B{

}

인터페이스의 실제 활용

A프로그래머와 B프로그래머가 하나의 프로젝트를 진행했을 때, A 프로그래머와 B프로그래머가 서로의 클래스가 완성되지 않았어도, 구현해야 할 기능들을 미리 협의하고 반환타입을 정해 놓으면 서로의 작업의 정도와는 무관하게 진행한다. 바로 이런 약속과 같은 것이 인터페이스이다.

interface Providable{
	void leisureSports();
	void sightseeing();
	void food();
}

class KoreaTour implements Providable{

	@Override
	public void leisureSports() {
		System.out.println("한강에서 수상스키 투어");
	}

	@Override
	public void sightseeing() {
		System.out.println("경복궁 관람 투어");
	}

	@Override
	public void food() {
		System.out.println("전주 비빔밥 투");
	}
	
}

class TourGuide{
	private Providable tour = new KoreaTour();
	
	public void leisureSports() {
		tour.leisureSports();
	}
	
	public void sightseeing() {
		tour.sightseeing();
	}
	
	public void food() {
		tour.food();
	}
}

public class Interface1 {

	public static void main(String[] args) {
		TourGuide guide = new TourGuide();
		guide.leisureSports();
		guide.sightseeing();
		guide.food();
	}

}

인터페이스와 다형성

특정한 인터페이스를 구현한 인스턴스의 해당 인터페이스 타입의 참조변수로 참조가 가능하다.

인터페이스명 참조변수이름 = new 클래스명();
interface Camera{
	void Photo();
}

interface Call{
	void calling();
}

interface Memo{
	void write();
}

interface Clock{
	void clock();
}

class MyCellPhone implements Camera,Call,Memo,Clock{

	@Override
	public void clock() {
		
	}

	@Override
	public void write() {
		
	}

	@Override
	public void calling() {
		
	}

	@Override
	public void Photo() {
		
	}
	
}

class PhoneUser{
	void call(Call c) {
		System.out.println("전화를 걸었습니다.");
	}
}

public class Interface1 {

	public static void main(String[] args) {
		MyCellPhone phone1 = new MyCellPhone();
		Camera phone2 = new MyCellPhone();
		Call phone3 = new MyCellPhone();
		Memo phone4 = new MyCellPhone();
		Clock phone5 = new MyCellPhone();
		PhoneUser user1 = new PhoneUser();
		user1.call(phone3);
		user1.call(phone1);
	}

}

profile
그냥 해보자 안되더라도 해보자 끝까지 해보자

0개의 댓글

관련 채용 정보