🍨 7.종족으로 주민검색 전체코드
else if(command == 7) {
PersonDTO personDTO = new PersonDTO();
personDTO.setCondition("MENU");
ArrayList<PersonDTO> datas = model.selectAll(personDTO);
// 종족으로 검색어 입력받고
String keyword = view.getType(datas);
// 해당 검색어를 가진 데이터를 뽑아서
personDTO = new PersonDTO();
personDTO.setCondition("TYPE");
personDTO.setKeyword(keyword);
datas = model.selectAll(personDTO);
view.printDatas(datas);
}
종족 별로 주민을 검색하여 출력하고자 합니다
ex) 강아지 개구리 햄스터
코딩을 하는 사람에게 크게 선택지가 두 가지 있는데
1. View에서 강아지/개구리/햄스터를 전부 다 보여준다
2. Model에서 종족배열을 뽑아서 Controller에게 전달하고,
그걸 다시 View에게 전달한다
방식별 장단점
1번방식은 간편하다
2번방식은 확장성, 유지보수성이 좋다
크게 보면 무조건 2번이 좋기 때문에 2번 방식으로 코딩을 시작
ArrayList<PersonDTO> datas = model.selectAll(personDTO);
ArrayList를 만들어 model에서 DB 데이터를 가져옵니다
PersonDTO personDTO = new PersonDTO();
매개변수로 personDTO 객체를 넘기기 때문에 생성하고
personDTO.setCondition("MENU");
selectAll 메서드는 분기판단용 변수 condition 값이 필요하기 때문에
"MENU"를 넘겨줍니다

메뉴 번호에 7을 입력하면
햄스터 고양이 강아지가 보이는 부분이었습니다
getType() 메서드 전체코드
public String getType(ArrayList<PersonDTO> datas) { // 높은 응집도***
for(int i=0; i<datas.size(); i++) {
System.out.println((i+1) +". " + datas.get(i).getType());
}
/*
결합도가 높았고 데이터에 관련된 일을 View에서 하면 좋은 코드는 아니라고 생각한다
ArrayList<String> al = new ArrayList<>();
al.add("고양이");
al.add("개구리");
al.add("햄스터");
for(int i=0; i<al.size(); i++) {
System.out.println((i+1) + ". " + al.get(i));
}
*/
int num;
while(true) {
System.out.print("종족입력 >> ");
num = scanner.nextInt();
if(1<=num && num <=datas.size()) {
break;
}
System.out.println("범위에 맞게 입력해주세요!");
}
return datas.get(num-1).getType();
}
getType() 메서드로 종족으로 검색어를 입력받습니다
String keyword = view.getType(datas);
view에서 사용자에게 입력받은 data를 ex)햄스터를
keyword에 할당시킨다
datas = model.selectAll(personDTO);
data에 해당 검색어를 가진 데이터를 뽑아 select해야 합니다
personDTO = new PersonDTO();
personDTO.setCondition("TYPE");
personDTO 객체를 만들고
seCondition에TYPE를 넘겨줍니다 -> 분기판단용 변수 condition은 TYPE을 갖게 됩니다
personDTO.setKeyword(keyword);
getType으로 얻은 햄스터 keyword도 넘겨줍니다
personDTO 객체에는 내가 TYPE 상태, 내가 검색할 키워드는 햄스터 라는 것을 알고 있게 됩니다
selectAll 메서드에서
else if(personDTO.getCondition().equals("TYPE")) {
for(int i=0; i<this.datas.size(); i++) {
if(this.datas.get(i).getType().contains(personDTO.getKeyword())) {
int num = this.datas.get(i).getNum();
String name = this.datas.get(i).getName();
String type = this.datas.get(i).getType();
PersonDTO data = new PersonDTO();
data.setNum(num);
data.setName(name);
data.setType(type);
datas.add(data);
}
}
}
현재 상태 TYPE이므로 if 조건문에 걸리게 되고
현재 가지고 있는 데이터의 번호, 이름, 타입을 datas를 add 시킵니다
view.printDatas(datas);
view에 햄스터인 data를 출력합니다
'🍏 개발일기' 카테고리의 다른 글
| [오답노트] 숫자 나누기 (0) | 2025.10.30 |
|---|---|
| 웹 크롤링 | 라이브러리 JAVA에 다운로드하기 | 선택자 (0) | 2025.10.29 |
| MVC연습하기 - 5. 삭제 (0) | 2025.10.28 |
| interface 이해하기 (with 추상클래스) (0) | 2025.10.26 |
| MCV 연습하기 - 3. 주민 1명 출력 (0) | 2025.10.24 |