본문 바로가기
> 프로그래밍 언어/JAVA

[나도코딩] 자바기본편 - 섹션 8 (3)

by 자몽주스 2023. 4. 16.
728x90
반응형

chap_07.zip
0.01MB

패키지

package chap_07;

import java.util.Random;

public class _11_Package {

	public static void main(String[] args) {
		// 패키지 : 연관된 클래스들 묶어놓는 것
		// import : 다른 패키지에 있는 걸 사용하겠다는 걸 알림
// Random 클래스 : 어떤 값을 랜덤으로 뽑을 수 있는 것
		// Random 객체 // 객체이름 : random
		Random random = new Random();
		// int 의 범위 내에서 정수형 값 반환
		System.out.println("랜덤 정수: " + random.nextInt());
		// 0 ~ 10 미만의 정수형 값 반환
		System.out.println("랜덤 정수 (범위) : " + random.nextInt(10));
		// 0.0 ~ 1.0 미만의 실수형 값 반환
		System.out.println("랜덤 정수 : " + random.nextDouble());

		// 만약 5.0 이상 10.0 미만의 실수를 뽑으려면??
		double min = 5.0;
		double max = 10.0;
		System.out.println("랜덤 실수 : " + (min + (max - min) * random.nextDouble()));
		
		System.out.println("랜덤 boolean : " + random.nextBoolean());
	
		// 로또 번호를 랜덤으로 뽑으려면? (1 ~ 45)
		System.out.println("로또 번호 : " + (random.nextInt(45)+1));
		// nextInt(45) : 0 이상 45 미만의 수
		// nextInt(45) + 1 : 1 이상 46 미만의 수 = 1 이상 45 이하의 수 
	}

}
1. 왜 객체부터 생성을 하는지 ( 왜 객체생성이 필수인지)
Random random = new Random();
상속 (전반전)

package chap_07.camera;

public class Camera {
	public String name;

	public Camera() {
		this.name = "카메라";
	}

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

	public void recordVideo() {
		// 동영상 녹화
		System.out.println("동영상을 녹화합니다");
	}
}
1. this를 사용한 이유

package chap_07.camera;

public class FactoryCam {
	public String name;

	public FactoryCam() {
		this.name = "공장 카메라";
	}

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

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

	public void detectFire() {
		// 화재감지
		System.out.println("화재를 감지합니다");
	}

}

package chap_07.camera;

public class SpeedCam {
	public String name;

	public SpeedCam() {
		this.name = "과속단속 카메라";
	}

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

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

	public void checkSpeed() {
		// 속도 체크
		System.out.println("속도를 측정합니다");
	}

	public void recognizeLicensePlate() {
		// 번호 인식
		System.out.println("차량 번호를 인식합니다.");

	}
}

package chap_07;

import chap_07.camera.Camera;
import chap_07.camera.FactoryCam;
import chap_07.camera.SpeedCam;

public class _12_inheritance {

	public static void main(String[] args) {
		// 상속
		
		// 객체 생성
		Camera camera = new Camera();
		FactoryCam factoryCam = new FactoryCam();
		SpeedCam speedCam = new SpeedCam();
		
		System.out.println(camera.name);
		System.out.println(factoryCam.name);
		System.out.println(speedCam.name);
		
		camera.takePicture();
		factoryCam.recordVideo();
		speedCam.takePicture();
	}

}
상속 (후반전)

package chap_07.camera;

public class Camera { // 부모 클래스 : 기능을 물러주는 클래스 = Camera class
	// 부모 클래스는 하나만 상속 가능
	// FactoryCam 하고 SpeedCam은 Camera의 기능을 이어받아 쓰게되는 "자식 클래스"
	public String name;

	public Camera() {
		this.name = "카메라";
	}

	public void takePicture() {
		// 사진촬영
		System.out.println(this.name + " : 사진을 촬영합니다");
	}

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

package chap_07.camera;

public class FactoryCam extends Camera { // 자식 클래스
	// extends 적어서 Camera 로부터 상속을 하게됨

	public FactoryCam() {
		this.name = "공장 카메라";
	}

// Camera 상속하니까 Camera에 있는 부분 지워준다.

