Cute Running Puppy

โ˜•JAVA 6

# Spring boot ๋””์ž์ธ ํŒจํ„ด ์ •๋ฆฌ - ํ”„๋ก์‹œ(Proxy) ํŒจํ„ด

ํ”„๋ก์‹œ ํŒจํ„ด์ด๋ž€? ์–ด๋–ค ๊ฐ์ฒด ์•ž์— ๋Œ€๋ฆฌ์ธ(proxy) ์„ ํ•˜๋‚˜ ๋‘๊ณ ,๊ทธ ๊ฐ์ฒด์˜ ์‹คํ–‰ ์ „ํ›„์— ๋‹ค๋ฅธ ํ–‰๋™์„ ๋ง๋ถ™์ด๋Š” ๊ตฌ์กฐ ์‹ค๋ฌด ๋น„์œ ์นด์นด์˜คํŽ˜์ด์— ๊ฒฐ์ œ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค๊ทธ๋Ÿฐ๋ฐ ๊ทธ ์š”์ฒญ์€ ์นด์นด์˜ค API๋กœ ๋ฐ”๋กœ ๊ฐ€์ง€ ์•Š๊ณ ,์ค‘๊ฐ„์—์„œ “ํ”„๋ก์‹œ ์„œ๋ฒ„”๊ฐ€ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ณ  ๊ฒ€์ฆํ•œ ๋’ค ์นด์นด์˜ค์— ๋„˜๊ฒจ์คŒ์ด ํ”„๋ก์‹œ๊ฐ€ ๋ฐ”๋กœ ์ค‘๊ฐ„์—์„œ ๋Œ€์‹  ์ผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฐ์ฒด ์˜ˆ์ œ: ๋กœ๊ทธ๋ฅผ ์ž๋™์œผ๋กœ ๋‚จ๊ธฐ๋Š” ํ”„๋ก์‹œ ํŒจํ„ด 1. ์ง„์งœ ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šคpublic interface PayService { void pay(int amount);} 2.์‹ค์ œ ๊ตฌํ˜„์ฒดpublic class KakaoPayService implements PayService { public void pay(int amount) { System.out.println("..

# Spring boot ๋””์ž์ธ ํŒจํ„ด ์ •๋ฆฌ - ์ „๋žต(Strategy) ํŒจํ„ด

์ „๋žต ํŒจํ„ด์ด๋ž€? ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์—ฌ๋Ÿฌ ๋ฐฉ์‹(์ „๋žต)์œผ๋กœ ๊ตฌํ˜„ํ•ด๋‘๊ณ ,์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ฐ”๊ฟ”์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํŒจํ„ด ์‹ค๋ฌด ๋น„์œ ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒฐ์ œ ์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์นด์นด์˜คํŽ˜์ด ๊ฒฐ์ œ๋„ค์ด๋ฒ„ํŽ˜์ด ๊ฒฐ์ œToss ๊ฒฐ์ œ์ „๋žต๋งˆ๋‹ค ๊ตฌํ˜„์ด ๋‹ค๋ฅด์ง€๋งŒ, ์‚ฌ์šฉ์ž๋Š” “๊ฒฐ์ œํ•œ๋‹ค”๋Š” ๊ธฐ๋Šฅ๋งŒ ์š”์ฒญํ•˜๋ฉด ๋œ๋‹ค. Spring Boot์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์ ์šฉ๋จ 1. ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜public interface PayStrategy { void pay(int amount);} 2.์ „๋žต ๊ตฌํ˜„์ฒด ๋งŒ๋“ค๊ธฐ@Component("kakaoPay")public class KakaoPayStrategy implements PayStrategy { public void pay(int amount) { System.out.println("์นด..

# Spring boot ๋””์ž์ธ ํŒจํ„ด ์ •๋ฆฌ - ์‹ฑ๊ธ€ํ†ค(Singleton) ํŒจํ„ด

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด๋ž€?์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋งŒ ์กด์žฌํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ํŒจํ„ด ์™œ ํ•„์š”ํ• ๊นŒ? ์ž์ฃผ ์“ฐ์ด๋Š” ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ์ค„์ž„์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ๊ฐ์ฒด ์ƒ์„ฑ ๋น„์šฉ์ด ํฐ ๊ฒฝ์šฐ ํšจ๊ณผ์ ์˜ˆ๋ฅผ๋“ค์–ด DB์—ฐ๊ฒฐ ๊ฐ์ฒด, ์„ค์ • ๊ฐ์ฒด ๋“ฑ์€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค.๊ทธ๋ž˜์„œ ํ•œ๋ฒˆ๋งŒ ๋งŒ๋“ค๊ณ  ๋‹ค๊ฐ™์ด ์“ฐ์ž = ์‹ฑ๊ธ€ํ†ค Spring boot์—์„œ๋Š” ์–ด๋””์— ์“ฐ์ผ๊นŒ?→ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  Bean์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์ด๋‹ค. ์ฝ”๋“œ๋กœ ๋ณด๊ธฐpublic class MySingleton { // 1. ์ž๊ธฐ ์ž์‹ ์„ private static์œผ๋กœ ํ•˜๋‚˜ ๋งŒ๋“ ๋‹ค private static MySingleton instance = new MySingleton(); // 2..

# JAVA์—์„œ double๊ณผ Double์˜ ์ฐจ์ด ์–ธ์ œ ์–ด๋–ค ๊ฑธ ์จ์•ผ ํ• ๊นŒ?

Java์—์„œ๋Š” ์ˆซ์žํ˜• ํƒ€์ž…์œผ๋กœ double๊ณผ Double ๋‘ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.์ฒ˜์Œ ๊ณต๋ถ€ํ•  ๋• ๋˜‘๊ฐ™์•„ ๋ณด์ด์ง€๋งŒ, ์‹ค๋ฌด์—์„œ ์ •๋ง ์ค‘์š”ํ•œ ์ฐจ์ด๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ด ๋‘˜์˜ ์ฐจ์ด์™€ ์‹ค์ œ๋กœ ์–ธ์ œ ์–ด๋–ค ๊ฑธ ์จ์•ผ ํ•˜๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐœ๋…ํ•ญ๋ชฉdoubleDoubleํƒ€์ž…๊ธฐ๋ณธํ˜•(primitive)์ฐธ์กฐํ˜•(wrapper class)null ํ—ˆ์šฉโŒ ๋ถˆ๊ฐ€โœ… ๊ฐ€๋Šฅ๊ธฐ๋ณธ๊ฐ’0.0null์‚ฌ์šฉ ๋ชฉ์ ๋น ๋ฅธ ๊ณ„์‚ฐ, ๋‹จ์ˆœํ•œ ์ˆ˜์น˜ ์ฒ˜๋ฆฌnull์ฒ˜๋ฆฌ, ์ปฌ๋ ‰์…˜/๊ฐ์ฒด ์กฐ์ž‘ ์™œ ๋‘๊ฐ€์ง€๊ฐ€ ์กด์žฌํ• ๊นŒ?Java๋Š” ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์ˆซ์žํ˜•์€ primitive ํƒ€์ž…์œผ๋กœ ์„ค๊ณ„ํ–ˆ์ง€๋งŒ,์ปฌ๋ ‰์…˜(List, Map ๋“ฑ)์— ๋‹ด๊ฑฐ๋‚˜ null ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•  ๋•Œ๋Š” ๊ฐ์ฒด๋กœ์จ ๋‹ค๋ค„์•ผ ํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด Wrapper Class, ์ฆ‰ Double ์ž…๋‹ˆ๋‹ค.(int ..

โ˜•JAVA 2025.07.16

# ์ž๋ฐ” ๋””์ž์ธ ํŒจํ„ด ์ž…๋ฌธ - Adapter ํŒจํ„ด ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

Adapter ํŒจํ„ด์ด๋ž€?์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋งž์ง€ ์•Š๋Š” ๋‘ ๊ฐ์ฒด ์‚ฌ์ด๋ฅผ ์ค‘๊ฐ„์—์„œ “๋ณ€ํ™˜”ํ•ด์ฃผ๋Š” ํŒจํ„ด“๋ณ€ํ™˜ ์–ด๋Œ‘ํ„ฐ” ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด,๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ “๊ฐ์‹ธ์„œ” ์“ฐ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๋‹ค. ์™œ Adapter ํŒจํ„ด์ด ํ•„์š”ํ• ๊นŒ?1.๊ธฐ์กด ํด๋ž˜์Šค๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ๋ถˆํŽธํ•  ๋•Œ→ ex. Properties, InputStream, Thread ๋“ฑ 2.๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด๋‚˜ ๊ตฌ์กฐ์™€ ์•ˆ๋งž์„ ๋•Œ→ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ๊ธฐ๋Šฅ์„ ์กฐํ•ฉํ•ด์„œ ์ƒˆ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ตฌ์กฐ ์ดํ•ด (ํด๋ž˜์Šค ๋ช…์€ ์˜ˆ์‹œ)์—ญํ• ์ด๋ฆ„์„ค๋ช…Target (ํƒ€๊ฒŸ ์ธํ„ฐํŽ˜์ด์Šค)Printํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์ŠคAdaptee (๊ธฐ์กด ํด๋ž˜์Šค)Banner์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋งž์ง€ ์•Š๋Š” ๊ธฐ์กด ํด๋ž˜์ŠคAdapterPrintBannerPrint ์ธํ„ฐํŽ˜์ด์Šค..

# ์ž๋ฐ” ๋””์ž์ธ ํŒจํ„ด ์ž…๋ฌธ - Iterator ํŒจํ„ด ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

Iterator ํŒจํ„ด์ด๋ž€?์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋„์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ์ˆœํšŒ(iterate)ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. ์™œ Iterator ํŒจํ„ด์ด ํ•„์š”ํ• ๊นŒ? ๊ทธ๋ƒฅ for๋ฌธ ์“ฐ๋ฉด ์•ˆ๋˜๋‚˜??๋ฌผ๋ก  ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ž˜ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค:๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ, ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ ๋“ฑ ๊ตฌ์กฐ๋งˆ๋‹ค for๋ฌธ ๋‹ค๋ฅด๊ฒŒ ์งœ์•ผ ๋จ์—ฌ๋Ÿฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ˆœํšŒํ•˜๋ ค๋ฉด ์ฝ”๋“œ ์ค‘๋ณต์ด ์ƒ๊น€๋‚˜์ค‘์— ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋€Œ๋ฉด for๋ฌธ๋„ ๊ณ ์ณ์•ผ ํ•จโžก ์œ ์ง€๋ณด์ˆ˜์„ฑ, ํ™•์žฅ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ ๋ถ€์กฑ Iterator ํŒจํ„ด์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด"์š”์†Œ ๊บผ๋‚ด๋Š” ๋ฐฉ์‹์„ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌ"→ ์‚ฌ์šฉ์ž๋Š” next()์™€ hasNext()๋งŒ ์•Œ๋ฉด ๋!Iterator it = bookShelf.iterator();while (it.hasNext()) { Book b = (Book) it.n..