
작업 순서는 DTO -> DAO -> MainClass
지금 해놓은 코드에서 더 할 만한 것은
1. MainClass 의 while 문 종료 조건 추가
2. DAO 클래스에서 코드가 겹치는 작업이 있음 (select, update, delete)
- 일단 '삭제/수정/검색'할 항목이 존재하는지 검증해야 하는 루틴
3. 검색 루틴에서 검색 조건을 구체화 할 수 있음
4. 업데이트 루틴에서 업데이트 할 항목을 구체화 할 수 있음
5. 삭제 루틴에서 배열을 앞으로 옮겨줘야 함, 그 이후에 삭제하는 것으로 중간에 비는 항목 처리 가능
- 이것은 ArrayList를 사용하면 의미가 없는 작업이기는 함.
DTO 클래스
package dto;
// Data Transform Object : DTO
public class StudentDTO {
private int number;
private String name;
private double height;
private String address;
public StudentDTO() { }
public StudentDTO(int number, String name, double height, String address) {
this.number = number;
this.name = name;
this.height = height;
this.address = address;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "StudentDTO{" +
"number=" + number +
", name='" + name + '\'' +
", height=" + height +
", address='" + address + '\'' +
'}';
}
}
DAO 클래스
- CRUD 메소드의 이름을 insert, delete, select, update로 변경함
- print, search 메소드 추가
package dao;
import dto.StudentDto;
import java.util.Scanner;
// Data Access Object : DAO (CRUD) -> insert, delete, select, update로 변경
public class StudentDao {
private Scanner sc;
private StudentDto[] students = new StudentDto[10];
private int count; // 배열 크기 관리를 위한 저장용 변수
public StudentDao() {
sc = new Scanner(System.in);
count = 0; // 초기화
// 테스트용 데이터
students[0] = new StudentDto(1, "김일성", 169, "평양시");
students[1] = new StudentDto(2, "김정일", 170, "평양시");
students[2] = new StudentDto(3, "김정은", 175, "평양시");
students[3] = new StudentDto(4, "김여정", 160, "평양시");
students[4] = new StudentDto(5, "리설주", 164, "평양시");
}
// 함수 4개 만들어야 함
public void insert() { // 추가
System.out.println("학생 추가");
System.out.print("번호 >>> ");
int number = sc.nextInt();
System.out.print("이름 >>> ");
String name = sc.next();
System.out.print("신장 >>> ");
double height = sc.nextDouble();
System.out.print("주소 >>> ");
String address = sc.next();
students[count] = new StudentDto(number, name, height, address);
/* // 객체 생성 후 배열에 삽입 (같은 내용)
StudentDTO dto = new StudentDTO(number, name, height, address);
students[count] = dto;*/
count++;
}
public int search(String name) {
int index = -1;
for (int i=0; i<students.length; i++) {
StudentDto dto = students[i];
if (dto != null && name.equals(dto.getName())) {
index = i;
break;
}
}
return index;
}
public void delete() { // 삭제
System.out.println("학생 삭제");
System.out.print("삭제할 학생 이름 >>> ");
String name = sc.next();
// 방법1 - 인덱스 번호로 삭제하기
// 검색
int index = -1;
for (int i=0; i<students.length; i++) {
StudentDto dto = students[i];
if (dto != null && name.equals(dto.getName())) {
index = i;
break;
}
}
// 삭제
if (index == -1) {
System.out.println("학생정보를 찾을 수 없습니다!");
return;
}
students[index] = null;
System.out.println("학생이 삭제되었습니다");
// 방법2 - 배열이 아니고 컬렉션을 사용한다면, 이렇게
/* StudentDto dto = null;
for (StudentDto st : students) {
if (st != null && name.equals(st.getName())) {
dto = st; // 이 부분에 주목
}
}
if (dto == null) {
System.out.println("학생정보를 찾을 수 없습니다");
return;
}
// 배열이기 때문에 이 부분 추가
for (int i=0; i<students.length; i++) {
if (dto == students[i]) {
students[i] = null;
}
}
dto = null;
System.out.println("학생 데이터가 삭제되었습니다");*/
}
public void select() { // 검색
System.out.println("학생 검색");
System.out.print("검색할 학생 이름 >>> ");
String name = sc.next();
int index = search(name);
if (index == -1) {
System.out.println("학생정보를 찾을 수 없습니다!");
return;
}
System.out.println("학생정보입니다.");
System.out.println(students[index]);
}
public void update() { // 수정
System.out.println("학생 수정");
System.out.print("수정할 학생 이름 >>> ");
String name = sc.next();
int index = search(name);
System.out.println("학생정보입니다.");
System.out.println(students[index]);
System.out.println("수정할 주소 입력");
String address = sc.next();
students[index].setAddress(address);
System.out.println("수정이 완료되었습니다.");
}
public void print() {
for (int i=0; i< students.length; i++) {
StudentDto st = students[i];
if (st != null) {
System.out.println(st.toString());
}
}
}
}
MainClass 코드
package main;
import dao.StudentDAO;
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// menu
StudentDAO dao = new StudentDAO();
while (true) {
System.out.println("< 행복관리 프로그램 >");
System.out.println("1. 학생추가");
System.out.println("2. 학생삭제");
System.out.println("3. 학생검색");
System.out.println("4. 학생수정");
System.out.println("5. 모두출력");
System.out.print("메뉴번호를 입력 >>> ");
int menu = sc.nextInt();
switch (menu) {
case 1:
dao.insert();
break;
case 2:
dao.delete();
break;
case 3:
dao.select();
break;
case 4:
dao.update();
break;
case 5:
dao.print();
break;
}
}
}
}
'Java > Examples' 카테고리의 다른 글
| [Java] 클래스 연습 - 랜덤 주사위 수 맞추기 게임 (2) | 2025.01.03 |
|---|---|
| [Java] 클래스 연습 + getter, setter (3) | 2025.01.03 |
| [Java] 파일 입출력 연습 (2) | 2025.01.03 |
| [Java] 배열의 요소를 랜덤 셔플하는 함수 (4) | 2024.12.31 |
| [Java] 2차원 배열을 1차원 배열로 반환하는 함수 (2) | 2024.12.31 |




