- 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 + "인 수강생의 정보가 없습니다.");
}
}
}




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