강좌 Course 2. Part 4. ch2 요약
MVC는 Model-View-Controller을 줄인 말로, 클래스를 설계할 때 역할을 분리하는 것을 말한다.
Model로는 고객 정보를 저장하는 Customer, 진료기록을 저장하는 MedicalRecord가 있다. DB가 없는 관계로 ArrayList를 사용한다.
View는 스프링이 아니다보니 ConsoleView를 사용한다.
Controller로는 회원정보를 관리하는 CustomerController, 진료기록을 관리하는 MedicalRecordController가 있다.
main 클래스로 PetMain이 Controller에 정보를 넘기면, 컨트롤러가 View와 Model에 상호작용하여 받아온 정보를 view를 통해 main 클래스에 전달한다.
코드가 긴 관계로 깃에 올려놓았다.
NullPointerException이 발생해 당황하고 있다. 강의 소스코드가 제공되긴 하지만, part 4부터는 소스코드가 없다. 그래서 영상 보면서 일단은 처음 해보는 거라 다 따라적고 있는데, 내가 뭘 놓친 걸지도... 오류를 찾아야 블로그 정리도 완료할 수 있을 것 같다.
일단 오류가 발생하는 라인은 PetMain의 28번째 줄, 그리고 CustomerController의 가입인의 중복여부를 확인하는 isRegistered 메서드이다. PetMain을 실행하고 1을 입력하여 고객 입력을 실행하면 Customer 객체까지는 잘 받는 것을 확인하였다.
각각 보면,
// CustomerController
public boolean isRegistered(String phoneNumber){
for (Customer customer: customers){
if (customer.getPhoneNumber().equals(phoneNumber)){
return true; // the phone number is registered
}
}
return false; // not registered
}
// PetMain
// 28번째 줄은 if문이다.
case 1:
Customer newCustomer = view.getCustomerInfo();
String phoneNumber = newCustomer.getPhoneNumber();
System.out.println(newCustomer);
if (customerController.isRegistered(phoneNumber)){
view.printMessage("You're already registered.");
continue;
}
customerController.addCustomer(newCustomer);
view.printMessage("You are now registered.");
break;
이다.
처음에는 view.getCustomerInfo()로 newCustomer를 생성한 후 customers가 비어있어서 null이 나오나 했는데, 알고보니 PetMain에서 customerController를 생성할 때 recordController를 넘겨주지 않아서 오류가 발생한 것이었다.
DB가 없어도, html이 없어도 설계 자체는 유사하니 이해가 안가면 손으로라도 써가면서 풀어야 할 것 같다.
- PetMain에 회원탈퇴 기능 추가
case 5: phoneNumber = view.getPhoneNumber(); if (customerController.isRegistered(phoneNumber)){ view.printMessage("Delete account? (Y/N)"); String ans = scanner.nextLine(); if (ans.equals("Y")){ customerController.removeCustomer(phoneNumber); view.printMessage("Account deleted"); break; } else if (ans.equals("N")){ break; } else { view.printMessage("Wrong input, account was not deleted. "); break; } } else { view.printMessage("Number not registered."); break; }