week 8 jisoo - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

์ž๋ฐ” 8 ํŠน์ง•

String, StringBuilder, StringBuffer ์ฐจ์ด

String์€ ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ๋‹ค. (immutable) ์ด์™€ ๋‹ฌ๋ฆฌ StringBuffer๋Š” ๊ฐ’์€ ๊ธฐ์กด memory ๊ฐ’์— appendํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋”ฐ์ ธ๋ณด๋ฉด ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ method๋“ค๊ณผ variable๋„ ๊ฐ™์ด ์ƒ์„ฑ๋˜๋Š”๋ฐ, StringBuffer๋Š” ์ด๋Ÿฐ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋˜ํ•œ ์ง€๊ธˆ์€ ํ•œ ๋ฒˆ๋งŒ ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ ์ˆ˜์‹ญ๋ฒˆ String์ด ๋”ํ•ด์ง€๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ String์˜ ์ฃผ์†Œ๊ฐ’์ด stack์— ์Œ“์ด๊ณ  ํด๋ž˜์Šค๋“ค์€ Garbage Collector๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „๊นŒ์ง€ heap์— ์ง€์†์ ์œผ๋กœ ์Œ“์ด๊ฒŒ ๋œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ ์ธ ์ธก๋ฉด์—์„œ๋Š” ์น˜๋ช…์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿผ String class์˜ ๋‚ด๋ถ€๋Š” ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๊ธฐ์— ์ƒˆ๋กœ ์ƒ์„ฑ๋ ๊นŒ.

์•„๋ž˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด value[]๋ผ๋Š” charํ˜•์˜ ๋ฐฐ์—ด์ด ๋ณด์ธ๋‹ค. ์—ฌ๊ธฐ์„œ ํžŒํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. private final charํ˜•์ด๋ผ๋Š” ๊ฒƒ์„ ๋ˆˆ์—ฌ๊ฒจ ๋ณด์•„์•ผ ํ•œ๋‹ค.

String์—์„œ ์ €์žฅ๋˜๋Š” ๋ฌธ์ž์—ด์€ ์•Œ๊ณ ๋ณด๋ฉด char์˜ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋ฉฐ ์ด ๊ฐ’๋“ค์€ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก private์œผ๋กœ ๋ณดํ˜ธ๋œ๋‹ค. ๋˜ํ•œ finalํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง„ String์˜ ๊ฐ’์€ ๋ถˆ๋ณ€์œผ๋กœ ๋ฐ”๋€” ์ˆ˜๊ฐ€ ์—†๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. (Immutable)

String์˜ ํŠน์ง•์„ ์•Œ์•„๋ดค์œผ๋‹ˆ memory์— ๊ฐ’์„ appendํ•˜๋Š” StringBuilder์™€ StringBuffer์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. api๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

StringBuilder๋Š” ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด์ด์ง€๋งŒ synchronization์ด ์ ์šฉ๋˜์ง€ ์•Š์•˜๋‹ค. ํ•˜์ง€๋งŒ StringBuffer๋Š” thread-safe๋ผ๋Š” ๋ง์—์„œ์ฒ˜๋Ÿผ ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•˜์ง€๋งŒ multiple threadํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•œ ํด๋ž˜์Šค๋ผ๊ณ  ํ•œ๋‹ค. (๋™๊ธฐํ™” ์ง€์›). ์ด๊ฒƒ์ด StringBuilder์™€ StringBuffer์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์ด๋‹ค.

๋”ฐ๋ผ์„œ ๋‹จ์ผ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ผ๋ฉด StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜๋Š” StringBuffer ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

