본문 바로가기
코리아 IT아카데미/Java

5일차 | 학생과 교통수단 클래스 설계, 마법사·전사 전투 과제

by Sharon kim 2021. 10. 25.
복습 순서
메모
ch04>
Bus
BusMainTest
Student
StudentMainTest
Subway
SubwayMainTest
UserInfo
UserInfoMainTest
ch05>
Bus
MainTest
Student
Subway




ex1>
MainTest1
Warrior
Wizard





 

버스 클래스 :  ctrl + space 기본생성자 

package ch04;

public class Bus {
	// 버스 번호
	// 승객 수
	// 수입
	int busNumber;
	int passengerCount;
	int money;
	
	//생성자가 기본 생성자를 만들지 않으면,
	// 컴파일러가 기본 생성자를 만들어 준다.
	
	public Bus(int busNumber){
		this.busNumber = busNumber;
	}
	public void take(int money) {
//		this.money = money + money;
		this.money += money;
		passengerCount++;
		
	}
	public void showInfo() {
		System.out.println(busNumber + "번의 승객은");
		System.out.println(passengerCount + "명이고");	
		System.out.println("현재 수입은 " + money + "원입니다.");	
		}
}

버스 클래스 사용

package ch04;

public class BusMainTest {
	//main function_start of main
	public static void main(String[] args) {
		// 버스 101, 102 버스를 만들어 주세요
		Bus bus101 = new Bus(101);
		Bus bus102 = new Bus(102);
		//
		bus101.showInfo();
		System.out.println("-------------------");
		bus102.showInfo();
		//
		bus101.take(1200);
        
		System.out.println("-------------------");
        
		bus101.showInfo();
		
		System.out.println("-------------------");
        
		//bus102 버스에 take 2번 실행 showInfo 확인
		bus102.take(1200);
		bus102.take(1200);
		bus102.showInfo();
		
	}//end_main
}//end_class

학생 클래스

package ch04;

public class Student {
	
	//기본 생성자 
	//사용자 정의 생성자가 없는 경우에는
	//컴파일러가 알아서 기본 생성자를 만들어 준다.
	//기본 생성자 모양 : 
	public Student() {
		
	}// - 생성자 : 객체가 생성되어 s2의 빨간 밑줄이 없어진다.
	
	//생성자 - constructor
	//객체를 생성할 때 다음과 같은 모양으로 만들라고 지시하는 것(강제성 부여됨)
	//멤버변수
	int number;
	String name;
	int grade;
	
	//생성자 만들기 (개발자가 직접 정의 - 사용자 정의 생성자)
	//grade 넣고 코드를 정상 동작하게 수정해 주세요
	public Student(int num, String name, int grade) {
		number = num;			//**매개변수
		this.name = name;
		this.grade = grade;
		//멤버변수와 매개변수의 이름이 같다면 this.키워드를
		//사용해서 구분해 주어야 한다.
		//this.name, this.grade =>멤버변수 
		
		//**매개변수 (parameter)
		//매개변수는 메소드, 생성자를 선언할 때, 
		//어떤 형태로 데이터값이 들어올지 정의해준다.
		
	}//end of St() - 생성자
		
	//메서드 정의
	public void showInfo() {
		System.out.println(name + "의 학번은 " 
	+ number + "이고 \n" + grade + "학년입니다." );
	}//end of show()
}//end of class

학생 클래스 사용

package ch04;

public class StudentMainTest {
	
	//main function _ start of code
	public static void main(String[] args) {
			//new Student : 생성자
		Student s1 = new Student(1, "홍길동", 3);
                  //모양 맞추기 Student(int Num)
					
		System.out.println(s1.number);
		System.out.println(s1.name);
		System.out.println(s1.grade);
		
		s1.showInfo();
		System.out.println("-----------------");
		
		//기본 생성자로 객체 생성해보기
		//Student s2  = new Student();
		//s2.grade = 2;
		//s2.name = "이순신";
		//s2.number = 2;
		Student s2  = new Student(2, "이순신", 2);
		
		System.out.println(s2.number);
		System.out.println(s2.name);
		System.out.println(s2.grade);
		s2.showInfo();
        
	}//end of main
}//end of class

