이전 학과 프로그램을 알아야 따라올 수 있는 내용이다. jihyeong-ji99hy99.tistory.com/85 를 보고 오도록 하자.
비교 메서드를 이용한 검색
: 학과가 저장하고 있는 여러 학생 정보 검색하기
(단계)
1) 이름 검색
2) 이름과 학번 검색
3) 모든 필드 검색
4) 여러 개 키워드 검색
이름 검색 기능 // Department 클래스의 검색 함수
void search(){
String name = null;
while(true){
System.out.print("이름: ");
name = s.next();
if(name.equals("end")) break;
for(Student st : studentList){
if(st.name.equals(name))
st.print();
}
}
}
위와 같이 search 메서드를 정의할 수 있다. 하지만 각 클래스의 필드는 클래스 내에서만 접근하는 캡슐화 원칙에 따르면 올바른 코드가 아니다. 무슨 말이냐? 학생 객체는 Student 클래스인데, 이 비교 기능을 Student 클래스에서 맡도록 해야 한다는 것이다.
// Department 클래스
void search(){
String name = null;
while(true){
System.out.print("이름: ");
name = s.next();
if(name.equals("end")) break;
for(Student st : studentList){
if(st.matches(name)) // 학생 객체는 match 메서드를 갖고있음
st.print();
}
}
}
// Student 클래스
boolean matches(String kwd){
if(name.equals(kwd) return true;
if(kwd.equals(id+"") return true; // 혹은 if((id+"").equals(kwd)) 도 가능함
return false;
}
멀티 키워드 검색 기능 // 여러 키워드를 받아 모든 키워드에 다 매치되어야 한다.
// Department 클래스
void search() {
String kwd;
kwd = s.nextLine();
String[] kwdArr;
while(true) {
System.out.print("멀티 키워드 입력 : ");
kwd = s.nextLine();
if(kwd.contentEquals("end")) break;
kwdArr = kwd.split(" ");
for(Student st: studentList) {
if(st.matches(kwdArr)) st.print();
}
}
while(true) {
System.out.print("검색 키워드 입력 : ");
kwd = s.next();
for(Student st: studentList) {
if(st.matches(kwd)) st.print();
}
}
}
// Student 클래스
public boolean matches(String kwd) {
if(name.contains(kwd)) return true;
if(kwd.length()>3 && (id+"").contains(kwd)) return true;
if(kwd.length()>3 && phone.contains(kwd)) return true;
if((year+"").contentEquals(kwd)) return true;
return false;
}
public boolean matches(String[] kwdArr) {
for(String kwd: kwdArr) {
if(kwd.charAt(0) == '-' && matches(kwd.substring(1)))
return false;
if(kwd.charAt(0) != '-' && !matches(kwd))
return false;
}
return true;
}
'Backend > JAVA' 카테고리의 다른 글
[JAVA] Store 프로젝트 (0) | 2020.10.23 |
---|---|
[JAVA] 학과 프로그램 #5 - 강의 수강 기능 추가(+파일) (0) | 2020.10.03 |
[JAVA] 학과 프로그램 #4 - 점수 기능 추가하기(+파일) (0) | 2020.09.20 |
[JAVA] 학과 프로그램 #2 - n개의 객체 입력하기 (0) | 2020.09.20 |
[JAVA] 학과 프로그램 #1 - 기본 클래스 만들기 (0) | 2020.09.20 |
댓글