StringBuffer๋Š” ๋™๊ธฐํ™” ๊ด€๋ จ ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด StringBuilder์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค JDK 1.5๋ฒ„์ „ ์ด์ „์—์„œ๋Š” ๋ฌธ์ž์—ด์—ฐ์‚ฐ(+, concat)์„ ํ• ๋•Œ์—๋Š” ์กฐํ•ฉ๋œ ๋ฌธ์ž์—ด์„ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜์—ฌ ์ฐธ์กฐํ•จ์œผ๋กœ ์ธํ•ด์„œ ์„ฑ๋Šฅ์ƒ์˜ ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ JDK1.5 ๋ฒ„์ „ ์ดํ›„์—๋Š” ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ String ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ StringBuilder๋กœ ์ปดํŒŒ์ผ ๋˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌํ•˜์—ฌ JDK 1.5 ์ดํ›„ ๋ฒ„์ „์—์„œ๋Š” String ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด๋„ StringBuilder์™€ ์„ฑ๋Šฅ์ƒ์œผ๋กœ ์ฐจ์ด๊ฐ€ ์—†์–ด์กŒ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ˜๋ณต ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž์—ด์„ ๋”ํ•  ๋•Œ์—๋Š” ๊ฐ์ฒด๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์—๋Š” ๋ณ€ํ•จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ String ํด๋ž˜์Šค๋ฅผ ์“ฐ๋Š” ๋Œ€์‹ , ์Šค๋ ˆ๋“œ์™€ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉด StringBuffer๋ฅผ, ์Šค๋ ˆ๋“œ ์•ˆ์ „ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์ด ์—†์œผ๋ฉด StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

dispatcherServlet์ด๋ž€?

DispatcherServlet ์ด๋ž€? FrontController ์—ญํ• 

dispatcher-servlet์—์„œ dispatch๋Š” ๋ณด๋‚ด๋‹ค๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Servlet Container์—์„œ HTTPํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต์˜ ์ œ์ผ์•ž์— ๋‘ฌ์„œ ์ค‘์•™์ง‘์ค‘์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Front Controller)

์ด๊ฒƒ์„ ์„ค๋ช…ํ•ด์ฃผ์ž๋ฉด, ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์–ด๋– ํ•œ ์š”์ฒญ์ด ์˜ค๋ฉด **Tomcat(ํ†ฐ์บฃ)**๊ณผ ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๋Š”๋ฐ, ์ด๋•Œ ์ œ์ผ ์•ž์—์„œ ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” *ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ Spring์—์„œ ์ •์˜ํ•˜์˜€๊ณ , ์ด๋ฅผ Dispatcher-Servlet์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณตํ†ต์ฒ˜๋ฆฌ ์ž‘์—…์„ Dispatcher ์„œ๋ธ”๋ฆฟ์ด ์ฒ˜๋ฆฌํ•œ ํ›„, ์ ์ ˆํ•œ ์„ธ๋ถ€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ž‘์—…์„ ์œ„์ž„ํ•ด์ค๋‹ˆ๋‹ค.

๋ฌผ๋ก  Dispatcher-Servlet์ด ์ฒ˜๋ฆฌํ•˜๋Š” url ํŒจํ„ด์„ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” /*.do์™€ ๊ฐ™์œผ /๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ .do๋กœ ๋๋‚˜๋Š” url ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋ผ๊ณ  ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.

Q) Front Controller(ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ)๋ž€?

Front Controller๋Š” ์ฃผ๋กœ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์ œ์ผ ์•ž์—์„œ ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ธ๋ฐ, MVC ๊ตฌ์กฐ์—์„œ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด์ด๋‹ค.

2. Dispatcher-Servlet์˜ ์žฅ์ 


Spring MVC๋Š” DispatcherServlet์ด ๋“ฑ์žฅํ•จ์— ๋”ฐ๋ผ web.xml์˜ ์—ญํ• ์„ ์ƒ๋‹นํžˆ ์ถ•์†Œ์‹œ์ผœ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•ด URL ๋งคํ•‘์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ web.xml์— ๋ชจ๋‘ ๋“ฑ๋กํ•ด์ฃผ์–ด์•ผ ํ–ˆ์ง€๋งŒ, dispatcher-servlet์ด ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ํ•ธ๋“ค๋งํ•ด์ฃผ๋ฉด์„œ ์ž‘์—…์„ ์ƒ๋‹นํžˆ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์„œ๋ธ”๋ฆฟ์„ ์ด์šฉํ•œ๋‹ค๋ฉด @MVC ์—ญ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋˜์–ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ Dispatcher Servlet์˜ ๊ธฐ๋Šฅ ์ฒ˜๋ฆฌ๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

JPA Persistence๋ž€?

jwt๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ๊ตฌ์„ฑ์€ ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ๊ณ , oauth์™€ ์ฐจ์ด๋Š”?

์˜จํ”„๋กœ๋ฏธ์Šค ํ™˜๊ฒฝ๊ณผ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์˜ ์ฐจ์ด ๋ฐ ์žฅ๋‹จ์ 