[Java] μžλ°” 슀트림(Streams)의 κ°œλ…κ³Ό μ‚¬μš© 방법

[Java] μžλ°” 슀트림(Streams)의 κ°œλ…κ³Ό μ‚¬μš© 방법

1. μžλ°” 슀트림(Streams)μ΄λž€? 기쑴의 λ°°μ—΄ λ˜λŠ” μ»¬λ ‰μ…˜ μΈμŠ€ν„΄μŠ€λŠ” for, foreach 같은 λ°˜λ³΅λ¬Έμ„ 톡해 ν•˜λ‚˜μ”© ν•Έλ“€λ§ν•˜λŠ” λ°©μ‹μ΄μ—ˆκΈ°μ— 둜직이 λ³΅μž‘ν• μˆ˜λ‘ μ½”λ“œμ–‘λ„ λ§Žμ•„μ§€κ³  루프λ₯Ό μ—¬λŸ¬ 번 λ„λŠ” κ²½μš°λ„ λ°œμƒν•˜μ˜€λ‹€. 그에 λΉ„ν•΄ μžλ°” 8μ—μ„œ μΆ”κ°€λœ 슀트림(Streams)은 λžŒλ‹€λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” 기술 쀑 ν•˜λ‚˜λ‘œ λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°€μ§€κ³  μžˆλ‹€. μŠ€νŠΈλ¦Όμ€ λ°μ΄ν„°μ˜ νλ¦„μ΄λΌλŠ” 뜻으둜 μ»¬λ ‰μ…˜μ— μ €μž₯λ˜μ–΄ μžˆλŠ” μš”μ†Œλ“€μ„ ν•˜λ‚˜μ”© μˆœνšŒν•˜λ©΄μ„œ μ²˜λ¦¬ν•  수 μžˆλŠ” μ½”λ“œνŒ¨ν„΄μ΄λ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 일반적으둜 μ§€μ›ν•˜λŠ” μ—°μ‚°κ΄€ λ°μ΄ν„°λ² μ΄μŠ€μ™€ λΉ„μŠ·ν•œ 연산을 μ§€μ›ν•œλ‹€. λ°°μ—΄/μ»¬λ ‰μ…˜μ˜ ν•¨μˆ˜ μ—¬λŸ¬ 개λ₯Ό μ‘°ν•©ν•˜μ—¬ μ›ν•˜λŠ” κ²°κ³Όλ₯Ό 필터링, κ°€κ³΅λœ κ²°κ³Ό μΆ”μΆœ κ°€λŠ₯ν•˜λ©° λžŒλ‹€μ‹μœΌλ‘œ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€. ν•˜λ‚˜μ˜ μž‘μ—…μ„ λ‘˜ 이상 μž‘μ—…μœΌλ‘œ 잘게 μͺΌκ°œ λ™μ‹œμ— μ²˜λ¦¬ν•˜λ©° μŠ€λ ˆλ“œλ₯Ό μ΄μš©ν•˜μ—¬ λ§Žμ€ μš”μ†Œλ“€μ„ λΉ λ₯΄κ²Œ 처리 κ°€λŠ₯ν•œλ‹€.Β μ»¬λ ‰μ…˜μ€ ν˜„μž¬ μžλ£Œκ΅¬μ‘°κ°€ ν¬ν•¨ν•˜λŠ” λͺ¨λ“  값을 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜λŠ” 자료ꡬ쑰인데 λΉ„ν•΄, μŠ€νŠΈλ¦Όμ€ μš”μ²­ν•  λ•Œλ§Œ μš”μ†Œλ₯Ό κ³„μ‚°ν•˜λŠ” κ³ μ •λœ 자료 ꡬ쑰이닀. μŠ€νŠΈλ¦Όμ— μ‚¬μš©μ— λŒ€ν•œ μƒμ„Έν•œ λ‚΄μš©μ€ λ‹€μŒ 3κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€. ...

[μ΄νŽ™ν‹°λΈŒ μžλ°”] 3. private μƒμ„±μžλ‚˜ μ—΄κ±° νƒ€μž…μœΌλ‘œ μ‹±κΈ€ν„΄μž„μ„ 보μž₯ν•˜λΌ

[μ΄νŽ™ν‹°λΈŒ μžλ°”] 3. private μƒμ„±μžλ‚˜ μ—΄κ±° νƒ€μž…μœΌλ‘œ μ‹±κΈ€ν„΄μž„μ„ 보μž₯ν•˜λΌ

