Java์์ String ํด๋์ค๊ฐ ์๋ํ๋ ๋ฐฉ์
์ถ์ฒ:
DZone ์ ๋ ์ต๊ทผ ํ ํฌ๋ผ์์ ๋ค์ ์ง๋ฌธ์ ๋ฐ๊ฒฌํ์ต๋๋ค. โ์ฌ๊ธฐ์ ์ผ๋ง๋ ๋ง์
๋ฌธ์์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๊น ? ํ๋ ๋๋ ๋?".
String langName = new String("Java");
ํนํ Java์์
String ํด๋์ค๊ฐ ์๋ ํ๋ ๋ฐฉ์์ ๋ํด ์ ์์ง ๋ชปํ๋ ๊ฒฝ์ฐ ๋ณต์กํ ์ง๋ฌธ์ด๋ผ๋ ๊ฒ์ ์๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๋ป๊ฒ ๋๋ตํ๋์ง ๊ถ๊ธํ์ต๋๋ค . ๊ทธ๋์ ๋๊ธ ์น์
์ผ๋ก ๋ฐ์ด๋ค์์ต๋๋ค.
๋๋๊ฒ๋ ๋๊ธ ์์ฑ์ ์ค์๋ '1'์ ์ ๋ต์ผ๋ก ์ ํํ ๋ถ๋ค๋ ๊ณ์
จ๋๋ฐ, '2'๋ผ๊ณ ๋ตํ์ ๋ถ๋ค์ด ๋ ๋ง์์ต๋๋ค. ์ ์ ๋์ ๋๋
Strings ์ ๋ํ ๋์ ์ง์์ ์์ฌํ๊ธฐ ์์ํ์ต๋๋ค . ์ ๋ต์ ๋ชจ๋ ๊ฒ์ด ์ํฉ์ ๋ฌ๋ ค ์๋ค๋ ๊ฒ์
๋๋ค. ์ง๋ฌธ์ ์ถฉ๋ถํ ๋ช
ํํ์ง ์์ผ๋ฉฐ ๋
ผ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊ฟ ๋งํ๊ณ ์ถ์ต๋๋ค.
1. ์ด ๋ช
๋ น๋ฌธ์ด ์คํ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ช ๊ฐ์ Java String ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๊น?
๋ต์ ํ๋๋ฟ์
๋๋ค.
์ด ๋ช
๋ น๋ฌธ์ ์คํํ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ง๋ ๋ง์ Java String ๊ฐ์ฒด๊ฐ ๋จ์ ์์ต๋๊น?
๋๋ต์ ๋ ๊ฐ์ง์
๋๋ค. ์์ ์์ ๊ฐ์ ๋ช
๋ น๋ฌธ์ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ํ์ธํ ํ์ ๋ถํ์ค์ฑ์ด ์ฌ๋ผ์ก๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ ์ด๋ฏธ์ง์ ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ ๋์ผํ ๋ด์ฉ์ ๊ฐ์ง ๋ ๊ฐ์
String ๊ฐ์ฒด๊ฐ ์์์ ๋ณด์ฌ์ค๋๋ค. ์ด๋
String ํด๋์ค ์์ฑ์๋ฅผ ํธ์ถํ๊ณ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ธ์๋ก ์ ๋ฌํ๋ฉด ๋ ๊ฐ์ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ถ๊ฐ๋๋ค๋ ๊ฒ์ ์ฆ๋ช
ํฉ๋๋ค. ํ๋๋ ์ผ๋ฐ(ํ์ด ์๋) ๋ฉ๋ชจ๋ฆฌ์ ์๊ณ ๋ค๋ฅธ ํ๋๋ ๋ฌธ์์ด ์์ ํ(SCP)์ ์์ต๋๋ค. ํ์ ์ผ๋ถ์ด๊ธฐ๋ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์
๋๋ค. ์ถ๊ฐ ํ ์ด๋ ค์์ด ์์๋ฉ๋๋ค. ์์ฑ์๋ฅผ ํธ์ถํ๋ฉด ํญ์ ์ ๊ฐ์ฒด๊ฐ ํ์ด ์๋ ์์ญ์ ๋ฐฐ์น๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ธ ์์ฑ์ ์ธ์๋ ๊ฐ์ฒด์ด๋ฉฐ, ๋ฌธ์์ด ํ์ ๋์ผํ ๋ด์ฉ์ ๋ฌธ์์ด์ด ํฌํจ๋์ด ์์ง ์๋ค๋ฉด ํด๋์ค ๋ก๋ฉ ์ค์ SCP์ ์์ฑ ๋ฐ ์ ์ฅ๋ฉ๋๋ค. Java
์ธ์ด ์ฌ์์๋ "๋ฌธ์์ด ๋ฆฌํฐ๋ด(๋ ์ผ๋ฐ์ ์ผ๋ก๋ ์์ ํํ์(ยง15.28)์ ๊ฐ์ธ ๋ฌธ์์ด)์ด "์ธํด"๋์ด ๋ฌธ์์ด ๋ฉ์๋ . intern "์ ์ฌ์ฉํ์ฌ ๊ณ ์ ํ ์ธ์คํด์ค๋ฅผ ๊ณต์ ํ๋ค๊ณ ๋ช
์๋์ด
์์ต๋๋ค . Java์ ๋ฌธ์์ด์ ๋ฆฌํฐ๋ด์ด๋ฏ๋ก ์์ ํํ์์ ๊ฐ์ ๋ํ๋ด๋ฏ๋ก ํ๋ง๋ฉ๋๋ค. ์ด๋ฅผ ๋์ฑ ๋ช
ํํ๊ฒ ํ๊ธฐ ์ํด ๊ธฐ์ฌ ์์ ๋ถ๋ถ์ ์ ์๋ ์ฝ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ค์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
String java = "Java";
String langName = new String(java);
์ด์ ์ฃผ์ ์ง๋ฌธ์ผ๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค. ๋ค์ ๋ช
๋ น๋ฌธ์ ํ๋ ๋๋ ๋ ๊ฐ์
String ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๊น ?
String langName = new String("Java");
์ด ์ง๋ฌธ์ ๋ตํ๊ณ ์์ฌ์ ์์ ๊ธฐ ์ํด ๊ธฐ๋ณธ ๋ฉ์๋์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
public static main([Ljava/lang/String;)V
L0
LINENUMBER 11 L0
NEW java/lang/String
DUP
LDC "Java"
INVOKESPECIAL java/lang/String. (Ljava/lang/String;)V
ASTORE 1
L1
LINENUMBER 14 L1
FRAME APPEND [java/lang/String]
GOTO L1
L2
LOCALVARIABLE args [Ljava/lang/String; L0 L2 0
LOCALVARIABLE langName Ljava/lang/String; L1 L2 1
MAXSTACK = 3
MAXLOCALS = 2
6ํ์์๋ LDC(Load Constant) ๋ช
๋ น์ ๋ณผ ์ ์์ต๋๋ค. ๋ฌธ์์ด ์์ ํ์ ์์๋ฅผ ์คํ์ผ๋ก ๋ก๋ํฉ๋๋ค. ์ด๋ ์์ฑ์๊ฐ ํธ์ถ๋ ๋ ๊ฐ์ฒด์ด๊ธฐ๋ ํ Java ๋ฆฌํฐ๋ด์ด ์ด๋ฏธ ํ์ ์ถ๊ฐ๋์์์ ์๋ฏธํฉ๋๋ค. ํด๋์ค๋ฅผ ๋ก๋ํ๋ ๋์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ์ต๋๋ค. ๋ฐ๋ผ์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ์ฌ
String ํด๋์ค ์์ฑ์๋ฅผ ํธ์ถ ํ๋ฉด ๊ฐ์ฒด๊ฐ ํ๋๋ง ์์ฑ๋๊ณ ํ๋ง๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์์น์ ๋ฐฐ์น๋ฉ๋๋ค.
Java๋ก ์น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
์ถ์ฒ:
Dev.to JavaScript์ ์ธ๊ณ๋ ์ ์ฉํ๊ณ ์ฌ๋ฏธ์๋ ์น ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ๋ฏ๋ก ์์ฌ์ ์ฌ์ง๊ฐ ์์ต๋๋ค. Java ๊ฐ๋ฐ์๋ฅผ ์ํ ํฅ๋ฏธ๋ก์ด ๋์์ด ์์ต๋๋ค. ๋ฐ๋ก ์คํ ์์ค
Vaadin ํ๋ ์์ํฌ์
๋๋ค. ์ด๋ฅผ ํตํด Java ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ง ์ฌ์ฉํ์ฌ ์น์ฉ
๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค (GUI)๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. HTML์ด๋ JavaScript๋ฅผ ํ ์ค๋ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค. ์ฒ ๋ง๋ ๋ง๋ณด๋ค ํ ์ฅ์ ์ฌ์ง์ด ๋ ์ค์ํฉ๋๋ค.
๋ฐ๋์ ์ด๋ป๊ฒ ์๋ํ๋์?
์คํฌ๋ฆฐ์ท ์ผ์ชฝ์ Java ํด๋์ค๊ฐ ํ์๋ฉ๋๋ค. ์ด ์ฝ๋๋ Apache Tomcat, Eclipse Jetty ๋๋ ๊ธฐํ ์๋ธ๋ฆฟ ์ปจํ
์ด๋์ ๊ฐ์ ์๋ฒ์์ ์คํ๋ฉ๋๋ค. ํ๋ซํผ์์ ์ ๊ณตํ๋ API๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธ ํ๋, ์ฝค๋ณด ์์, ๋ฐ์ดํฐ ๊ทธ๋ฆฌ๋, ๋ ์ง ์ ํ๊ธฐ, ์
๋ก๋ ํ๋ ๋ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)
๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ตฌ์ฑ ์์๋ฅผ ๊ฒฐํฉํ์ฌ ๋ณด๊ธฐ(ํ์ด์ง ๋๋ UI๋ผ๊ณ ๋ ํจ)๋ฅผ ์์ฑํ๊ณ ๋ ์ด์์์ ์ฌ์ฉํ์ฌ UI(์ฌ์ฉ์ ์ธํฐํ์ด์ค) ๊ตฌ์ฑ ์์๋ฅผ ์์ง, ์ํ ๋๋ CSS๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ ๋ ฌํ ์ ์์ต๋๋ค. ์ด์ ์์ ์์๋
TextField ์
Button์ VerticalLayout ์ ์ถ๊ฐํ์ฌ ๋ง๋ค์์ต๋๋ค .
๋ทฐ๊ฐ ์ค๋น๋๋ฉด @Route ์ฃผ์ ์ ์ฌ์ฉํ์ฌ URL์ ํตํด ์ด ์ ์์ต๋๋ค .
์ด ์์์๋ @Route("hello") ๋ฅผ ์ฌ์ฉํ์ฌ http://localhost:8080/hello์์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ต๋๋ค . Vaadin ์ ํ๋ฆฌ์ผ์ด์
์ Java๋ก ์์ฑ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์
๋๋ค. ํ๋ ์์ํฌ๋ HTTP ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํ๋ ์๋ธ๋ฆฟ ๊ตฌํ(
VadinServlet )์ ์ ๊ณตํฉ๋๋ค.
์ด ์๋ธ๋ฆฟ์ @Route ์ฃผ์ ์ผ๋ก ํ์๋ Java ํด๋์ค๋ฅผ ๊ฒ์ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ฌ๋ฐ๋ฅธ ๋ณด๊ธฐ๋ฅผ ํ์ํฉ๋๋ค. Vaadin ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฒ์ ์์ฒญ๋๋ฉด Vaadin์ ํด๋ผ์ด์ธํธ ์์ง ์ญํ ์ ํ๋ ๊ฒฝ๋ JavaScript ํ์ผ๋ก ์๋ตํฉ๋๋ค. ์ด ์์ง์ ๋ธ๋ผ์ฐ์ ์์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ด๋ฅผ JSON ๋ฉ์์ง๋ก ์๋ฒ์ ๋ณด๋ด๋ ์์
์ ๋ด๋นํฉ๋๋ค.
VaadinServlet ๊ฐ์ฒด๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋ผ์ด์ธํธ ์ธก ์์ง์ JSON ์๋ต์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ง์ ์ด ๋ฉ์์ง๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ฐ์ดํธํด์ผ ํ๋ ํ์ด์ง์ ์์(์๋ ๊ฒฝ์ฐ)๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค. Vaadin์ HTTP ์ธ์
์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ํ๋ฅผ ํฌํจํ๋ ๊ตฌ์ฑ ์์ ํธ๋ฆฌ๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ตฌ์ฑ ์์์ ๊ฐ์ ๊ฒ๋ค์ ํํ๊ณผ ํด๋น ์ํ(ํ์ฑํ/๋นํ์ฑํ, ์บก์
, ๊ฐ ๋ฑ)๋ฅผ ํ์ฑํฉ๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ์ธ๊ธํ ๊ฐ์น๊ฐ ์๋ ๋ณด์ ์์ค์ ์ ๊ณตํฉ๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋ก์ง์ ์๋ฒ์ ์์ผ๋ฏ๋ก ๊ณต๊ฒฉ์๊ฐ ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ฒ์ฌ๋ ์๋ฒ์์ ์ํ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, setEnabled(false) ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ์ ๋นํ์ฑํํ๋ฉด ์ด๋ ๋ธ๋ผ์ฐ์ ์ ๋จ์ํ ์ธ๊ด ๊ธฐ๋ฅ์ด ์๋๋๋ค. ์๋ฒ๋ ๋นํ์ฑํ๋ ๋ฒํผ์ ์ถ๊ฐ๋ ํด๋ฆญ ๋ฆฌ์ค๋์์ ์ด๋ค ๋ก์ง๋ ์คํํ์ง ์์ผ๋ฏ๋ก ๊ณต๊ฒฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์
์ฉํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ํ์ฑํ๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋
VaadinServlet์ ํธ์ถํ์ฌ ๋ง์ฐ์ค ํด๋ฆญ(ํด๋ฆญ ์ด๋ฒคํธ)์ ์๋ฎฌ๋ ์ด์
ํฉ๋๋ค.
Vaadin์ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋์?
์. Vaadin์ Apache License 2.0์ ๋ฐ๋ผ ๊ฒ์๋ ์คํ ์์ค ํ๋ ์์ํฌ์
๋๋ค. ๋ณธ๊ฒฉ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค๊ธฐ ์ํด ์๋ฌด๊ฒ๋ ๊ตฌ์
ํ ํ์๊ฐ ์์ต๋๋ค. ์ฑ๋ฅ์ ํฅ์์ํค๋ ์์ฉ ๊ตฌ์ฑ ์์๊ฐ ์์ง๋ง ํ์๋ ์๋๋๋ค. ์๋ฅผ ๋ค์ด, ๋ทฐ๋ฅผ ๋์ฑ ๋น ๋ฅด๊ฒ ์์ฑํ๋ ๋ฐ ๋์์ด ๋๋
๋น์ฃผ์ผ ๋์์ด๋ ์ CRUD ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค . ๊ตฌ๋
ํ๊ธฐ ์ ์ ์ด๋ฌํ ๊ตฌ์ฑ ์์๋ฅผ ๋ฌด๋ฃ๋ก ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๋ค.
Vaadin์ JSP ๋ฐ JSF๋ฅผ ๋์ฒดํฉ๋๊น?
์. JSP, JSF ๋ฐ Angular์ ๊ฐ์ JavaScript ํ๋ ์์ํฌ๋ฅผ ๋์ฒดํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์ Vaadin ๊ณ ๊ฐ์ด ์ด๋ฌํ ๊ธฐ์ ์์ Vaadin์ผ๋ก ์ฑ๊ณต์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ์ต๋๋ค.
Vaadin์ Spring ๋ฐ Jakarta EE๋ฅผ ์ง์ํฉ๋๊น?
์. Vaadin์ Spring ๋ฐ Jakarta EE(์ด์ Java EE)์ ๊ณต์์ ์ผ๋ก ํตํฉ๋์ด ์์ต๋๋ค. Spring Initializr๋ฅผ ์ฌ์ฉํ์ฌ ์ Spring Boot ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ Vaadin์ ์ข
์์ฑ์ผ๋ก ์ถ๊ฐํ ์ ์์ต๋๋ค. Jakarta EE์ ๊ฒฝ์ฐ Jakarta EE๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋จํ Hello, World ์์ ๋ฅผ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ์ด ๊ธฐ์ฌ๋ฅผ ์์ฑํ๋ ์์ ์์๋ Jakarta EE ๋ฒ์ 8๋ง ์ง์๋ฉ๋๋ค.
๋๊ฐ Vaadin์ ์ฌ์ฉํฉ๋๊น?
๋ง์ Fortune 500๋ ๊ธฐ์
์ ๋ฌผ๋ก ์ฑ๊ณต์ ์ธ ์คํํธ์
๊ณผ ์ ์ธ๊ณ 20๋ง ๋ช
์ด์์ ๊ฐ๋ฐ์๋ Vaadin์ ์ฌ์ฉํฉ๋๋ค. ๋น ๋ฅธ ์์
๊ฐ์ด๋ ๋ฐ ๊ธฐํ Vaadin
๋ฌธ์๋ฅผ ํ์ธํ์ธ์ .
GO TO FULL VERSION