2022. 8. 30. 20:46ㆍJava 프로그램
오늘은 interface를 배워보겠습니다!
우선 인터페이스란?
- 코딩한 코드와 객체가 서로 통신하는 접점입니다.
역할은?
- 코드가 객체에 종속되지 않게 하도록 하는 역할
- 객체와 코드 사이에서 중개역할
- 개발코드 변경 없이 리턴값 또는 실행 내용이 다양해질수 있는 다형성을 다룸
인터페이스선언)
[public] interface 인터페이스명{
//상수
타입 상수명 = 값;
//추상 메소드
타입 메소드명(매개변수,...);
//디폴트 메소드
default 타입 메소드명(매개변수,...){..}
//정적 메소드
static 타입 메소드명(매개변수){...}
}
[상수 필드 선언]
1. 인터페이스는 상수필드만 선언이 가능합니다.
2. 인터페이스에 선언된 필드는 모두 자동으로 public static final 이 됩니다. (쓰지 않아도 컴파일 과정에서 붙음)
3. 상수명은 대문자로 작성합니다.
4. 선언과 동시에 초기값 지정을 해야합니다.
[추상 메소드 선언]
1. 인터페이스의 메소드는 기본적으로 추상메소드 선언합니다.
2. public abstract를 생략하여 쓰더라도 내부적으로 알아서 붙습니다.
[Default 메소드 선언]
1. 실행 블록을 가지고 있는 메소드 입니다.
2. 앞에 default를 반드시 붙혀줘야 합니다. static final이나 abstract처럼 자동으로 붙지 않습니다.
3. public은 생략해도 자동으로 붙습니다.
이제 예제를 보겠습니다.
public interface RemoteControl {
//public static final int MAX_VOLUME = 10;
int MAX_VOLUME = 10; // 상수
int MIN_VOLUME = 0; // 상수
void turnOff(); // public abstract 생략
void turnOn(); // public abstract 생략
public void setVolume(int volume);
}
인터페이스명 : RemoteControl
필드 : MAX_VOLUME = 10;, MIN_VOLUME
추상메소드: turnOff(); , turnOn();
첫번째 구현 객체
public class Audio implements RemoteControl {
private int volume;
@Override
public void turnOff() {
System.out.println("Audio를 끕니다.");//인터페이스에 선언된 추상 메소드의 실체를 가진 메소드
}
@Override
public void turnOn() {
System.out.println("Audio를 켭니다.");//인터페이스에 선언된 추상 메소드의 실체를 가진 메소드
}
@Override
public void setVolume(int volume) { //인터페이스에 선언된 추상 메소드의 실체를 가진 메소드
if(volume > RemoteControl.MAX_VOLUME) {
this.volume = RemoteControl.MAX_VOLUME;
}else if(volume <= RemoteControl.MIN_VOLUME) {
this.volume = RemoteControl.MIN_VOLUME;
} else {
this.volume = volume;
}
System.out.println("현재 Audio volume : " + this.volume);
}
}
이건 Audio라는 객체를 만든 클래스입니다.
두번째는 Television이라는 객체를 만든 클래스
public class Television implements RemoteControl {
private int volume;
@Override
public void turnOff() {
System.out.println("TV를 끕니다.");// Audio에서 Tv로 바뀜
}
@Override
public void turnOn() {
System.out.println("Tv를 켭니다.");// Audio에서 Tv로 바뀜
}
@Override
public void setVolume(int volume) {
if(volume > RemoteControl.MAX_VOLUME) {
this.volume = RemoteControl.MAX_VOLUME;
}else if(volume <= RemoteControl.MIN_VOLUME) {
this.volume = RemoteControl.MIN_VOLUME;
} else {
this.volume = volume;
}
System.out.println("현재 TV volume : " + this.volume);// Audio에서 Tv로 바뀜
}
}
다른 점은 출력하는 이름만 다르지만 서로 다른 객체라는 점을 아셔야합니다. 결국 인터페이스를 사용해 각자의 객체만 교체하여 만든 것이라는 것을 인지하여 인터페이스를 왜 사용하는지에 대한 역할에 대해 이해 하셔야합니다.
그렇다면 실행코드를 보겠습니다.
public class RemoteControlEx {
public static void main(String[] args) {
RemoteControl rc;
rc = new Audio(); //promotion
rc.turnOn(); //polymorphism
rc.setVolume(7);
rc.turnOff();
rc = new Television();
rc.turnOn();
rc.setVolume(7);
rc.turnOff();
}
}
이렇게 생성에 따라 결과 값은
이렇게 다르게 나오는걸 확인 할 수 있습니다.
인터페이스가 왜필요하고 이것을 썼을 때와 안썻을 때의 차이점을 알고 넘어가신다면 문제 없을 것 같습니다.
감사합니다.
'Java 프로그램' 카테고리의 다른 글
자바 기본 API 1편 (0) | 2022.09.30 |
---|---|
예외처리(Exception) (2) | 2022.09.20 |
클래스 상속- 다형성 (0) | 2022.08.30 |
상속 (클래스 상속)/ @Override (0) | 2022.08.30 |
Class(클래스) (0) | 2022.08.30 |