	public void detectFire() {
		// 화재감지
		System.out.println("화재를 감지합니다");
	}

}

package chap_07.camera;

public class SpeedCam extends Camera { // 자식 클래스
	// Camera 상속하니까 Camera에 있는 부분 지워준다.
	public SpeedCam() {
		this.name = "과속단속 카메라";
	}

	public void checkSpeed() {
		// 속도 체크
		System.out.println("속도를 측정합니다");
	}

	public void recognizeLicensePlate() {
		// 번호 인식
		System.out.println("차량 번호를 인식합니다.");

	}
}

package chap_07;

import chap_07.camera.Camera;
import chap_07.camera.FactoryCam;
import chap_07.camera.SpeedCam;

public class _12_inheritance {

	public static void main(String[] args) {
		// 상속
		
		// 객체 생성
		Camera camera = new Camera();
		FactoryCam factoryCam = new FactoryCam();
		SpeedCam speedCam = new SpeedCam();
		
		System.out.println(camera.name);
		System.out.println(factoryCam.name);
		System.out.println(speedCam.name);
		
		camera.takePicture();
		factoryCam.recordVideo();
		speedCam.takePicture();
		
		factoryCam.detectFire();
		speedCam.checkSpeed();
		speedCam.recognizeLicensePlate();
	}

}
오버라이딩

package chap_07;

import chap_07.camera.Camera;
import chap_07.camera.FactoryCam;
import chap_07.camera.SpeedCam;

public class _13_MethodOverriding {

	public static void main(String[] args) {
		// 메소드 오버라이딩 : 자식클래스에서 부모클래스의 메소드를 덮어 쓰는 것
		// 부모클래스에 써있는 메소드를 자식클래스에서 재정의
		Camera camera = new Camera();
		FactoryCam factoryCam = new FactoryCam();
		SpeedCam speedCam = new SpeedCam();
		
		camera.showMainFeature();
		factoryCam.showMainFeature();
		speedCam.showMainFeature();
		
	}

}

package chap_07.camera;

public class Camera { // 부모 클래스 : 기능을 물러주는 클래스 = Camera class
	// 부모 클래스는 하나만 상속 가능
	// FactoryCam 하고 SpeedCam은 Camera의 기능을 이어받아 쓰게되는 "자식 클래스"
	public String name;

	public Camera() {
		this.name = "카메라";
	}

	public void takePicture() {
		// 사진촬영
		System.out.println(this.name + " : 사진을 촬영합니다");
	}

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

	public void showMainFeature() {
		System.out.println(this.name + "의 주요기능 : 사진촬영,동영상 녹화"); // FactoryCam이나 SpeedCam에도 똑같이 사용 가능

	}
}

package chap_07.camera;

public class FactoryCam extends Camera { // 자식 클래스
	// extends 적어서 Camera 로부터 상속을 하게됨

	public FactoryCam() {
		this.name = "공장 카메라";
	}

// Camera 상속하니까 Camera에 있는 부분 지워준다.

	public void detectFire() {
		// 화재감지
		System.out.println("화재를 감지합니다");
	}
	public void showMainFeature() {
		System.out.println(this.name + "의 주요기능 : 화재감지"); 
		// FactoryCamd의 객체를 통해갖고
		// showMainFeature을 호출하게 되면, showMainFeature메소드가 Camera에 있는 showMainFeature를 덮어써서
		// FactoryCam에 있는 showMainFeature에 있는 메소드가 호풀되는것

	}
}

package chap_07.camera;

public class SpeedCam extends Camera { // 자식 클래스
	// Camera 상속하니까 Camera에 있는 부분 지워준다.
	public SpeedCam() {
		this.name = "과속단속 카메라";
	}

	public void checkSpeed() {
		// 속도 체크
		System.out.println("속도를 측정합니다");
	}

	public void recognizeLicensePlate() {
		// 번호 인식
		System.out.println("차량 번호를 인식합니다.");
	}
	@Override // 주석. annotation. 부모클래스의 메소드를 오버라이딩 하고 있는 것
		public void showMainFeature() {
		System.out.println(this.name + "의 주요기능 : 속도 측정, 번호 인식"); 
		}
}
728x90
반응형