작업 순서는 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;
            }

        }

    }
}

+ Recent posts