오늘의 핵심 키워드
- 개인과제 피드백
- 팀 과제 (학생관리프로그램)
핵심 피드백 - 추상화의 기준 관련
기존 부모클래스 Calculator 코드
abstract class Calculator{
...
public abstract double calculate(double radius) throws CalculatorInputException;
public abstract double calculate(double number1, double number2, char operator) throws CalculatorInputException;
}
자식클래스 1
public class ArithmeticCalculator extends Calculator{
...
// 미사용
public double calculate(double radius) throws CalculatorInputException {
return 0;
}
@Override
public double calculate(double number1, double number2, char operator) throws CalculatorInputException {
double result = 0;
String oper = Character.toString(operator);
if(!oper.matches(REG_Operator)){
....
}
}
억지로 추상화를 진행하다보니 상속받는 자식클래스에 필요없는 오버라이딩 메서드가 생겼다
따라서 이런 경우 추상화를 하지 않고 각 자식클래스 각각에 calculate 메서드를 구현하는 선에서 마무리 하는게 좋은코드
팀 과제 - 학생관리 프로그램
수강생정보 등록시 필요한 과목들의 기본 정보 enum으로 관리
public enum SubjectList {
JAVA("Java","MANDATORY"),
OOP("객체지향","MANDATORY"),
SPRING("Spring","MANDATORY"),
JPA("JPA","MANDATORY"),
MYSQL("MySQL","MANDATORY"),
DESIGN_PETTERN("디자인패턴","CHOICE"),
SPRING_SECURITY("Spring_Security","CHOICE"),
REDIS("Redis","CHOICE"),
MONGODB("MongoDB","CHOICE");
public final String name;
public final String type;
SubjectList(String subName, String subType) {
name = subName;
type = subType;
}
}
수강생 등록에 관련한 기능 및 데이터 관리 클래스 생성
public class StudentManage
{
public static Map<String, Student> stu_list = new HashMap<>();
private static int studentIndex;
private static final String INDEX_TYPE_STUDENT = "ST";.
public static void createStudent();
public static void inquiryStudent();
}
과목 선택 및 생성, 그외 기능 관련 클래스 생성
public class SubjectManage{
private static int subjectIndex;
private static final String INDEX_TYPE_SUBJECT = "SU";
private static final String REG_InputCheck = "^[1-9][0-9 ,]+[0-9]$";
public static void subjectListView();
public static Subject createSubject(int num);
public static List<Subject> subjectSelect();
}
- 구현 기능
1. 리스트 내 동일값 객체 비교
동일과목 등록을 방지하기 위한 예외처리 코드
subjectList.contains(createSubject(choiceNum))
위 코드 사용시 일반적으로 "JAVA" 객체를 create 해서 두번 넣어도, 각각의 인스턴스의
참조 주소는 다르기 때문에 contains 는 false를 반환하여 내 의도와 다르게 동작,
결국 list내에 객체 비교시 참조하는 주소값이 아닌 참조 객체의 데이터끼리 비교하도록 해야함
- Object의 기본 제공 메서드 equals를 오버라이딩
public boolean equals(Object o) {
if(this == o) {
return true;
}
if(!(o instanceof Subject)) {
return false;
}
Subject subject = (Subject) o;
return Objects.equals(this.subjectName, subject.subjectName);
}
equals를 오버라이딩 해서 객체의 참조 주소 비교가 아닌 객체데이터(subjectName)끼리
비교하여 동등판단을 하도록 구현하였다
2. 정규식을 활용한 Pattern 클래스의 matches() 메서드
Pattern.matches("정규식", "비교할 문자열") : 정규식의 조건에 문자열의 전체가 일치해야 true 반환하는 메서드이다
문자열을 받아 여러 과목번호를 한번에 등록하기 위해 입력받은 문자열의 예외처리를 하기위한 코드
...
private static final String REG_InputCheck = "^[1-9][0-9 ,]+[0-9]$";
...
if(!Pattern.matches(REG_InputCheck, selectNum)){
...
}
숫자로 시작하며 하나 이상의 숫자or공백or, 를 가진 숫자로 끝나는 문자열
ex) 1,2,3,4 6 7 8 9 = true, 1,2,d,5,7 = false
이런식의 예외처리코드
'TIL > Web Back' 카테고리의 다른 글
[Sparta] 내일배움캠프 TIL 13일차 (0) | 2024.05.08 |
---|---|
[Sparta] 내일배움캠프 TIL 12일차 (0) | 2024.05.07 |
[Sparta] 내일배움캠프 TIL 10일차 (0) | 2024.05.02 |
[Sparta] 내일배움캠프 TIL 9일차 (0) | 2024.05.01 |
[Sparta] 내일배움캠프 TIL 8일차 (0) | 2024.04.30 |