본문 바로가기
토이프로젝트 - allt

23.05.20

by J1-H00N 2023. 5. 20.

다음주부터 제대로 java강의를 시작하기에 주말에도 잠깐 예습하기로 했다

package nadocoding.Chap_07;

/*
클래스를 이용하여 햄버거를 자동으로 만드는 프로그램을 작성하시오

1. 햄버거의 종류는 햄버거, 치즈버거, 새우버거 3가지
2. 각 버거는 각각의 클래스로 생성
3. 버거 이름을 담기 위한 name 변수 정의
4. 재료 정보를 표시하는 cock() 메소드 정의
5. 공통 부분은 상속 및 메소드 오버라이딩으로 처리
6. 모든 클래스는 하나의 파일에 정의
*/

public class _Quiz_07 {
    public static void main(String[] args) {
        HamBurger[] hamBurgers = new HamBurger[3];
        hamBurgers[0] = new HamBurger();
        hamBurgers[1] = new CheeseBurger();
        hamBurgers[2] = new ShrimpBurger();


        System.out.println("주문하신 메뉴를 만듭니다.");
        for (HamBurger hamBurger : hamBurgers) {
            hamBurger.cock();
            System.out.println("-----------------");
        }
        System.out.println("메뉴 준비가 완료되었습니다.");
    }
}

class HamBurger {
    public String name;

    public HamBurger() {
        this("햄버거");
    }

    public HamBurger(String name) {
        this.name = name;
    }

    public void cock() {
        System.out.println("재료는 양상추, 패티, 피클입니다.");
    }
}

class ShrimpBurger extends HamBurger {
    public ShrimpBurger() {
        super("새우버거");
    }

    @Override
    public void cock() {
        System.out.println("재료는 양상추, 패티, 피클, 새우입니다.");
    }
}

class CheeseBurger extends HamBurger {
    public CheeseBurger() {
        super("치즈버거");
    }

    @Override
    public void cock() {
        System.out.println("재료는 양상추, 패티, 피클, 치즈입니다.");
    }
}

 

package nadocoding.Chap_08;

import nadocoding.Chap_08.Camera.Camera;
import nadocoding.Chap_08.Camera.FactoryCam;
import nadocoding.Chap_08.Camera.SpeedCam;

public class _01_AbstractClass {
    public static void main(String[] args) {
        // 데이터 추상화 (Data Abstraction) : 불필요한 정보는 숨기고 필요한 정보만 공개하는 과정
        // abstract
        // 추상 클래스 (아직 완성되지 않은 클래스)
        // 추상 메소드 (추상 클래스 또는 인터페이스에서만 사용 가능한, 껍데기만 있는 메소드)

        // Camera camera = new Camera(); // abstract class 라서 직접 객체를 생성하지 못함
        FactoryCam factoryCam = new FactoryCam();
        // Camera factoryCam = new FactoryCam(); // 부모 클래스로서 자식 클래스를 통한 객체 만들기는 가능
        factoryCam.showMainFeature();

        SpeedCam speedCam = new SpeedCam();
        // Camera speedCam = new SpeedCam();
        speedCam.showMainFeature();
    }
}
package nadocoding.Chap_08.Camera;

// _01
public abstract class Camera {
    public void takePicture() {
        System.out.println("사진을 촬영합니다.");
    }

    public void recordVideo() {
        System.out.println("동영상을 녹화합니다.");
    }

    public abstract void showMainFeature(); // 추상 메소드는 선언만하고 함수를 따로 만들지 않음, 자식 클래스에서 구현해야 한다.
}
package nadocoding.Chap_08.Camera;

// _01

public class FactoryCam extends Camera {
    @Override // 추상 클래스에서 구현해야 하는 추상 메소드 필수 생성
    public void showMainFeature() {
        System.out.println("화재 감지");
    }
}
package nadocoding.Chap_08.Camera;

// _01

public class SpeedCam extends Camera {
    @Override
    public void showMainFeature() {
        System.out.println("속도 측정, 번호 인식");
    }
}

 

package nadocoding.Chap_08;

import nadocoding.Chap_08.Camera.FactoryCam;
import nadocoding.Chap_08.Detector.AdvancedFireDetector;
import nadocoding.Chap_08.Detector.Detectable;
import nadocoding.Chap_08.Detector.FireDetector;
import nadocoding.Chap_08.Reporter.NormalReporter;
import nadocoding.Chap_08.Reporter.Reportable;
import nadocoding.Chap_08.Reporter.VideoReporter;
// import nadocoding.Chap_08.Reporter.*;

public class _02_Interface {
    public static void main(String[] args) {
        // 인터페이스 (뼈대만 제공)
        // 단일상속 (extends) 해결 가능
        NormalReporter normalReporter = new NormalReporter();
        // Reportable normalReporter = new NormalReporter();
        normalReporter.report(); //일반 화재 신고를 진행합니다.

        VideoReporter videoReporter = new VideoReporter();
        // Reportable videoReporter = new VideoReporter();
        videoReporter.report(); // 직전 30초 영상과 함께 신고를 진행합니다.

        System.out.println("----------------------------------");

        Detectable fireDetector = new FireDetector();
        fireDetector.detect(); // 일반 성능으로 화재를 감지합니다.

        Detectable advancedFireDetector = new AdvancedFireDetector();
        advancedFireDetector.detect(); // 향상된 성능으로 화재를 감지합니다.

        System.out.println("----------------------------------");

        FactoryCam factoryCam = new FactoryCam();
        factoryCam.setDetector(advancedFireDetector);
        factoryCam.setReporter(videoReporter);

        factoryCam.detect(); // 향상된 성능으로 화재를 감지합니다.
        factoryCam.report(); // 직전 30초 영상과 함께 신고를 진행합니다.
    }
}
package nadocoding.Chap_08.Reporter;

