본문 바로가기
Java (국비)/Java 과제

필터 검색 로직

by Hwanii_ 2023. 5. 29.
728x90

상품이 있다고 가정 하고,

 

1. 가격을 2번 입력시 금액이 A ~ B 까지의 상품들을 출력.

 

CRUD 에서 R에 해당하는 selectAll() 메서드 에서 기능을 구현 한다.

 

why ? 

(필터) 검색 결과가 가령 1개 밖에 나오지 않는다고 하더라도,

그건 우연히 그런것이고,

2개 이상이 검색될 가능성이 1% 라도 있으면 selectAll() 이다. 

 

이클립스에서 구현 하기

 

필터검색

교환 알고리즘 :

 

최소값이 최대값 보다 크다면, 또는

최대값이 최소값 보다 작다면,

그 수를 자동으로 바꿔줘서, 검색하게 해주는 로직.

 

searchCondition :

 

output이 현재 ProductVO 타입인데,

return 값으로 2개를 뱉어낼 수는 없으니,

객체에 사용하지 않는 인자를 활용해서 minPrice와 maxPrice의 정보를 객체묶음으로 보낸다.

또한, 현재 name에 해당하는 인자도 사용하지 않고 있기 때문에,

인자를 "필터검색" 으로 활용 할 수 있다. == 키워드

 

DAO

 

View 에서 필터검색에 대한 함수를 만들었고,

minPrice와 maxPrice의 정보가 담긴 객체를 Controller가 받아,

Controller가 DAO에게 객체묶음을 보낸다.

기존, selectAll 함수는 기능 구현이 되어있고,

높은 응집도를 위해 여러 기능을 하나의 함수에서 작성 한다.

 

DAO의 selectAll 함수에 필터검색 기능을 추가

 

1. 만약에 pVO 객체의 이름이 "필터검색"과 같아 ? (밖에서 키워드를 "필터검색" 으로 설정해서 객체 묶음으로 전달해줌)

 

2 - 1. 키워드가 "필터검색"이 아니야 ? 그러면 else if문을 빠져나가 ~

 

2 - 2. 키워드가 "필터검색"이 맞아 ?

그러면 DAO에서 기능을 수행하고 다시 Controller 에게 output을 전달해 줘야하는 상황.

 

3. return 값으로 무엇을 줘야하는지 생각 하기.

검색 조건에 맞는 상품(객체)가 담아져있는 ProductVO 타입의 배열리스트 객체를 반환해야 하는구나.

 

why ?

최소가격, 최대가격 검색했을 때 해당되는 상품(객체)가 여러개가 나올 수 있으니까.

여러개가 나온다는 말은 상품(객체) 하나가 아니라,

조건(사용자가 입력한 최소값, 최대값 범위에 속하는) 에

해당 되는 객체를 담고있는 배열리스트 자체를 보내야 한다는 말.

그래서 애초에 이 기능을 selectAll() 에서 구현한 상황.

 

4. 배열리스트 객체를 반환해야하니, 반환하기 위해 임시로 배열리스트 객체를 생성 해 준다.

ArrayList <ProductVO> 참조변수 = new ArrayList<ProductVO>();

 

5. 향상된 for 문을 이용해서,

기존의 ArrayList<ProductVO> datas를 for문 안에서 ProductVO 타입의 변수 data에 차례대로 담을건데,

 

밖에서 객체묶음으로 받아온 객체의 getPrice()는 사용자가 입력한 최소값에 해당한다.

밖에서 객체묶음으로 받아온 객체의 getCnt()는 사용자가 입력한 최대값에 해당한다.

 

why ? 

사용하지 않는 인자를 활용해서 minPrice와 maxPrice를 담아서 보냈거든.

 

그래서 if문을 해석하면, 아래와 같다.

 

minPrice가  어떤 기존의 상품의 가격보다 낮아 ?

그리고

maxPrice가 어떤 기존의 상품의 가격보다 높아 ?

 

그러면 Controller 에게 보내기 위해서 임시로 만든 배열리스트의 참조변수에 .add(data)를 해.

 

6. 조건에 해당하는 상품(객체)가 1개면 1개만 담겨서 임시 배열리스트 객체가 return 되겠고,

5개면 5개가 담겨서 return이 되는 그런 상황 이다.

 

 

 

 

 

원본 : 

 

 

그외의 검색 방법 :

 

2. 가장 비싼 상품을 출력 (최고가로 검색 버튼 클릭)

=> selectOne(pVO)

 

3. 가장 싼 상품을 출력 (최저가로 검색 버튼 클릭)

=> selectOne(pVO)

 

/*

2번과 3번도 안쓰는 인자가 무엇인지를 생각.

=> 아 인자 name을 안쓰는구나.

name 인자 자리에, 키워드로 "비싼상품", "싼상품" 등 과 같이 넣어서,

Controller을 통해서 키워드가 담긴 객체 묶음을 DAO의 SelectOne() 메서드로 보낸다.

그래서 이제, 여러 기능을 구현해놓은 SelectOne()의 상황이더라도,

키워드가 "비싼상품" 이니? 또는

키워드가 "싼상품" 이니? 등으로

구분해서 기능을 수행하고, 리턴값으로 ProductVO 객체 한개를

Controller에게 보내고, Controller는 View에게 그 정보를 전달해서

조건에 맞는 객체(상품)의 정보를 받은 View는 Console에 출력하는 그림을 그릴 수 있다.

*/

 

4. 가격을 입력시, 해당 금액 보다 비싼 상품들을 출력

=> selectAll()

 

5. 가격을 입력시, 해당 금액 보다 싼 상품들을 출력

=> selectAll()

반응형

'Java (국비) > Java 과제' 카테고리의 다른 글

Model 연습 2  (0) 2023.05.29
최고가, 최저가 검색 로직  (0) 2023.05.29
Model 연습  (0) 2023.05.28
View 연습  (0) 2023.05.28
Controller 연습  (0) 2023.05.28