๐Ÿญ Projects_

[Mid Project] Java Web Project์—์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ๊ฐœ์„  ๊ณผ์ •

CodeLoge 2025. 3. 16. 22:42

โžก๏ธ Java/Servlet ๊ธฐ๋ฐ˜์˜ ์›น ํ”„๋กœ์ ํŠธ์—์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •๊ณผ ๊ธฐ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด ๊ณ ๋ฏผํ•œ ๋‚ด์šฉ๋“ค ์ •๋ฆฌ

โžก๏ธ Session์„ ํ™œ์šฉํ•œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ด€๋ฆฌ, ๊ธฐ์กด ์ƒํ’ˆ ์ˆ˜๋Ÿ‰ ์ฆ๊ฐ€ ๋กœ์ง, ์ฝ”๋“œ ์ตœ์ ํ™” ๊ณผ์ •์˜ ๋‚ด์šฉ

 

๐Ÿ”น ์ฃผ์š” ๊ธฐ๋Šฅ

• ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ์ƒํ’ˆ์„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ถ”๊ฐ€

• ์ด๋ฏธ ๋‹ด๊ฒจ์ง„ ์ƒํ’ˆ์ด๋ฉด ์ˆ˜๋ž‘๋งŒ ์ฆ๊ฐ€

• ์ƒˆ ์ƒํ’ˆ์ด๋ผ๋ฉด ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ ์ถ”๊ฐ€

• Session์„ ์ด์šฉํ•ด ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฐ์ดํ„ฐ ์œ ์ง€

 

๐Ÿ”น ์ฝ”๋“œ ๊ตฌ์กฐ ๊ฐœ์š”

• HttpSession์—์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฆฌ์ŠคํŠธ(ArrayList<Object>) ๊ฐ€์ ธ์˜ค๊ธฐ

• ์ƒํ’ˆ ์ •๋ณด๋ฅผ DAO์—์„œ ์กฐํšŒ ํ•œ ํ›„ DTO์— ๋‹ด๊ธฐ

• ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋™์ผํ•œ ์ƒํ’ˆ์ด ๋‹ด๊ฒจ์žˆ๋Š”์ง€ ์ฒดํฌ

• ์žˆ๋‹ค๋ฉด ์ˆ˜๋Ÿ‰๋งŒ ์ฆ๊ฐ€, ์—†๋‹ค๋ฉด ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ถ”๊ฐ€

• request์— ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌ ํ›„ alert.jsp(์•Œ๋ฆผ์ฐฝ ์ถœ๋ ฅ ํŽ˜์ด์ง€)๋กœ ์ด๋™ํ•˜์—ฌ ๊ฒฐ๊ณผ ์ œ๊ณต

 

1๏ธโƒฃ  ์ค‘๋ณต ์ƒํ’ˆ ์ฒ˜๋ฆฌ ๊ฐœ์„ 

: ๊ธฐ์กด ์ฝ”๋“œ์—์„œ๋Š” ๊ฐœ๋ณ„ ์ƒํ’ˆ๊ณผ ์กฐํ•ฉ ์ƒํ’ˆ์„ ๊ฒ€์‚ฌํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์ค‘๋ณต๋˜์–ด ์žˆ์—ˆ์Œ

 

๐Ÿ‘‰ ๊ณตํ†ต ๋กœ์ง์„ ํ•˜๋‚˜๋กœ ์ •๋ฆฌํ•˜๊ณ , ์ƒํ’ˆ ํƒ€์ž…์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •

boolean alreadyIn = false;
		
		for(Object cartProduct : shoppingCart) {
			if(cartProduct instanceof ProductSingleDTO && productSingleDTO != null) {
				ProductSingleDTO alreadyInProductSingle = (ProductSingleDTO) cartProduct;
				if(alreadyInProductSingle.getProduct_Single_Number() == productSingleDTO.getProduct_Single_Number()) {
					alreadyInProductSingle.setProduct_Single_Count(alreadyInProductSingle.getProduct_Single_Count() + 1);
					alreadyIn = true;
					
					request.setAttribute("msg", "์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ƒํ’ˆ์œผ๋กœ ๊ฐœ์ˆ˜๋งŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค!");  
		            request.setAttribute("flag", true);
		            request.setAttribute("url", "์ƒํ’ˆ ์ƒ์„ธ์ •๋ณด ํŽ˜์ด์ง€.jsp?์ƒํ’ˆ ๋ฒˆํ˜ธ=" + productSingleNumber);
					
					break;
				}
			}
			else if(cartProduct instanceof ProductComboDTO && productComboDTO != null) {
				ProductComboDTO alreadyInProductCombo = (ProductComboDTO) cartProduct;
				if(alreadyInProductCombo.getProduct_Combo_Number() == productComboDTO.getProduct_Combo_Number()) {
					alreadyInProductCombo.setProduct_Combo_Count(alreadyInProductCombo.getProduct_Combo_Count() + 1);
					alreadyIn = true;
					
					request.setAttribute("msg", "์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ƒํ’ˆ์œผ๋กœ ๊ฐœ์ˆ˜๋งŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค!");  
		            request.setAttribute("flag", true);
		            request.setAttribute("url", "์ƒํ’ˆ ์ƒ์„ธ์ •๋ณด ํŽ˜์ด์ง€.jsp?์ƒํ’ˆ ๋ฒˆํ˜ธ=" + productComboNumber);
					
					break;
				}
			}	
		}

