본문 바로가기

개발자노트

컬렉션 프레임워크 {Map} 을 이용한 학생부예제

act==3 삭제부분에 주석처리된 부분이 우리가 컬렉션 프레임워크들을 공부하면 좋은 이유를 말해준다.

복잡하게 표현할 코드를 프레임워크 안에 있는 함수를 이용하여 더욱 간편하게 실행 할 수 있는 것이다.

 

package class01;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;

class Student {

	private String name; //멤버변수를 하이딩 했을 때 프로그램이 잘 적용되야 잘 된 코드
	private int score;
	
	

	public String getName() {
		return name;
	}

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

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	Student(String name) {
		this.name = name;
		Random rd = new Random();
		this.score = rd.nextInt(101);
		System.out.println(this.name + "학생 " + this.score + "점으로 등록 완료");
	}

	@Override
	public String toString() {
		return "학생이름=[" + name + "/ 점수" + score + "점]";
	}

}

public class Test01 {

	public static void main(String[] args) {

		Map<Integer, Student> data = new HashMap<Integer, Student>(); // 컬렉션에는 제네릭 꼭 쓰기!
		// 키값 , 밸류값
		Scanner sc = new Scanner(System.in);
		final int PK_START = 1001; // 키값은 1001부터 시작하는 것으로 한다. 시작된 수는 변하지 않기 때문에 final로 상수화
		int PK = PK_START;
		final int PK_MAX = 2000;
		// 유니크! 프로그램이 부여 ID->중복확인

		while (true) {
			System.out.println("1. 등록 2.출력 3.삭제 4.종료");
			System.out.println("입력) ");
			int act = sc.nextInt();
			if (act == 1) {
				// 추가할 학생의 이름을 입력하세요
				// 사용자가 학생이름 입력
				// 학생 객체를 생성
				// 생성한 객체 map에 저장
				System.out.println(); // 사용자 편의성을 위해 입력 전에 한줄 띄기
				System.out.println("학생 이름 입력) ");
				String name = sc.next();
				data.put(PK, new Student(name));
				PK++;
			}

			else if (act == 2) {
				if (data.size() == 0) {
					System.out.println("저장된 데이터가 없습니다.!");
					continue;
				}
				for (int i = PK_START; i < PK; i++) { 
					Student stu=data.get(i); // stu라는 객체에 PK_START부터 현재 등록된 PK까지 정보를 가져온다.
					if(stu==null) { // 만약 stu 객체 내용이 삭제돼서 null(없음)이면 
						continue;	// continue;로 위로 빠져나가게 한다. (아래는 출력하는 내용이기 때문에)
					}
					System.out.println(i+"번: "+stu); // 위에 continue 들을 만나지 않았다면, 결과가 있다는 뜻이기에 출력
				}

			} else if (act == 3) {
				if (data.size() == 0) {
					System.out.println("삭제 할 데이터가 없습니다.!");
					continue;
				}
				System.out.print(" 삭제할 번호 입력) ");
				int key = sc.nextInt();
				
				   /*
	            if(!data.containsKey(key)) {
	               System.out.println("해당번호의 학생이 존재하지않습니다!");
	               continue;
	            }         
	             */

				if (key < PK_START || PK_MAX < key) { // 내가 입력한 key값이 PK시작보다 작거나 PK최대보다 클 때,
					System.out.println("번호를 다시 확인하고 입력해주세요!");
					continue;
					//  삭제를 실패했을 때 멘트
				}

				Student stu = data.remove(key); // 삭제된 학생의 정보 임시저장용
				System.out.println("로그: " + stu); // remove(입력값) 에 대한 output 은 Student이다.(생성을 그렇게함)
												//즉 ,키값을 입력하면 그 키에 대한 Student 가 output
				// 로깅기법
				// ★로그
				// -> 에러원인 분석 / 찾기 /해결방안 설명하기
				if (stu == null) {
					System.out.println("존재하지않는 학생번호입니다.");
					continue;
					//  삭제를 실패했을 때 멘트
				}
				System.out.println(stu + "삭제완료..");
				
				// 2. 삭제성공 이후에 null로 출력되는걸 잡아야함.
			} else if (act == 4) {

			} else {
				System.out.println("다시 입력해주세요!");
			}

		}

	}
}