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์ ๊ธฐ๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.