// _02

public interface Reportable {
    public static final String name = "감지자"; // 인터페이스에서 생성되는 변수는 public static final을 자동으로 생략한다.
    public abstract void report(); // 신고 // 인터페이스에서 생성되는 메소드는 public abstract를 자동으로 생략한다.
}
package nadocoding.Chap_08.Reporter;

// _02

public class NormalReporter implements Reportable {
    @Override // 인터페이스에서 구현한 메소드 필수 생성
    public void report() {
        System.out.println("일반 화재 신고를 진행합니다.");
    }
}
package nadocoding.Chap_08.Reporter;

// _02

public class VideoReporter implements Reportable {
    @Override
    public void report() {
        System.out.println("직전 30초 영상과 함께 신고를 진행합니다.");
    }
}
package nadocoding.Chap_08.Detector;

// _02

public interface Detectable {
    void detect(); // 감지
}
package nadocoding.Chap_08.Detector;

// _02

public class FireDetector implements Detectable {
    @Override
    public void detect() {
        System.out.println("일반 성능으로 화재를 감지합니다.");
    }
}
package nadocoding.Chap_08.Detector;

// _02

public class AdvancedFireDetector implements Detectable {
    @Override
    public void detect() {
        System.out.println("향상된 성능으로 화재를 감지합니다.");
    }
}
package nadocoding.Chap_08.Camera;

// _01

import nadocoding.Chap_08.Detector.Detectable;
import nadocoding.Chap_08.Reporter.Reportable;

public class FactoryCam extends Camera implements Detectable, Reportable { // implements를 통해 여러개의 상속 가능
    @Override // 추상 클래스에서 구현해야 하는 추상 메소드 필수 생성
    public void showMainFeature() {
        System.out.println("화재 감지");
    }

//    _02
//    public void detect() {
//        System.out.println("화재를 감지합니다.");
//    }
//
//    public void report() {
//        System.out.println("화재 신고를 진행합니다.");
//    }

    private Detectable detector; // 미리 만들어놓은 FireDetector 등의 class를 이용하기 위한 과정
    private Reportable reporter;

    public void setDetector(Detectable detector) {
        this.detector = detector;
    }

    public void setReporter(Reportable reporter) {
        this.reporter = reporter;
    }

    @Override
    public void detect() {
        detector.detect();
    }

    @Override
    public void report() {
        reporter.report();
    }
}

 

package nadocoding.Chap_08;
/*
인터페이스를 이용하여 과속 단속 카메라에 교통 사고 감지 및 신고 기능을 추가하시오.

1. 과속 단속 카메라인 SpeedCam 클래스의 detect(), report() 개선
2. 교통 사고를 감지하는 AccidentDetector 클래스 신규 생성
3. 신고 기능은 기존에 작성된 VideoReporter 클래스 활용
4. 모든 클래스는 적절한 위치에 정의

public class _Quiz_08 {
    public static void main(String[] args) {
        SpeedCam speedCam = new SpeedCam();
        speedCam.setDetector(new AccidentDetector());
        speedCam.setReporter(new VideoReporter());
        speedCam.detect();
        speedCam.report();
    }
}
를 통해 테스트

실행결과
교통사고를 감지합니다.
직전 30초 영상과 함께 신고를 진행합니다.
*/

import nadocoding.Chap_08.Camera.SpeedCam;
import nadocoding.Chap_08.Detector.AccidentDetector;
import nadocoding.Chap_08.Reporter.VideoReporter;

public class _Quiz_08 {
    public static void main(String[] args) {
        SpeedCam speedCam = new SpeedCam();
        speedCam.setDetector(new AccidentDetector());
        speedCam.setReporter(new VideoReporter());
        speedCam.detect();
        speedCam.report();
    }
}
package nadocoding.Chap_08.Reporter;

// _02

public class VideoReporter implements Reportable {
    @Override
    public void report() {
        System.out.println("직전 30초 영상과 함께 신고를 진행합니다.");
    }
}
package nadocoding.Chap_08.Detector;

public class AccidentDetector implements Detectable {
    @Override
    public void detect() {
        System.out.println("교통사고를 감지합니다.");
    }
}
package nadocoding.Chap_08.Camera;

// _01

import nadocoding.Chap_08.Detector.Detectable;
import nadocoding.Chap_08.Reporter.Reportable;

public class SpeedCam extends Camera implements Detectable, Reportable {
    @Override
    public void showMainFeature() {
        System.out.println("속도 측정, 번호 인식");
    }

    // _02
//    public void detect() {
//        System.out.println("사고를 감지합니다.");
//    }
//
//    public void report() {
//        System.out.println("사고 신고를 진행합니다.");
//    }
    private Detectable detector;
    private Reportable reporter;

    public void setDetector(Detectable detector) {
        this.detector = detector;
    }

    public void setReporter(Reportable reporter) {
        this.reporter = reporter;
    }

    @Override
    public void detect() {
        this.detector.detect();
    }

    @Override
    public void report() {
        this.reporter.report();
    }
}

'토이프로젝트 - allt' 카테고리의 다른 글

23.05.19  (0) 2023.05.19
23.05.18  (0) 2023.05.18
23.05.17  (0) 2023.05.17
23.05.16  (0) 2023.05.16
23.05.15  (0) 2023.05.15