08-43.1 인터페이스란?
Def) 인터페이스: 구현은 하지 않고 기능만 선언해 쭉 가지고 있는것을 말한다.
08-43.2 인터페이스 만들기
(1) javaStudy 패키지 마우스 오른쪽 > New > Interface
(2) name: TV 입력 후, finish
(3)
<hide/>
package javaStudy;
public interface TV {
}
- 원래 class라고 적힌곳에 interface 라고 적혀있다.
(4) turnOn 메서드를 추가
<hide/>
package javaStudy;
public interface TV {
public void turnOn();
}
- 메서드이므로 괄호를 꼭 넣어준다.
- 앞서 공부한 단원에서 추상메서드는 항상 abstract을 붙여줘야 에러가 나지 않는다
- 그런데 인터페이스는 abstract을 붙이지 않아도 에러가 나지 않는다.
- 인터페이스 자제가 구현은 없고 기능을 선언만 하기 때문이다.
(5) 다른 메서드도 추가한다.
<hide/>
package javaStudy;
public interface TV {
public int MIN_VOLUME = 0;
public int MAX_VOLUME = 0;
public void turnOn();
public void turnOff();
public void changeVolume(int volume);
public void changeChannel(int channel);
}
- 전원 끄는 turnOn, 전원 켜는 turnOff, 볼륨을 바꾸는 changeVolume, changeChannel 메서드 선언한다.
- changeVolume 메서드는 어느 정도 값으로 바꿀지 값을 알아야 하므로 볼륨값을 받아오도록 정의한다.
(changeChannel도 마찬가지이다.)
-> 0 ~ 100까지 볼륨값을 받도록 한다.
-> 0 ~ 100까지 고정하는 숫자: 상수
-> MAX_VOLUME, MIN_VOLUME을 이용한다.
-> 인터페이스는 자체적으로 타입의 역할을 할 수도 있지만 구현이 하나도 없기 때문에
-> 인터페이스 자체가 객체를 생성하지는 못한다.
08-43.3 인터페이스 사용하기 실습
Ex 1) Meter 인터페이스는 start와 stop이라는 추상 메서드가 있다. stop메서드는 택시가 달린 거리(distance)를 매개변수로 받아 요금은 int형으롭 반환하는 메서드입니다. Meter 인터페이스를 구현하는 택시클래스를 완성하라
(요금 = 2 * distance )
<hide/>
package javaStudy;
public class Taxi {
// 정답 채우기
}
<hide/>
package javaStudy;
public interface Meter {
public abstract void start();
public abstract int stop(int distance);
}
<hide/>
package javaStudy;
public class MeterExam {
public static void main(String[] args) {
Taxi taxi = new Taxi();
boolean a = Meter.class.isInstance(taxi);
if( a!= true ){
System.out.println("Taxi클래스는 Meter 인터페이스를 구현해야 합니다.");
}
else if( taxi.stop(200) != 400 ){
System.out.println("stop(200)의 값은 400이어야 합니다.");
}
else {
System.out.println("정답입니다.");
}
}
}
Note) 출력 결과: 정답입니다.
- 정답
<hide/>
package javaStudy;
public class Taxi implements Meter {
@Override
public void start() {
// TODO Auto-generated method stub
}
@Override
public int stop(int distance) {
// TODO Auto-generated method stub
return 2 * distance;
}
}
- 인터페이스를 구현하기 위한 키워드는 implements이다.
- Meter인터페이스는 start(), stop()메서드를 정의하므로 Taxi클래스는 두 메서드를 반드시 구현해야 한다.
- stop 메서드에 대한 조건에 맞추어 Meter인터페이스를 구현하는 Taxi 클래스에 메서드를 만든다.
08-43.4 인터페이스 사용하기 실습
Ex 2) 다음 코드를 실행하면 "cannot assign a value to final varoable BASE_FARE"라는 에러가 난다. Meter 인터페이스에서 정의한 BASE_FARE(기본요금)이라는 변수의 값을 변경하려고 하기 때문이다. 인터페이스에서 정의한 변수는 모두 상수이므로 변경할 수 없다. BASE_FARE 정의한 부분을 Mete인터페이스에서 Taxi클래스로 옮겨라.
<hide/>
package javaStudy;
public interface Meter {
public int BASE_FARE = 3000;
public abstract void start();
public abstract int stop(int distance);
}
<hide/>
package javaStudy;
public class Taxi implements Meter {
public void start() {
System.out.println("운행을 시작합니다.");
}
public int stop(int distance) {
int fare = BASE_FARE + distance * 2;
System.out.println("운행을 종료합니다. 요금은 " + fare + "원입니다.");
return fare;
}
}
<hide/>
package javaStudy;
public class TaxiExam {
public static void main(String[] args) {
Taxi taxi = new Taxi();
System.out.println("기본요금 변경 전!!");
taxi.stop(20);
taxi.BASE_FARE = 2500;
System.out.println("기본요금 변경 후!!");
taxi.stop(20);
}
}
Note) 정답
package javaStudy;
public class Taxi implements Meter {
public void start() {
System.out.println("운행을 시작합니다.");
}
public int BASE_FARE = 3000;
public int stop(int distance) {
int fare = BASE_FARE + distance * 2;
System.out.println("운행을 종료합니다. 요금은 " + fare + "원입니다.");
return fare;
}
}
< hide/>
package javaStudy;
public interface Meter {
public abstract void start();
public abstract int stop(int distance);
}
Note) 실행결과:
- Meter인터페이스에 선언한 "BASE_FARE= 3000"을 Taxi클래스로 옮긴다.
- 인터페이스에 선언한 변수는 무조건 상수로 처리 된다.
- 이렇게 선언한 변수는 실행 중에 변경할 수 없다.
'Java > 모두의 자바' 카테고리의 다른 글
Chapter 08-46 내부 클래스 (0) | 2022.02.11 |
---|---|
Chapter 08-45 인터페이스의 default 메서드 (0) | 2022.02.11 |
Chapter 07-42 클래스 형변환 (0) | 2022.02.09 |
Chapter 07-41 오버라이딩(Overriding) (0) | 2022.02.08 |
Chapter 07-40 super과 부모 생성자 (0) | 2022.02.08 |