벌써 5주차
이제 슬슬 앞 내용이 잊혀지기 시작했다
복습은 언제 하려나
인터페이스
개발 코드와 객체가 서로 통신하는 접점 역할
개발 코드 -> 인터페이스 메소드 호출
인터페이스 -> 객체 메소드 호출
즉, 개발코드는 인터페이스 메소드만 알고 있으면 됨
인터페이스 선언 시 interface
키워드 사용
인터페이스 구조
인터페이스는 객체 생성 X -> 생성자 가질 수 없음.
interface 인터페이스 이름 {
//상수 필드
타입 상수이름 = 값;
//추상메소드
타입 메소드이름(매개변수,...);
}
인터페이스는 객체 사용 방법을 정의한 것.
데이터 저장이 가능한 인스턴스/정적 필드 선언 X
상수는 인터페이스에 고정된 값이어서 실행시 데이터 변경 X
-> 상수 필드 사용 가능
[public static final] 타입 상수이름 = 값;
public static final은 생략 가능. 컴파일 시 자동으로 붙게 됨.
인터페이스를 통해 호출된 메소드는 객체에서 실행 되기 때문에 실행 블록이 필요없어 인터페이스에서는 추상 메소드로 선언.
인터페이스의 메소드는 모두 추상 메소드. public abstract
를 생략해도 컴파일 과정에서 자동으로 붙음.
turnOn(), turnOff(), setVolume(int volume) 메소드 선언부만 작성
setVolume은 int 매개값이 필요함
구현클래스
구현 객체를 생성하는 클래스
구현객체
인터페이스에서 정의된 추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드
public class 구현클래스이름 implements 인터페이스 이름
보통의 클래스와 동일함.implements
키워드를 추가해서 인터페이스 타입으로 사용할 수 있음을 알려줘야 함. 그리고 인터페이스에 선언된 추상 메소드의 실체 메소드를 선언
인터페이스의 모든 메소드는 public 접근 제한이기 때문에 더 낮은 접근 제한으로 실체 메소드 작성 X
인터페이스 변수는 참조 타입
-> 구현객체 대입시 구현 객체의 번지를 저장함.
RemoteControl 타입 변수 rc 선언 후 구현 객체 대입.
다수의 인터페이스 타입으로 객체 사용 가능
예제로 알아보기
2개의 인터페이스의 추상 메소드를 구현 클래스에서 실체 메소드로 선언함.
클래스 선언시 인터페이스는 필드, 생성자/메소드의 매개변수, 생성자/메소드의 로컬 변수로 선언 가능
예제로 알아보기
개발코드(MyClass) -> 인터페이스(RemoteControl-추상메소드호출) -> 구현객체(Television, Audio-리모콘에 의해 메소드 실행)