24.08.02

윤지현·2024년 8월 2일

TIL

목록 보기
30/75
  • Java 팀프로젝트 2일차이다.
    오늘은 그 전에 만들었던 Subject 클래스를 수정하고 기능을 할 수 있는 메서드를 만드는 것이 목표이다.
    오늘은 점심에 한 번 미팅을 하면서 기존에 있던 클래스를 열거형인 enum 클래스로 만들어서 했으면 좋겠다는 의견이 나왔다.
    순간적으로 어... 어떻게 사용하지?🤔 하면서 고민하다가 팀원분들꼐서 많이 도와주셨다.(정말 감사합니다!!😭)
  • enum이란?
➡ 상수 집합을 정의하는데 사용되는 특수한 데이터 타입
-------------------------------------------------------
🔻 타입 안전성
	- enum은 상수 집합을 타입으로 정의하기 때문에, 잘못된 값을 사용하거나 비교할 때 컴파일 타임에 오류를 발생
    -------------------------------------------------------
🔻 상속
	- enum은 java.lang.Enum 클래스를 상속받기 때문에, 직접 상속할 수 없습니다. 즉, enum은 다른 클래스를 상속할 수 없다.
    -------------------------------------------------------
🔻 내부 메서드
	- enum은 values(), valueOf(String name), ordinal(), name() 등의 메서드를 기본으로 제공
    -------------------------------------------------------

Subejct라는 클래스에서 필수과목(Java, 객체지향, Spring, JPA, MySQL)과 선수과목(디자인 패턴, Spring Security, Redis, MongoDB)를 열거 상수로 지정
SubjectManager 클래스는 필요가 없어졌다.

import java.util.Arrays;

public enum Subject {

    Java(1, "Java", true),
    ObjectOriented(2, "객체지향", true),
    Spring(3, "Spring", true),
    JPA(4, "JPA", true),
    MySQL(5, "MySQL", true),

    DesignPattern(6, "디자인 패턴", false),
    SpringSecurity(7, "Spring Security", false),
    Redis(8, "Redis", false),
    MongoDB(9, "MongoDB", false);

    private final int subId;
    private final String subName;
    private final boolean subType;

    Subject(int subId, String subName, boolean subType) {
        this.subId = subId;
        this.subName = subName;
        this.subType = subType;
    }

    public int getSubId() {
        return subId;
    }

    public String getSubName() {
        return subName;
    }

    public boolean isSubType() {
        return subType;
    }

    public static Subject getSubjectById(int subId) {
        Subject[] subjects = Subject.values();
        return Arrays.stream(Subject.values())
                .filter(v -> v.subId == subId).findFirst().orElseThrow(() -> new IllegalArgumentException("잘못된 ID를 입력하셨습니다."));
    }
}

수강생을 등록할 AddStudent 클래스를 만들었다.
수강생을 등록할 때 최소 필수 과목은 3개, 선택 과목은 2개는 등록해야한다.(수강생의 고유번호, 이름, 과목번호입력)

import java.util.*;

