본문 바로가기
Backend/JAVA

[JAVA] 학과 프로그램 #2 - n개의 객체 입력하기

by 그적 2020. 9. 20.

학과 프로그램 만들기 #1 - jihyeong-ji99hy99.tistory.com/84

이전 학과 프로그램 #1에서 만든 클래스와 메서드를 진행하므로 #1을 보고 오도록 하자.

 

n개의 객체 입력하기

void readAll() {
	int id = 0;
	while(true) {
		id = s.nextInt();
		if(id == 0) break;
			
		Student st = new Student(id);
		st.read(s);
		studentList.add(st);		
	}
}

보통 위의 같은 코드를 생각하면 id 값을 기준으로 객체가 생성하므로 옳다고 생각할 수 있지만 위의 코드는  InputMismatchException 오류가 발생한다.  해당 오류는 왜 발생하는가?
그것은 read() 함수에서 id 값을 한번 더 읽어 들이기 때문이다. 우리가 그 다음 읽게 되는 데이터는 이름(string) 데이터이기 때문에 int형 데이터 타입과도 맞지 않게 된다.

이를 해결하기 위해서 두 가지 방법이 존재한다.

① 객체 생성자에 매개변수 넘겨주기

void readAll(){
	int id;
	while(true){
	  id = s.nextInt();
	  if(id==0) break;
	  st = new Student(id);	// Student 객체를 생성할 때 id 값을 생성자 매개변수로 준다.
	  st.read(s);
	}
}

위의 경우에는 생성자를 new Student(id) 값으로 만들었다. 따라서 다음 생성자를 만들 때도 id 값을 기준으로 만들어야 한다.

② read() 메서드에 id 값 넘겨주기

class Department(){
	st = new Student();
	st.read(s, id);
}

class Student(){
	void read(Scanner s, int id){
		this.id = id;
		name = s.next();
		...
	}
}

왜냐하면 이전 코드에서 오류 나는 부분이 id(학번) 부분을 바깥에서 입력하여 read() 메서드에 남아있던 id=nextInt(); 코드에 올바르지 않은 자료형(String name 값)이 들어가기 때문이다. 따라서 read() 메서드에 id 값을 매개변수로 넘겨주어, 디폴트 생성자를 유지시키면서 객체에 저장될 수 있도록 만든다.

댓글