지하철 클래스

package ch04;

public class Subway {
	
	int lineNumber;//호선번호
	int passengerCount;//승객수
	int money;//수익금
	
	//생성자 - 호선번호를 받는 생성자 만들기
	public Subway(int lineNumber) {
		this.lineNumber = lineNumber;
	}
	//메서드 take , showInfo
	public void take(int money) {
		this.money += money;
		passengerCount++;
	}
	public void showInfo() {
		System.out.println(lineNumber + "호선 승객은");
		System.out.println(passengerCount + "명이고");	
		System.out.println("현재 수입은 " + money + "원입니다.");	
	}
}//end of c

지하철 클래스 사용

package ch04;

public class SubwayMainTest {

	public static void main(String[] args) {
		// subway 객체 3개 생성
		Subway subway1 = new Subway(1);
		Subway subway2 = new Subway(2);
		Subway subway3 = new Subway(3);
		
		// 각각 take 메서드 실행 후
		subway1.take(1500);
	
		subway2.take(1300);
		subway2.take(1300);
	
		subway3.take(1300);
		subway3.take(1300);
		subway3.take(1300);
		//showInfo 메서드 실행 시켜 주세요
		subway1.showInfo();
		System.out.println("---------------");
		subway2.showInfo();
		System.out.println("---------------");
		subway3.showInfo();
		
	}
}

생성자 오버로딩

: 생성자의 매개변수의 유형과 개수가 다르게 하여 같은 이름의 생성자를 여러 개 가질 수 있다.

  • 생성자도 메소드와 마찬가지로 여러개를 선언할 수 있다.
  • 매개변수의 수와 타입이 다르다면 여러개의 생성자를 선언할 수 있다.
package ch04;

public class UserInfo {
	
	String userId;
	String userPassword;
	String userName;
	String userAddress;
	String phoneNumber;
	
	public UserInfo(String userId) {
		//super();->지우기
		this.userId = userId;
	}

	public UserInfo(String userId, String userPassword) {
		
		this.userId = userId;
		this.userPassword = userPassword;
	}
	
	public void showInfo() {
		System.out.println("userId : " + userId);
		System.out.println("userPassword : " + userPassword);
	}
	//자동 생성자 만들기
	//alt+shift+s > Generate Constructor using Fields > 체크
	
	
	//생성자 오버로딩
	//중요! 생성자는객체가 생성될 때 처음 실행되는 코드이다.
	
//	//1. 기본 생성자를 만들어 주세요
//	public UserInfo() {}
//	
//	//2.  userId만 받는 생성자
//	public UserInfo(String userId) {
//		this.userId =userId;
//	}
//	//3. userId, userPassword만 받는 생성자
//	public UserInfo(String userId, String userPassword) {
//		this.userId =userId;
//		this.userPassword = userPassword;
//	}
//	//4. userId, userPassword, userName만 받는 생성자
//	public UserInfo(String userId, String userPassword,String userName) {
//		this.userId =userId;
//		this.userPassword = userPassword;
//		this.userName = userName;
//	}
//	//5. userId, userPassword, userName, userAddress만 받는 생성자
//	public UserInfo(String userId, String userPassword,
//			String userName, String userAddress) {
//		this.userId =userId;
//		this.userPassword = userPassword;
//		this.userName = userName;
//		this.userAddress = userAddress;
//	}
//	//6. userId, userPassword, userName, userAddress, phoneNumber만 받는 생성자
//	public UserInfo(String userId, String userPassword,String userName, 
//			String userAddress, String phoneNumber) {
//		this.userId =userId;
//		this.userPassword = userPassword;
//		this.userName = userName;
//		this.userAddress = userAddress;
//		this.phoneNumber =phoneNumber;
//	}
}//end of class

오버로딩 생성자 클래스 사용

package ch04;

public class UserInfoMainTest {

