녕의 학습 기록
[Java] 인터페이스 본문
인터페이스란 객체의 사용 방법을 정의한 타입이다.
인터페이스를 두는 이유는 개발 코드를 수정하지 않고, 사용하는 객체를 중간에 변경할 수 있도록 하기 위해서이다.
즉, 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라 다양한 결과값을 가진다.
public interface RemoteControl{}
//RemoteControl이라는 인터페이스 선언
일반 클래스는 필드 / 생성자 / 메서드를 멤버로 가지지만, 인터페이스는 상수 / 메서드만을 가진다.
public interface GameRule{
//상수
int time= 30;
public static final int player = 2;
//추상 메서드
void gameSetting(//매개변수);
//디폴트 메서드
void gameReset(//매개변수){
System.out.println("게임을 리셋합니다.");
}
//정적 메서드
static void Start(){
System.out.println("게임을 시작합니다.");
}
}
인터페이스에서는 상수필드만 선언이 가능하다.
그렇기 때문에 인터페이스의 구성 필드는 전부 public static final의 특성을 가진다.(생략해도 자동으로)
public class Chess implements GameRule(){
//인터페이스 내 추상 메서드의 실체 메서드를 선언해준다
}
public class Chess implements GameRule(){ //GameRule인터페이스를 구현한 Chess 구현클래스
public void gameSetting(){
System.out.println("체스로 세팅합니다"); //추상메서드의 실체 메서드 선언
}
}
만약에 인터페이스 내 추상 메서드의 실체 메서드를 구현해주지 않는다면,
구현 클래스는 추상 클래스가 되기 때문에 선언부에 abstract 키워드를 붙여야한다.
인터페이스는 상속과는 다르게 다중 상속?이 가능하다.
public class A implements B, C {
//B에 해당하는 실체 메서드
//C에 해당하는 실체 메서드
}
인터페이스의 사용
GameRule ch; //인터페이스 변수가
ch = new Chess(); //구현 객체 참조.
GameRule ch = new Chess();
인터페이스 변수 Ch가 구현 객체를 참조하기 때문에 변수 Ch에는 객체의 번지수를 저장한다.
public class PinBall implements GameRule(){
public void gameSetting(){
System.out.println("핀볼로 세팅합니다");
}
public void gameReset(){ //인터페이스의 디폴트 메서드를 오버라이딩
System.out.println("핀볼 리셋합니다");
}
}
public class Test{
public static void main(String[] args){
GameRule ch = new Chess(); //Chess 객체를 대입
ch.gameSetting(); //결과 : 체스로 세팅합니다.
ch.gameReset(); //디폴트 메서드는 구현 객체 모두가 가지는 기본 메서드
// 결과 : "게임을 리셋합니다"
ch = new PinBall(); //PinBall 객체를 대입
ch.gameSetting(); //핀볼로 세팅합니다.
ch.gameReset(); //구현 클래스에서 오버라이딩 했으므로 다른 결과
// 결과 : "핀볼 리셋합니다."
}
}
외에 인터페이스의 정적 메서드는 객체 필요 없이 인터페이스로 바로 호출 가능하다.
public class Test{
public static void main(String[] args){
GameRule.gameStart(); //객체 없이 바로 정적 메서드 호출
}
}
'Dev > Java' 카테고리의 다른 글
[Java Exception] NoSuchBeanDefinitionException (0) | 2022.11.05 |
---|---|
[Java Exception] java.lang.NullPointerException (0) | 2022.10.27 |
[Java] 추상클래스 (0) | 2022.07.27 |
[Java] 다형성 (0) | 2022.07.21 |
[Java] 접근 제한자 / 싱글톤 패턴 / Getter , Setter (0) | 2022.07.19 |