public class AddStudent implements ManagementActionFunction{
    @Override
    public void action(ManagementApplication managementApplication){

        Scanner scanner = managementApplication.getScanner();

        System.out.print("수강생의 고유번호를 입력해주세요 : ");
        int stdNo = scanner.nextInt();
        scanner.nextLine();
        System.out.print("이름을 입력하세요 : ");
        String stdName = scanner.nextLine();

        int maxRequiredCount = 0;
        int maxElectiveCount = 0;

        List<Subject> subjects = new ArrayList<>();

        System.out.println("필수과목을 입력해주세요(최소 3개)");
        while (maxRequiredCount < 3) {
            System.out.print("과목번호를 입력해주세요 (종료하려면 -1 입력) : ");
            int subNo = scanner.nextInt();
            scanner.nextLine();
            if (subNo == -1) {
                if (maxRequiredCount < 3) {
                    System.out.println("필수 과목을 3개 이상 입력해야합니다.");
                    return;
                }
                break;
            }

            Subject subject = Subject.getSubjectById(subNo);
            if (subject.isSubType()) {
                subjects.add(subject);
                maxRequiredCount++;
            }
        }

        System.out.println("선택과목을 입력해주세요(최소 3개)");
        while (maxElectiveCount < 2) {
            System.out.print("과목번호를 입력해주세요 (종료하려면 -1 입력) : ");
            int subNo = scanner.nextInt();
            scanner.nextLine();

            if (subNo == -1) {
                if (maxElectiveCount < 2) {
                    System.out.println("선수 과목을 2개 이상 입력해야합니다.");
                    return;
                }
                break;
            }

            Subject subject = Subject.getSubjectById(subNo);
            if (!subject.isSubType()) {
                subjects.add(subject);
                maxElectiveCount++;
            }
        }

        // 필수 과목 3개, 선택 과목 2개를 최소 가지고 있는 확인
        if (maxRequiredCount < 3 || maxElectiveCount < 2) {
            System.out.println("등록 실패: 필수 과목 3개와 선택 과목 2개 이상의 조건을 만족해야 합니다.");
            return;
        }

        Student student = new Student(stdNo, stdName, subjects);
        managementApplication.getStudentMap().put(stdNo, student);
        System.out.println("학생이 성공적으로 등록되었습니다.");
    }
}

또한 수강생을 삭제하는 DeleteStudent 클래스를 생성했다. (ManagementActionFunction라는 interface를 통해 DeleteStudent라는 클래스로 인터페이스 구현)

import java.util.*;

public class DeleteStudent implements ManagementActionFunction {

    @Override
    public void action(ManagementApplication managementApplication) {
        Map<Integer, Object> studentMap = managementApplication.getStudentMap();

        Scanner scanner = new Scanner(System.in);

        // 학생 ID 입력 받기
        System.out.print("삭제할 수강생의 ID를 입력해주세요 : ");
        int idToDelete = scanner.nextInt();

        // 학생 삭제
        Student removedStudent = (Student) studentMap.remove(idToDelete);

        if (removedStudent != null) {
            System.out.println("수강생의 ID가 " + idToDelete + "인 정보가 삭제되었습니다..");
        } else {
            System.out.println("ID가 " + idToDelete + "인 수강생의 정보가 없습니다.");
        }
    }
}

수강생을 수정하는 클래스인 EditStudent 클래스도 만들었다.
(위의 DeleteStudent와 마찬가지로 인터페이스 구현)

import java.util.*;

public class EditStudent implements ManagementActionFunction {

    @Override
    public void action(ManagementApplication managementApplication) {
        Scanner scanner = new Scanner(System.in);
        Map<Integer, Object> studentMap = managementApplication.getStudentMap();

        // 학생 ID 입력 받기
        System.out.print("수정할 수강생의 ID를 입력해주세요 : ");
        int idToChange = scanner.nextInt();
        scanner.nextLine();

        Student student = (Student) studentMap.get(idToChange);
        if (student != null) {
            System.out.println("새로 바꿀 이름을 입력해주세요 : ");
            String name = scanner.nextLine();

            student.setName(name);
            System.out.println("수강생의 이름이 수정되었습니다 : " + name);
        } else {
            System.out.println("ID가 " + idToChange + "인 수강생의 정보가 없습니다.");
        }
    }
}

한 번..... 테스트 해보자!!!!

  • 등록
  • 조회
  • 수정
  • 삭제

흠.... 잘된 것 같다!!!!

  • 후기
    오늘 작업한 내용들을 마치고 앞으로 어떻게 할지에 대하여 이야기를 나누었다. 아직 merge는 하지 않고 주말 동안 각자 맡은 역할들을 하면서 월요일에 다시 미팅한 다음에 하기로 했다.
    내가 맡은 역할 : 수강생 상태 클래스 생성 및 특정 상태일 때 수강생 목록 조회
profile
첫 시작

0개의 댓글