μ‹±κΈ€ν„΄μ΄λž€ μΈμŠ€ν„΄μŠ€λ₯Ό ν•˜λ‚˜λ§Œ 생성할 수 μžˆλŠ” 클래슀둜, ν•¨μˆ˜μ™€ 같은 λ¬΄μƒνƒœ (stateless) κ°μ²΄λ‚˜ 섀계상 μœ μΌν•΄μ•Ό ν•˜λŠ” μ‹œμŠ€ν…œ μ»΄ν¬λ„ŒνŠΈ, ν˜Ήμ€ μ΅μˆ™ν•œ μŠ€ν”„λ§ 빈이 λŒ€ν‘œμ μΈ μ‹±κΈ€ν„΄μ˜ 예둜 λ“€ 수 μžˆλ‹€. 클래슀λ₯Ό μ‹±κΈ€ν„΄μœΌλ‘œ λ§Œλ“€ 경우, (νƒ€μž…μ„ μΈν„°νŽ˜μ΄μŠ€λ‘œ μ •μ˜ν•œ ν›„ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•΄μ„œ λ§Œλ“  싱글턴이 μ•„λ‹ˆλΌλ©΄) μ‹±κΈ€ν„΄ μΈμŠ€ν„΄μŠ€λ₯Ό Mock으둜 λŒ€μ²΄ν•  수 없기에 ν…ŒμŠ€νŠΈκ°€ μ–΄λ €μšΈ 수 μžˆλ‹€. 싱글턴을 λ§Œλ“œλŠ” 보편적인 두가지 방식이 μžˆλŠ”λ°, 두 방식 λͺ¨λ‘μƒμ„±μžλŠ” private으둜 감좰두고 μœ μΌν•œ μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλŠ” μˆ˜λ‹¨μœΌλ‘œ public static 멀버λ₯Ό ν•˜λ‚˜ λ§ˆλ ¨ν•΄ λ‘”λ‹€. ...

[μ΄νŽ™ν‹°λΈŒ μžλ°”] 2. μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ

[μ΄νŽ™ν‹°λΈŒ μžλ°”] 2. μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ

μ •μ νŒ©ν† λ¦¬μ™€ μƒμ„±μžμ—λŠ” λ§€κ°œλ³€μˆ˜κ°€ λ§Žμ„ 경우 λŒ€μ‘μ΄ νž˜λ“€λ‹€λŠ” λ™μΌν•œ μ œμ•½μ΄ μžˆλ‹€. 특히 λ§€κ°œλ³€μˆ˜κ°€ ꡉμž₯히 λ§Žμ€λ° λŒ€λΆ€λΆ„μ΄ 고정값인 경우 일반적인 λ°©λ²•μœΌλ‘œλŠ” κΉ”λ”ν•œ λŒ€μ‘μ΄ νž˜λ“€λ‹€. μœ μ—°ν•œ λŒ€μ‘μ„ μœ„ν•΄ 보톡 점측적 μƒμ„±μžνŒ¨ν„΄, μžλ°” 빈즈 νŒ¨ν„΄, λΉŒλ” νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ”λ°, 이번 μ±•ν„°μ—μ„œλŠ” λΉŒλ” νŒ¨ν„΄μ˜ μž₯점을 κ°•μ‘°ν•˜κ³  μžˆλ‹€. 각 νŒ¨ν„΄μ˜ μž₯단점을 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ³  λΉŒλ” νŒ¨ν„΄μ˜ μž₯점을 μ•Œμ•„λ³΄μž 1. 점측적 μƒμ„±μž νŒ¨ν„΄ ν•„μˆ˜ λ§€κ°œλ³€μˆ˜λ§Œ λ°›λŠ” μƒμ„±μž ν•„μˆ˜ λ§€κ°œλ³€μˆ˜μ™€ 선택 λ§€κ°œλ³€μˆ˜ 1개λ₯Ό λ°›λŠ” μƒμ„±μž, ν•„μˆ˜ λ§€κ°œλ³€μˆ˜μ™€ 선택 λ§€κ°œλ³€μˆ˜ 2개λ₯Ό λ°›λŠ” μƒμ„±μž, ν•„μˆ˜ λ§€κ°œλ³€μˆ˜μ™€ 선택 λ§€κ°œλ³€μˆ˜ 3개λ₯Ό λ°›λŠ” μƒμ„±μž, ... ...

[μ΄νŽ™ν‹°λΈŒ μžλ°”] 1. μƒμ„±μž λŒ€μ‹  정적 νŒ©ν„°λ¦¬ λ©”μ„œλ“œλ₯Ό κ³ λ €ν•˜λΌ

