Dev/Java

Java - 클래스 이용 차 관리 연습

surimi🍥 2020. 8. 14. 10:03
반응형
public class Car {
	private String number;
	private int year;
	private int price;
	private String color;
	private String type;
	
	//캡슐화
	public void setNumber(String number) {
		this.number = number;
	}
	
	public String getNumber() {
		return number;
	}
	
	public void setYear(int year) {
		this.year = year;
	}
	
	public int getYear() {
		return year;
	}
	
	public void setPrice(int price) {
		this.price = price;
	}
	
	public int getPrice() {
		return price;
	}
	
	public void setType(String type) {
		this.type = type;
	}
	
	public String getType() {
		return type;
	}
	
	public void setColor(String color) {
		this.color = color;
	}
	
	public String getColor() {
		return color;
	}
	
	//자동차의 시동을 거는 메소드
	//화면에 부릉부릉이란 메시지만 출력하게 만들어보자
	void turnOn(){
		System.out.println("부릉부릉!");
	}
	
	//자동차의 정보를 출력하는 메소드
	void print() {
		System.out.printf("차량번호: %s, 차종: %s\n", number, type);
		System.out.printf("연식: %d년 가격: %d원 색상: %s\n", year, price, color);
	}
	
	//자동차의 가격을 비교하는 메소드
	void comparePrice(Car c) {
		if(price > c.price) {
			System.out.println("메소드를 실행하는 "+number+" 차량이 더 비쌉니다.");
		}else {
			System.out.println("파라미터인"+c.number + " 차량이 더 비쌉니다.");
		}
	}
	
	// Car 클래스 생성자
	// 1. 파라미터가 있는 생성자
	public Car(String number) {
		//파라미터로 넘어온 number를 우리의 필드 number에 넣어보자!
		//만약 필드와 파라미터의 이름이 같다면
		//필드에 앞에 this. 을 붙여서
		//이 메소드를 호출하는 객체의 필드라는 것을 입력하면 된다.
		this.number = number;
	}
	
	// 2. 파라미터가 없는 생성자
	public Car() {
		//파라미터가 없는 생성자의 경우
		//우리가 임의 값을 호출해주는 대신
		//참조형 데이터타입의 필드에 대한
		//생성자를 호출해 주는 것이 가장 좋은 방법이다!
		
		number = new String();
		color = new String();
		type = new String();
	}
	
	
	
	
	//toString() 재정의하기
	//toString()은
	//java.lang.Object에서
	//public String toString() 으로 적혀있다.
	//우리가 오버라이드한다면 똑같이 선언해 주어야 한다!!!!
	
	public String toString() {
		//여기서 필드 이름: 필드값 요런식으로 String을 만들어서 리턴해주면 된다.
		String returnValue = new String();
		returnValue += "차량 번호: " + number;
		returnValue += ", 차종: "+type;
		returnValue += ", 연식: "+year;
		returnValue += ", 색상: "+color;
		returnValue += ", 가격: "+price;
		
		return returnValue;
		
	}
	
	//equals 오버라이드
	public boolean equals(Object obj) {
		
		//"야 다각형이면 파라미터로 다 올 수 있어"
		//-> "그중에서 사각형만 나와봐"
		//-> "너네들 세부사항이 같니?"
		//-> "같으면 return true"
		
		//먼저 Object obj가 이 클래스(Car)의 객체인지 확인한다
		//만약 obj가 Car 클래스의 객체이면 이 메소드 내부에서
		//임시로 Car c 라고 호칭할 수 있게 형변환해준다.
		//그 후에 이 메소드를 실행하는 객체의 필드와 c의 필드를 비교해서
		//차량 번호와 차종이 같으면 true를 리턴한다.
		
		//obj가 Car의 객체인지 확인할 때에는
		//instanceof 라는 키워드를 사용하면 된다.
		
		if(obj instanceof Car) {
			
			//만약 obj가 Car의 객체라면 이 조건식이 true가 나온다.
			//그렇다면 우리가 형변환을 통해 임시로 Car c라는 객체로 만들어줄 수 있다.
			
			Car c = (Car)obj;
			
			//그렇게 한 후에 c의 필드와 이 메소드를 실행하는 객체의 필드의 값을 비교하면 된다.
			
			if(number.equals(c.number) && type.equals(c.type)) {
				return true;
			}
		}
		
		return false;
	}
}











public class CarEx01 {
	public static void main(String[] args) {
		//객체를 만들어봅시다
		//객체는
		//클래스이름 객체이름 = 뉴 클래스이름();
		//로 만들어줄 수 있다.
		Car c = new Car();
		
		//객체의 필드나 메소드를 접근할 때에는
		//객체이름.필드 혹은 객체이름.메소드로 접근 가능하다.
		//객체이름.필드 는 하나의 변수처럼 우리가 쓸 수 있다.
//		c.number = "00가 0000";
//		c.year = 2020;
//		c.type = "페라리";
//		c.color = "빨간색";
//		c.price = 10000;
		
		//캡슐화 된 필드에 값을 넣어줄때에는
		//객체의 셋터 메소드를 호출해 주면 된다.
		c.setNumber("00가 0000");
		c.setYear(2020);
		c.setType("페라리");
		c.setColor("빨간색");
		c.setPrice(10000);
		
		//System.out.println("이차의 가격: "+c.price+" 만원");
		
		//캡슐화된 필드의 값을 호출할 때에는
		//객체의 겟터 메소드를 호출해주면 된다.
		System.out.println("이차의 가격: "+c.getPrice()+" 만원");
		
		c.turnOn();
		c.print();
		
		Car c2 = new Car();
//		c2.number = "99하 9999";
//		c2.year = 2020;
//		c2.type = "K5";
//		c2.color = "흰색";
//		c2.price = 3000;
		
		c2.setNumber("99하 9999");
		c2.setYear(2020);
		c2.setType("K5");
		c2.setColor("흰색");
		c2.setPrice(3000);
		
		c2.turnOn();
		c2.print();
		
		c.comparePrice(c2);
		c2.comparePrice(c);
		
		Car c3 = new Car();
		c3.print();
		
		c3.setNumber("99하 9999");
		c3.setYear(2020);
		c3.setType("K5");
		c3.setColor("흰색");
		c3.setPrice(3000);
		
		System.out.println(c);
		System.out.println(c2);
		System.out.println(c3);
		
		//System.out.println() 에
		//객체를 파라미터로 넘기면
		//해당 객체의 toString() 메소드의 string 결과값을
		//화면에 출력한다.
		
		//c2 객체와 c3객체를 비교해보자
		System.out.println("c2.equals(c3): "+c2.equals(c3));
		
		//java.lang.Object의 equals() 메소드는 다음과 같이
		//구현되어있다.
		// public boolean equals(Object obj){
		//    return this == obj;
		// }
		
		// 위 코드에서는 우리가 생각한 값 비교 대신 주소값 비교를 하기 때문에
		// 우리가 equals()메소드를 오버라이드 하지 않고 사용하면
		// 정확한 값을 얻을 수 없다!
		
	}
}









두 클래스는 같은 패키지 안에 들어 있어야 함.

반응형

'Dev > Java' 카테고리의 다른 글

Java - 주차관리 예제  (0) 2020.08.14
Java - 클래스 이용 학생 관리 연습  (0) 2020.08.14
Java - 클래스 ( Class )  (0) 2020.08.14
Java - 예제 ) 별찍기 02  (0) 2020.08.12
Java - 예제 ) 별찍기 01  (0) 2020.08.12