public class Car{
	
	String carName; //전역변수 (class영역에서 선언했기 때문에 전체적으로 사용할 수 있는 변수)
	String carColor;
	String maker;
	int speed;

	public Car() { //기본 생성자 생성
		//carName = "아반떼";
		//carColor = "흰색";
		//maker = "현대";
		this ("아반떼", "흰색", "현대");
		//speed = 10;
		
	}
	
	// carName만 외부에서 받은 값으로 하고 싶다면?
	public Car(String carName) {  // 왜 cn이 아닌 carName으로 했을 때, null값이 나오는가? 전역변수의 carName은 class영역에 있고, 지역변수의 carName은 메소드 영역에 있기 때문에 같은 이름이 지정가능하다. 지역변수가 전역변수보다 먼저 적용되기 때문에 
		//this.carName = carName; //.을 찍어 새로운 객체가 형성되기 때문에 자기 자신을 참조하기 위해서는 this를 붙여야 한다. 지역변수와 전역변수가 같을 경우 반드시 this를 명시해주어야 한다.
		//carColor = "흰색"; //앞에 this가 생략되어 있음
		//maker = "현대";
		this (carName, "흰색", "현대");
	}

	// carName, carColor만 외부에서 받은 값으로 하고 싶다면?
	public Car(String carName, String carColor) { //타입이나 개수가 달라야 함!! 그냥 String cn하면 x 컴퓨터는 cn,cc를 인식하는 것이 아니라 같은 String으로 인식하기 때문!!
		//this.carName = carName;
		//this.carColor = carColor;
		//maker = "현대";
		this(carName,carColor,"현대");

	}
	
	// 초기화 내용(중복 코드)을 몰아서 작성한 생성자 this()
	public Car(String carName, String carColor, String maker) { //타입이나 개수가 달라야 함!! 그냥 String cn하면 x 컴퓨터는 cn,cc를 인식하는 것이 아니라 같은 String으로 인식하기 때문!!
		this.carName = carName;
		this.carColor = carColor;
		this.maker = maker;

	}

	void speedUp() { //접근제어자 생략 가능, ()안 인자값 생략 가능
		speed += 10;

	}

	int speedUp(int speed) { 
		this.speed += speed;
		return this.speed;

	}

	void speedDown() {
		speed -= 10;
		if(speed < 0)
			//speed = 0;
			stop(); //그냥 stop을 호출하면 됨
	}

	void stop() {
		speed = 0;
	}

}
public class CarUser{
	public static void main(String[] args) {
		Car car1 = new Car();
		System.out.println("1. " + car1.maker + "에서 만든 " + car1.carColor + " " + car1.carName + "입니다. ");
		
		car1.carName = "쏘나타";
		car1.carColor = "남색";
		car1.maker = "현대";
		System.out.println("2. " + car1.maker + "에서 만든 " + car1.carColor + " " + car1.carName + "입니다. ");

		System.out.println("속도를 5회증가!!!");
		for (int i=0;i<5;i++)
			car1.speedUp();
		System.out.println("car1의 속도 : " + car1.speed);

		System.out.println("속도를 150회증가!!!");
		int s = car1.speedUp(150);
		System.out.println("car1의 속도 : " + s);
		

		Car car2 = new Car("제네시스"); //내가 원하는 이름을 지정해서 넣을 수 있다
		System.out.println("3. " + car2.maker + "에서 만든 " + car2.carColor + " " + car2.carName + "입니다. ");

		Car car3 = new Car("그랜저", "검정색"); 
		System.out.println("4. " + car3.maker + "에서 만든 " + car3.carColor + " " + car3.carName + "입니다. ");

		//기아에서 만든 빨간색 K5입니다.

		Car car4 = new Car("K5", "빨간색", "기아"); 
		System.out.println("5. " + car4.maker + "에서 만든 " + car4.carColor + " " + car4.carName + "입니다. ");
	}
}
---------- run ----------
1. 현대에서 만든 흰색 아반떼입니다. 
2. 현대에서 만든 남색 쏘나타입니다. 
속도를 5회증가!!!
car1의 속도 : 50
속도를 150회증가!!!
car1의 속도 : 200
3. 현대에서 만든 흰색 제네시스입니다. 
4. 현대에서 만든 검정색 그랜저입니다. 
5. 기아에서 만든 빨간색 K5입니다. 

+ Recent posts