CH08

yeon·2022년 12월 4일
0

이것이자바다

목록 보기
6/15

1. 인터페이스의 역할

개발 코드가 객체에 종속되지 않도록 객체를 교체 가능하게 하는 역할을 하며, 개발 코드 변경 없이도 리턴값, 실행 내용이 다양해질 수 있음 (다형성)

2. 인터페이스 선언

이름

자바 식별자 작성 규칙에 따라, 첫자는 대문자, 숫자로 시작X, 다른 단어가 결합되면 첫 알파벳은 대문자로

선언

[public] interface 인터페이스명 {...}

구성 멤버

상수, 추상메소드, 디폴트 메소드, 정적 메소드

interface Interface{
	//상수
    타입상수명 =;
    
    //추상메소드
    타입 메소드명(매개변수,,,);
    
    //디폴트 메소드
    default 타입 메소드명(매개변수,...){...}
    
    //정적 메소드
   static 타입 메소드명(매게변수){...}
}

3. 인터페이스 구현

익명 구현 객체

명시적 구현 클래스 작성 생략 하고 구현 객체 생성 (클래스 선언과 동시에 생성)

Interface a = new Interface(){
	//인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}

이벤트 처리, 임시 작업 스레스 만들기 위해 사용되고, 람다식에서 익명 구현 객체 사용 가능

다중 인터페이스 구현 클래스

public class 구현클래스명 implements interfaceA, interfaceB{
	//interface A에 선언된 추상 메소드의 실체 메소드 선언
    //interface B에 선언된 추상 메소드의 실체 메소드 선언
}

4. 인터페이스 사용

디폴트 메소드

인터페이스만으로는 사용 불가능하며, 구현 객체가 인터페이스에 대입되어야 호출 가능한 인스턴스 메소드로, 모든 구현 객체가 가지고 있는 기본 메소드로 사용되고 필요에 따라 재정의 가능함

public interface RemoteControl{
	default void setMute(boolean mute){...}
}

pubilc class Television implements RemoteControll{...}

RemoteControl rc = new Televesion();
re.setMute(true);

정적 메소드

인터페이스에서 바로 호출 가능함

pulbic interface RemoteControll{
	static void changeBattery(){
    	System.out.println("건전지 교환");
    }
}

RemoteControll.changeBattery();

6. 인터페이스 상속

인터페이스 간에도 상속 가능하며, 다중상속도 가능하고, 하위 인터페이스를 구현하는 클래스는 상위 인터페이스의 모든 추상 메소드를 재정의해야함

public interface InterfaceA{
	void methodA(){...}
}

public interface InterfaceB{
	void methodB(){...}
}

public interface InterfaceC extends InterfaceA, InterfaceB{
	void methodC(){..}
}


public class ABC implements InterfaceC{
	@Override
    void methodA(){...}
    
    @Override
    void methodB(){...}
    
    @Override
    void methodC(){...}
}


InterfaceC c = new ABC();
c.methodA();
c.methodB();
c.methodC();


InterfaceB b = new ABC();
b.methodB();

InterfaceA a = new ABC();
a.methodA();

7. 디폴트 메소드와 인터페이스 확장

디폴트 메소드는 실행 내용을 가지고 있는 메소드이므로 인터페이스 개념에 맞지 않음

인터페이스 개념
객체 사용 방법을 기술한 타입으로 메소드 선언부만 선언되면 됨

디폴트 메소드의 필요성

기존에 설계된 인터페이스에 새로운 추상 메소드를 추가하게 되면 해당 인터페이스를 구현한 모든 구현 클래스에서 에러가 발생하게 되는 문제가 있음
디폴트 메소드는 추상 메소드가 아니기 때문에 추가하게 되더라도 기존의 구현 클래스들은 문제 없이 사용 가능하며 디폴트 메소드를 재정의하는 새로운 구현 클래스를 만들 수 있음

디폴트 메소드가 있는 인터페이스 상속

부모 인터페이스의 디폴트 메소드를 자식 인터페이스에서 활용하는 방법으로 디폴스 메소드 단순 상속하는 방법, 디폴트 메소드를 재정의해 실행 내용 변경하는 방법, 추상 메소드로 재선언하는 방법이 있음

profile
🐥

0개의 댓글

관련 채용 정보