[μ΄νŽ™ν‹°λΈŒ μžλ°”] 1. μƒμ„±μž λŒ€μ‹  정적 νŒ©ν„°λ¦¬ λ©”μ„œλ“œλ₯Ό κ³ λ €ν•˜λΌ

μƒμ„±μž λŒ€μ‹  정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œλ₯Ό κ³ λ €ν•˜λΌ ν΄λΌμ΄μ–ΈνŠΈκ°€ 클래슀 μΈμŠ€ν„΄μŠ€λ₯Ό μ–»λŠ” λ°©λ²•μ—λŠ” 전톡적인 방법 쀑 ν•˜λ‚˜λŠ”Β public이닀. ν•˜μ§€λ§Œ 정적 νŒ©ν„°λ¦¬ λ©”μ„œλ“œ(static factory method)도 κΌ­ μ•Œμ•„λ‘μ–΄μ•Όν•œλ‹€. 1. 정적 νŒ©ν„°λ¦¬ λ©”μ„œλ“œλž€? κ·Έλ ‡λ‹€λ©΄ 정적 νŒ©ν„°λ¦¬ λ©”μ„œλ“œλŠ” λ¬΄μ—‡μΌκΉŒ? κ°„λ‹¨νžˆ 말해 객체 μƒμ„±μ˜ 역할을 ν•˜λŠ” 클래슀 λ©”μ„œλ“œλ‘œ, static λ©”μ„œλ“œλ₯Ό 톡해 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 것이닀. λ‹€μŒμ€ java의 κΈ°λ³Έ Boolean 클래슀 λ‚΄ 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œμ˜ κ°„λ‹¨ν•œ μ˜ˆμ‹œμ΄λ‹€.Β μ΄νŒ©ν‹°λΈŒ μžλ°”μ—μ„œλŠ” 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  μ‹œμ˜ 5κ°€μ§€ μž₯점과 2κ°€μ§€ 단점에 λŒ€ν•΄ μ„œμˆ ν•˜κ³  μžˆμ–΄Β μžμ„Έν•œ 비ꡐλ₯Ό 톡해 ν•˜λ‚˜ν•˜λ‚˜ μ•Œμ•„λ³΄λ € ν•œλ‹€. ...

[Spring] Java 21 μ™Έμž₯ ν†°μΊ£ 버전 μ„€μ •

[Spring] Java 21 μ™Έμž₯ ν†°μΊ£ 버전 μ„€μ •

1. 문제 상황 Java21 버전 μ—… 쀑, μΈν…”λ¦¬μ œμ΄ λ‚΄μž₯ ν†°μΊ£μœΌλ‘œλŠ” μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜μ§€λ§Œ, μ»€μŠ€ν…€ μ˜΅μ…˜μ„ μ‚¬μš© 쀑인 μ™Έμž₯톰캣을 κ·ΈλŒ€λ‘œ μ‚¬μš© μ‹œ μ •μƒμ μœΌλ‘œ κ΅¬λ™λ˜μ§€ μ•ŠλŠ” ν˜„μƒμ΄ λ°œκ²¬λ˜μ—ˆλ‹€. 2. ν•΄κ²° λ¨Όμ €, λΉŒλ“œ 및 path λ“± κΈ°μ‘΄ 섀정듀은 λ¬Έμ œκ°€ μ—†λŠ” 것을 ν™•μΈν•˜μ˜€κ³ , 둜컬 ν†°μΊ£μ—μ„œ μ •μƒμ μœΌλ‘œ ꡬ동됨을 ν™•μΈν•˜μ˜€κΈ°μ— λ‹€λ₯Έ 뢀뢄을 μΆ”κ°€λ‘œ 확인해 λ³΄μ•˜λ‹€. 버전업 영ν–₯도 νŒŒμ•…κΈ°κ°„ 쀑 기쑴에 ν†°μΊ£ 8.5 버전과 ν˜Έν™˜λ˜λŠ” 것을 ν™•μΈν•˜μ˜€μœΌλ‚˜, 곡식 ν™ˆνŽ˜μ΄μ§€μ—μ„œ μž¬ν™•μΈν•΄λ³΄μ•˜λ‹€. ν†°μΊ£ 8.5 λ²„μ „μ˜ μžλ°” 지원버전을 보면 "7 and later"둜 λ˜μ–΄μžˆμ–΄ 7 이후 버전을 λ‹€ μ‚¬μš© κ°€λŠ₯ν•œ κ²ƒμœΌλ‘œ μ΄ν•΄ν–ˆμ—ˆμœΌλ‚˜, λ‹€λ₯Έ 버전을 μ‹œλ„. ...