728x90
반응형
SMALL

인터페이스 역할

인터페이스는 두 객체를 연결하는 역할을 한다.

 

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

인터페이스는 '~.java'형태의 소스 파일로 작성되고 '~.class'형태로 컴파일되기 때문에 물리적 형태는 클래스와 동일하다.

 

인터페이스 선언

interface 인터페이스명 {...} //default 접근 제한
public interface 인터페이스명 {...} //public 접근 제한
public interface 인터페이스명{
	//public 상수 필드
    //public 추상 메소드
    //public 디폴트 메소드
    //public 정적 메소드
    //private 메소드
    //private 정적 메소드
}

 

구현 클래스 선언

public class B implements 인터페이스명{...}

 

변수 선언과 구현 객체 대입

RemoteControl rc;
RemoteControl rc = null;//인터페이스는 참조 타입에 속하므로 null대입 가능
rc = new Television;
rc.turnOn();

 

상수 필드

인터페이스는 public static final 특성을 갖는 불변의 상수 필드를 멤버로 가질 수 있다.

public static final은 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.

[public static final] 타입 상수명 = 값;
public interface RemoteControl{
	int MAX_VOLUME = 10;
    int MIN_VOLUME = 0;
}

 

추상 메소드

인터페이스는 구현 클래스가 재정의해야 하는 public 추상 메소드를 멤버로 가질 수 있다.

중괄호{}가 붙지 말아야 한다.

public abstract를 생략하더라도 컴파일 과정에서 자동으로 붙게 된다.

[public abstract] 리턴타입 메소드명(매개변수, ...);

 

디폴트 메소드

인터페이스에는 완전한 실행코드를 가진 디폴트 메소드를 선언할 수 있다. 추상 메소드는 실행부({})가 없지만 디폴트 메소드는 실행부가 있다.

[public] default 리턴타입 메소드명(매개변수, ...){...}

 

정적 메소드

정적 메소드 선언도 가능하며 객체가 없어도 인터페이스만으로 호출할 수 있다.

[public | private] static 리턴타입 메소드명(매개변수, ...) {...}

 

private 메소드

구분 설명
private 메소드 구현 객체가 필요한 메소드
private 정적 메소드 구현 객체가 필요 없는 메소드

 

다중 인터페이스 구현

구현 객체는 여러 개의 인터페이스를 implements할 수 있다.

public class 구현클래스명 implements 인터페이스A, 인터페이스B{
	//모든 추상 메소드 재정의
}
인터페이스A 변수 = new 구현클래스명(...);
인터페이스B 변수 = new 구현클래스명(...);

 

인터페이스 상속

인터페이스도 다른 인터페이스를 상속할 수 있으며, 클래스와 달리 다중 상속을 허용한다.

extends 키워드 뒤에 인터페이스들을 나열한다.

public interface 자식인터페이스 extends 부모인터페이스1, 부모인터페이스2 {...}
자식인터페이스 변수 = new 구현클래스(...);
부모인터페이스1 변수 = new 구현클래스(...);
부모인터페이스2 변수 = new 구현클래스(...);

 

타입 변환

인터페이스의 타입 변환은 인터페이스와 구현 클래스 간에 발생한다.

인터페이스 변수에 구현 객체를 대입하면 자동 타입 변환된다.

인터페이스 타입을 구현 클래스 타입은 강제 타입 변환이 필요하다.

 

자동 타입 변환

인터페이스 변수 = 구현 객체; //자동 타입 변환

 

강제 타입 변환

구현 클래스 변수 = (구현클래스) 인터페이스 변수; //강제 타입 변환
728x90
반응형
LIST

'IT > JAVA' 카테고리의 다른 글

[JAVA] #10 라이브러리 모듈  (0) 2023.04.18
[JAVA] #9 중첩 선언과 익명 객체  (0) 2023.04.17
[JAVA] #7 상속  (0) 2023.04.11
[JAVA] #6 클래스(Class)-2  (0) 2023.04.10
[JAVA] #6 클래스(Class)-1  (0) 2023.04.10

+ Recent posts