코딩항해기

[실습/JAVA] Car class로 오버로딩 연습 (+풀이 0702) 본문

problem solving/과제&실습 코딩

[실습/JAVA] Car class로 오버로딩 연습 (+풀이 0702)

miniBcake 2024. 7. 2. 11:59

 

오버로딩, this() 연습

 

[실습]

class Car

  • String name
  • int speed
  • int maxSpeed

요구사항

  1. 현재 속도는 반드시 0으로 시작
  2. 최고 속도를 지정해주지 않으면 기본값 120
  3. 차주 이름은 등록하지 않으면 “무명”으로 저장됨
  4. speedUp() → 속도 50증가
  5. speedDown() → 속도 100 감소

+) speedUp(값) → 해당 값만큼 속도 증가

 

[코드 - 실습]

package class02;

class Car {
	//필드
	String name;
	int speed;
	int maxSpeed;
	
	
	//생성자
	Car() {
		this("무명",120);
	}
	
	Car(int maxSpeed){
		this("무명", maxSpeed);
	}
	
	Car(String name){
		this(name, 120);
	}

	Car(String name, int maxSpeed) {
		this.name = name;
		this.speed = 0;
		this.maxSpeed = maxSpeed;
		System.out.println("["+this.name+"]");
	}
	
	//메소드
	void speedUp() {
		speedUp(50);
	}
	void speedUp(int num) {
		System.out.println("속도가 "+num+"만큼 올라갑니다.");
		this.speed+=num;
		checkSpeed();
	}
	void speedDown() {
		System.out.println("속도가 내려갑니다.");
		this.speed-=100;
		checkSpeed();
	}
	
	void checkSpeed() {
		if(this.speed > this.maxSpeed) {
			System.out.println("최고 속도 도달");
			this.speed=this.maxSpeed;
		}
		else if(this.speed < 0) {
			System.out.println("속도가 완전히 내려가 정지합니다.");
			this.speed=0;
		}
		
		System.out.println("speed : "+this.speed);
	}
	
}
public class Test02 {
	public static void main(String[] args) {
		Car c1 = new Car();
		c1.speedUp();
		c1.speedUp(555);
		c1.speedDown();
		System.out.println();
		
		Car c2 = new Car(300);
		c2.speedUp();
		c2.speedUp(444);
		c2.speedDown();
		System.out.println();
		
		Car c3 = new Car("자동차");
		c3.speedUp();
		c3.speedUp(333);
		c3.speedDown();
		System.out.println();
		
		Car c4 = new Car("자동차", 200);
		c4.speedUp();
		c4.speedUp(2);
		c4.speedDown();
	}
}

 

 

[풀이 후 보완할 점]

 

순서는 필드 > 생성자 > 메서드 순으로 작성하는 경우가 많다.

 

void speedUp() {
		speedUp(50);
	}
	void speedUp(int num) {
		System.out.println("속도가 "+num+"만큼 올라갑니다.");
		this.speed+=num;
		checkSpeed();
	}

 

이 부분에서 코드가 겹쳐 speedUp()메소드를 호출하였는데 이런 경우는 잘 없다고 한다.

지금 실습 문제가 너무 간단해서 겹쳤기 때문에 사용 가능하지만 (안되는 건 아님!)

복잡해지면 이런 경우도 잘 없고, 오버로딩한 이유는 세세하게 다루기 위해서이기 때문에 코드가 다소 겹쳐도 좋다.

 

필드값 사용할 때는 this붙여서 구분시켜주는 걸 잊지않기!