โœ”๏ธ ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ๊ฐœ๋ณ„ ์ƒํ’ˆ๊ณผ ์กฐํ•ฉ ์ƒํ’ˆ์„ ๊ฐ๊ฐ ๋น„๊ต

โœ”๏ธ ์ค‘๋ณต๋œ๋‹ค๋ฉด ์ˆ˜๋Ÿ‰๋งŒ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ → ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต ์ตœ์†Œํ™”

 

2๏ธโƒฃ Object์™€ instanceof๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ƒํ’ˆ ๋ถ„๋ฅ˜

: ์žฅ๋ฐ”๊ตฌ๋‹ˆ์—๋Š” ProductSingleDTO์™€ ProductComboDTO๊ฐ€ ํ•จ๊ป˜ ์ €์žฅ๋จ

: ๋‹ค๋ฅธ ๋‘ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ์ƒํ’ˆ๋“ค์„ ํ•œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธฐ ์œ„ํ•ด ArrayList<Object>๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ƒํ’ˆ์„ ๊บผ๋‚ผ ๋•Œ ์–ด๋–ค ํƒ€์ž…์ธ์ง€ ํ™•์ธ ํ›„ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•จ

 

๐Ÿ‘‰ instanceof ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ์‹ค์ œ ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„

 

๐Ÿ”น ๊ธฐ์กด ์ฝ”๋“œ

: ๊ธฐ์กด ์ฝ”๋“œ์—์„œ๋Š” Obejct ํƒ€์ž… ๋ฆฌ์ŠคํŠธ์—์„œ ์ƒํ’ˆ์„ ๊บผ๋‚ธ ๋’ค, instanceof ์—†์ด ์บ์ŠคํŒ…์„ ์‹œ๋„ํ•˜์—ฌ ClassCastException ๋ฐœ์ƒ ์œ„ํ—˜์ด ์žˆ์—ˆ์Œ

for (Object cartProduct : shoppingCart) {
    ProductSingleDTO product = (ProductSingleDTO) cartProduct;
    if (product.getProduct_Single_Number() == productSingleDTO.getProduct_Single_Number()) {
        product.setProduct_Single_Count(product.getProduct_Single_Count() + 1);
    }
}

โœ”๏ธ instanceof๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž…์ธ ๊ฒฝ์šฐ์—๋งŒ ์บ์ŠคํŒ…์„ ์ˆ˜ํ–‰

 

๐Ÿ”น instanceof๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•œ ์ฝ”๋“œ

for(Object cartProduct : shoppingCart) {
			if(cartProduct instanceof ProductSingleDTO && productSingleDTO != null) {
				ProductSingleDTO alreadyInProductSingle = (ProductSingleDTO) cartProduct;
				if(alreadyInProductSingle.getProduct_Single_Number() == productSingleDTO.getProduct_Single_Number()) {
					alreadyInProductSingle.setProduct_Single_Count(alreadyInProductSingle.getProduct_Single_Count() + 1);
					alreadyIn = true;
					
					request.setAttribute("msg", "์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ƒํ’ˆ์œผ๋กœ ๊ฐœ์ˆ˜๋งŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค!");  
		            request.setAttribute("flag", true);
		            request.setAttribute("url", "์ƒํ’ˆ ์ƒ์„ธ์ •๋ณด ํŽ˜์ด์ง€.jsp?์ƒํ’ˆ ๋ฒˆํ˜ธ=" + productSingleNumber);
					
					break;
				}
			}
			else if(cartProduct instanceof ProductComboDTO && productComboDTO != null) {
				ProductComboDTO alreadyInProductCombo = (ProductComboDTO) cartProduct;
				if(alreadyInProductCombo.getProduct_Combo_Number() == productComboDTO.getProduct_Combo_Number()) {
					alreadyInProductCombo.setProduct_Combo_Count(alreadyInProductCombo.getProduct_Combo_Count() + 1);
					alreadyIn = true;
					
					request.setAttribute("msg", "์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ƒํ’ˆ์œผ๋กœ ๊ฐœ์ˆ˜๋งŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค!");  
		            request.setAttribute("flag", true);
		            request.setAttribute("url", "์ƒํ’ˆ ์ƒ์„ธ์ •๋ณด ํŽ˜์ด์ง€.jsp?์ƒํ’ˆ ๋ฒˆํ˜ธ=" + productComboNumber);
					
					break;
				}
			}	
		}

โœ”๏ธ instanceof๋กœ ๊ฒ€์‚ฌ ํ›„ ProductSingleDTO ๋˜๋Š” ProductComboDTO๋กœ ๋ณ€ํ™˜

โœ”๏ธ ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ → ๊ฐ ํƒ€์ž…์— ๋งž๊ฒŒ ์œ ์—ฐํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