[Java] chapter_08

DEVELOPERS_Ivan ㅣ 2023. 9. 22. 18:56

인터페이스
- 인터페이스(추상클래스 : 부모클래스) : 추상클래스와 비슷,
내부에 정의되는 함수는 모두 추상함수됨
내부에 정의되는 속성은 모두 정적(공유)상수됨(static final)

- 정의 사용법 : public interface 인터페이스명 {}
- 상속 사용법 : public class 자식클래스명 implements 부모인터페이스1, ..., 부모인터페이스n {}
                         => 함수 재정의가 필요함
- 목적 : 1) 프로젝트에서 이름(함수/속성) 표준화를 위해 사용
            2) 다형성 이용
더보기
package chap08.exam01;

/**
 * packageName : chap08.exam01
 * fileName : SmartTelevisionApplication
 * author : L.DH
 * date : 2023-09-22
 * description : 실행클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class SmartTelevisionApplication {
    public static void main(String[] args) {
//      TODO: 인터페이스/추상클래스 객체 생성이 안됨
        SmartTelevision smartTelevision = new SmartTelevision();

//      TODO: 다형성 이용
        RemoteControl remoteControl = smartTelevision;
        Searchable searchable = smartTelevision;

//      기능 이용하기
        remoteControl.turnOn();   // tv 기본기능 이용
        remoteControl.turnOff();
        searchable.search("www.naver.com"); // 검색 이용
    }
    
}
더보기
package chap08.exam01;

/**
 * packageName : chap08.exam01
 * fileName : RemoteControl
 * author : L.DH
 * date : 2023-09-22
 * description : 인터페이스
 * 요약 : 인터페이스(추상클래스 : 부모클래스) : 추상클래스와 비슷,
 * 내부에 정의되는 함수는 모두 추상함수됨
 * 내부에 정의되는 속성은 모두 정적(공유)상수됨(static final)
 * 정의 사용법 : public interface 인터페이스명 {}
 * 상속 사용법 : public class 자식클래스명 implements 부모인터페이스1, ..., 부모인터페이스n {}
 * => 함수 재정의가 필요함
 * 목적 : 1) 프로젝트에서 이름(함수/속성) 표준화를 위해 사용, 2) 다형성 이용
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public interface RemoteControl {
    //  TODO : 속성 == 정적(공유) 상수(명명법 : 모두 대문자)
    int MAX_VOLUMN = 10;
    int NIM_VOLUMN = 1;

    //  TODO : 함수 == 추상함수 (실행블럭{} 없음)
    void turnOn();  // 리모콘 켜기 함수

    void turnOff();  // 리모콘 끄기 함수
}
더보기
package chap08.exam01;

/**
 * packageName : chap08.exam01
 * fileName : Searchable
 * author : L.DH
 * date : 2023-09-22
 * description : 검색 인터페이스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public interface Searchable {
    void search(String url);

}
더보기
package chap08.exam01;

/**
 * packageName : chap08.exam01
 * fileName : SmartTelevision
 * author : L.DH
 * date : 2023-09-22
 * description : 자식클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class SmartTelevision implements RemoteControl, Searchable {
//  alt + insert : 메서드 구현(선택)

    @Override
    public void turnOn() {
        System.out.println("TV를 켭니다.");
    }

    @Override
    public void turnOff() {
        System.out.println("TV를 끕니다.");
    }

    @Override
    public void search(String url) {
        System.out.println(url + " 를 검색합니다.");
    }
}

매개변수의(함수) 다형성
- 매개변수에 자식객체를 넣으면 자식객체의 함수가 호출됨
더보기
package chap08.exam02;

/**
 * packageName : chap08.exam02
 * fileName : SoundableApplication
 * author : L.DH
 * date : 2023-09-22
 * description : 매개변수의(함수) 다형성
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class SoundableApplication {
//  공유(정적, 전역 함수)
    static void printsount(Soundable soundable) {
//      TODO : 매개변수에 자식객체를 넣으면 자식객체의 함수가 호출됨(sound())
        System.out.println(soundable.sound());  //  부모 인터페이스의 함수호출
    }

    public static void main(String[] args) {
//      TODO : 함수의 매개변수의 다형성
        printsount(new Cat());  // 야옹
        printsount(new Dog());  // 멍멍
    }
}
더보기
package chap08.exam02;

/**
 * packageName : chap08.exam02
 * fileName : Soundable
 * author : L.DH
 * date : 2023-09-22
 * description : 부모 인터페이스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public interface Soundable {
    String sound();
}
더보기
package chap08.exam02;

/**
 * packageName : chap08.exam02
 * fileName : Cat
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Cat implements Soundable {
//  메소드 구현 : alt + insert : 야옹
    @Override
    public String sound() {
        return "야옹";
    }
}

 

더보기
package chap08.exam02;

/**
 * packageName : chap08.exam02
 * fileName : Dog
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Dog implements Soundable {
//  메소드 구현 : alt + insert : 멍멍
    @Override
    public String sound() {
        return "멍멍";
    }


}

연습문제) 매개변수의 다형성 예제(인터페이스 이용)
더보기
package chap07.verify.exam13;

/**
 * packageName : chap07.verify.exam13
 * fileName : DriverApplication
 * author : ds
 * date : 2022-09-30
 * description : 실행 클래스, 연습문제)인터페이스
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
// TODO: 연습문제) 매개변수의 다형성 예제(인터페이스 이용)
//      아래 결과를 보고
//      Driver(전략클래스) 클래스, Bus 클래스 , Taxi 클래스를 완성하세요
// 결과 :
//    버스가 달립니다.
//    택시가 달립니다.
public class DriverApplication {
    public static void main(String[] args) {
        Driver driver = new Driver();

        Bus bus = new Bus();
        Taxi taxi = new Taxi();

        driver.drive(bus); // 버스가 달립니다.
        driver.drive(taxi);// 택시가 달립니다.
    }
}
더보기
package chap07.verify.exam13;

/**
 * packageName : chap07.verify.exam13
 * fileName : Vehicle
 * author : ds
 * date : 2022-09-30
 * description : 인터페이스
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
public interface Vehicle {
    public void run();
}
더보기
package chap07.verify.exam13;

/**
 * packageName : chap07.verify.exam13
 * fileName : Driver
 * author : L.DH
 * date : 2023-09-22
 * description : 전략 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Driver {
    void drive(Vehicle vehicle) {
        vehicle.run();
    }
}
더보기
package chap07.verify.exam13;

/**
 * packageName : chap07.verify.exam13
 * fileName : Bus
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Bus implements Vehicle {
    @Override
    public void run() {
        System.out.println("버스가 달립니다.");
    }
}
더보기
package chap07.verify.exam13;

/**
 * packageName : chap07.verify.exam13
 * fileName : Taxi
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Taxi implements Vehicle {
    @Override
    public void run() {
        System.out.println("택시가 달립니다.");
    }
}

연습문제)다형성 예제(인터페이스 이용)
더보기
package chap07.verify.exam14;

/**
 * packageName : chap07.verify.exam14
 * fileName : VehicleApplication
 * author : ds
 * date : 2022-09-30
 * description : 실행 클래스, 연습문제)다형성 예제(인터페이스 이용)
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
// TODO: 연습문제) 아래 결과를 보고 Bus 클래스를 완성하세요.
// 결과 :
//    버스가 달립니다.
//    승차요금을 체크합니다.
public class VehicleApplication {
    public static void main(String[] args) {
        Vehicle vehicle = new Bus();

        vehicle.run(); // 버스가 달립니다.

        Bus bus = (Bus)vehicle; // 강제 타입 변환 (원복)

//        bus객체의 고유 함수 : checkFare()
        bus.checkFare();  // 승차요금을 체크합니다.
    }
}
더보기
package chap07.verify.exam14;

/**
 * packageName : chap07.verify.exam14
 * fileName : Vehicle
 * author : ds
 * date : 2022-09-30
 * description : 인터페이스
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
public interface Vehicle {
    public void run();
}
더보기
package chap07.verify.exam14;

/**
 * packageName : chap07.verify.exam14
 * fileName : Bus
 * author : L.DH
 * date : 2023-09-22
 * description :
 * 요약 : 자식 클래스
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Bus implements Vehicle {

    public void run() {
        System.out.println("버스가 달립니다.");
    }
    void checkFare(){
        System.out.println("승차요금을 체크합니다.");
    }

}

'Java' 카테고리의 다른 글

MVC 디자인 패턴  (0) 2023.09.26
[Java] chapter_10  (0) 2023.09.25
[Java] chapter_07  (0) 2023.09.21
[Java] chapter_06  (0) 2023.09.20
[Java] chapter_04 ~ 05  (0) 2023.09.19