	public static void main(String[] args) {
		
		UserInfo userInfo = new UserInfo("questzz");
		UserInfo userInfo2 = new UserInfo("user02", "1234");
		userInfo.showInfo();
		userInfo2.showInfo();
	}
}

방황하는 학생들과 고통의 교통수단 클래스

버스 클래스 복사

학생 클래스 복사

지하철 클래스 복사

학생들 집에 좀 가 클래스 사용

package ch05;

public class MainTest1 {
	
	//main function_start of code
	public static void main(String[] args) {
															
		//버스 만들기
		//ctrl + space : 자동완성
		Bus bus100 = new Bus(100);
		Bus bus200 = new Bus(200);
		Bus bus300 = new Bus(300);
		
		Student student1 = new Student("홍길동", 10_000);
		Student student2 = new Student("야스오", 50_000);
		Student student3 = new Student("티모", 20_000);
		
		Subway subway1 = new Subway(1);
		Subway subway2 = new Subway(2);
		Subway subway3 = new Subway(3);
		
		//실습
		student2.takeBus(bus300);
		student3.takeSubway(subway2);
		student1.takeSubway(subway1);
		student1.takeBus(bus100);
		student1.takeBus(bus100);
		student2.takeBus(bus100);
		student3.takeSubway(subway1);
		student2.takeBus(bus200);
		student2.takeBus(bus300);
		student2.takeSubway(subway3);
		
		bus100.showInfo();
		System.out.println("-----------------");
		bus200.showInfo();
		System.out.println("-----------------");
		bus300.showInfo();
		System.out.println("-----------------");
		subway1.showInfo();
		System.out.println("-----------------");
		subway2.showInfo();
		System.out.println("-----------------");
		subway3.showInfo();
		System.out.println("-----------------");
		student1.showInfo();
		System.out.println("-----------------");
		student2.showInfo();
		System.out.println("-----------------");
		student3.showInfo();
		
//		
//		//학생이 버스를 탄다.
//		student1.takeBus(bus100);
//		//상태창 확인
//		student1.showInfo();
//		System.out.println("-----------------");
//		
//		bus100.showInfo();
//		
//		System.out.println("-----------------");
//		student2.takeBus(bus100);
//		student2.showInfo();
//		System.out.println("-----------------");
//		
//		bus100.showInfo();
//	
//		//--------------------------------------
//		//학생들이 마치고 돌아갑니다.
//		
//		//s1 지하철을 탑니다.
//		student1.takeSubway(subway1);
//		System.out.println("-----------------");
//		student1.showInfo();
//		System.out.println("-----------------");
//		subway1.showInfo();
	}
}

ex1 과제  : 1. 클래스 설계 하고 사용,  2. getter와 setter 사용 

package ex1;
				//과제2 : getter 와 setter만들기
public class Warrior {

	//멤버변수 
	//hp, power, name
	int hp;
	int power;
	String name;
	//생성자도 만들어 주세요

	public Warrior(String name) {
		this.name = name;
	}
	
	//메서드
	//마법사(Wizard)를 공격한다.
	//상태창을 꾸며서 볼 수 있는 기능을 만들어 주세요
	public void showInfo() {
		
	}
//	public static void main(String[] args) {
//		returnRandom();
//	}
//	
//	public static void returnRandom() {
//		
//		Random random = new Random();
//		int number = random.nextInt(21);
//		System.out.println(number);
//	}

	public int getHp() {
		return hp;
	}

	public void setHp(int hp) {
		this.hp = hp;
	}

	public int getPower() {
		return power;
	}

	public void setPower(int power) {
		this.power = power;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}
package ex1;

public class Wizard {
	
	//멤버변수 
	//hp, power,name
	//생성자도 만들어 주세요
	//메서드
	//전사를 공격한다.
	//상태창을 꾸머서 볼 수 있는 기능을 만들어 주세요
}
package ex1;

public class MainTest1 {
	//프로그램을 만들어 주세요?
}

 

수업내용

[출처] https://blog.naver.com/devnote1 작성자 devnote1