์๋
๋ชจ๋๋ค! ํ๋ก๊ทธ๋๋ฐ์๋ ํจ์ ์ด ๊ฐ๋ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ๋นํ๊ฑฐ๋ฆฌ๊ฒ ํ๊ณ ๋ฐ๊ฐ๋ฝ์ ๋ญ๊ฐ๊ฒ ๋ง๋ค์ง ์์ ๋จ ํ๋์ ์ฃผ์ ๋ ๊ฑฐ์ ์์ต๋๋ค. ์ด๋ณด์์๊ฒ๋ ํนํ ๊ทธ๋ ์ต๋๋ค. ๋ฐ๊ฐ๋ฝ์ ๋ณดํธํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์
๋๋ค. ํนํ, ๊ฐ์ฅ ๊ทผ๋ณธ์ ์ธ ์ฃผ์ ์ ๋ํด ๊น์ด ํ๊ณ ๋ค ํ์๊ฐ ์์ต๋๋ค. ์ค๋์ Java ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ ์ค ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์ง๋ฌธ์ ๋ํ ๊ฒํ ๋ฅผ ๊ณ์ํ๊ฒ ์ต๋๋ค. ์ด๋ฌํ ์ธํฐ๋ทฐ ์ง๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ ์ฃผ์ ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ํ์ํ ์ญํ ์ ํฉ๋๋ค. ๋ชฉ๋ก์๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ๋ค๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋ ํ์ค์ ์ด์ง ์์ ์ง๋ฌธ๋ ํฌํจ๋์ด ์์ต๋๋ค.

62. ์คํธ๋ง ํ์ด๋ ๋ฌด์์ด๋ฉฐ, ์ ํ์ํ๊ฐ์?
Java ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ถ๋ฅผ ํ(๋์ค์ ์ค๋ช )์ด๋ผ๊ณ ํ๋ฉฐ ํ์ ์ผ๋ถ๋ฅผ ๋ฌธ์์ด ํ์ด ๋ผ๊ณ ํฉ๋๋ค . ๋ฌธ์์ด ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์ฆ, ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ํฐ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์์ฑํ ๋:String str = "Hello world";
JVM์ ๋ฌธ์์ด ํ์ ์ด๋ฏธ ์ง์ ๋ ๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด str ๋ณ์์๋ ํ์ ํด๋น ๊ฐ์ ๋ํ ์ฐธ์กฐ๊ฐ ํ ๋น๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํ์ ์ ๊ฐ์ด ์์ฑ๋๊ณ ํด๋น ๊ฐ์ ๋ํ ์ฐธ์กฐ๊ฐ str ๋ณ์์ ํ ๋น๋ฉ๋๋ค. ์๋ฅผ ์๊ฐํด ๋ด
์๋ค:
String firstStr = "Hello world";
String secondStr = "Hello world";
System.out.println(firstStr == secondStr);
true๊ฐ ํ๋ฉด์ ํ์๋ฉ๋๋ค. ==๋ ์ฐธ์กฐ๋ฅผ ๋น๊ตํ๋ฉฐ ์ด ๋ ๋ณ์๋ ๋ฌธ์์ด ํ์์ ๋์ผํ ๊ฐ์ ๊ฐ๋ฆฌํจ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์ . ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ๋์ผํ String ๊ฐ์ฒด๊ฐ ๋ง์ด ์์ฑ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๊ธฐ์ตํ์๊ฒ ์ง๋ง String ์ ๋ถ๋ณ ํด๋์ค์ด๋ฏ๋ก ๋์ผํ ๊ฐ์ ๋ํ ์ฌ๋ฌ ์ฐธ์กฐ๋ฅผ ๊ฐ๋ ๋ฐ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์ด์ ํ ๊ณณ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์ฌ๋ฌ ๋ค๋ฅธ ์ฐธ์กฐ๋ ๋ณ๊ฒฝ๋๋ ์ํฉ์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋๋ new๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค .
String str = new String("Hello world");
๊ทธ๋ฐ ๋ค์ ๋ณ๋์ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋๊ณ ์ง์ ๋ ๋ฌธ์์ด ๊ฐ์ ์ ์ฅํฉ๋๋ค(ํด๋น ๊ฐ์ด ์ด๋ฏธ ๋ฌธ์์ด ํ์ ์๋์ง๋ ์ค์ํ์ง ์์ต๋๋ค). ์ด ์ฃผ์ฅ์ ํ์ธํ๋ ค๋ฉด ๋ค์์ ๊ณ ๋ คํ์ญ์์ค.
String firstStr = new String("Hello world");
String secondStr = "Hello world";
String thirdStr = new String("Hello world");
System.out.println(firstStr == secondStr);
System.out.println(firstStr == thirdStr);
false ๋ฅผ ๋ํ๋ด๋ ๋ ์ค์ด ํ์๋ฉ๋๋ค . ์ด๋ ์ธ ๊ฐ์ ๋ณ๋ ๋ฌธ์์ด์ด ์์์ ์๋ฏธํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ฒ์ด ๋ฐ๋ก ํฐ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์์ฑํด์ผ ํ๋ ์ด์ ์
๋๋ค. ์ฆ, new ํค์๋ ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋์๋ ๋ฌธ์์ด ํ์ ๊ฐ์ ์ถ๊ฐ(๋๋ ์ฐธ์กฐ ๊ฐ์ ธ์ค๊ธฐ)ํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค . ์ด๋ฅผ ์ํด String ํด๋์ค์ intern() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด ํ์ ๊ฐ์ ์์ฑํ๊ฑฐ๋ ๊ฐ์ด ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
String firstStr = new String("Hello world").intern();
String secondStr = "Hello world";
String thirdStr = new String("Hello world").intern();
System.out.println(firstStr == secondStr);
System.out.println(firstStr == thirdStr);
System.out.println(secondStr == thirdStr);
์ด ์ฝ๋๋ ์ฝ์์ true๋ฅผ ์ธ ๋ฒ ์ถ๋ ฅํ๋ฉฐ, ์ด๋ ์ธ ๋ณ์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋์ผํ ๋ฌธ์์ด์ ์ฐธ์กฐํจ์ ์๋ ค์ค๋๋ค.
63. ์คํธ๋ง ํ์๋ ์ด๋ค GoF ๋์์ธ ํจํด์ด ์ฌ์ฉ๋ฉ๋๊น?
์คํธ๋ง ํ์์ GoF ๋์์ธ ํจํด์ ํ๋ผ์ด๊ธ ํจํด ์ ๋๋ค . ์ฌ๊ธฐ์์ ๋ ๋ค๋ฅธ ๋์์ธ ํจํด์ ๋ฐ๊ฒฌํ๋ค๋ฉด ๋๊ธ๋ก ๊ณต์ ํด ์ฃผ์ธ์. ์ฌ๊ธฐ์๋ ํ๋ผ์ด์จ์ดํธ ๋์์ธ ํจํด์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ์์น์์ ๊ณ ์ ํ ์ธ์คํด์ค๋ก ์์ ์ ๋ํ๋ด๋ ๊ฐ์ฒด๊ฐ ์ค์ ๋ก ๊ณ ์ ํ์ง ์์ ๊ตฌ์กฐ์ ๋์์ธ ํจํด์ ๋๋ค. ํ๋ผ์ด์จ์ดํธ๋ ๊ฐ ๊ฐ์ฒด์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋์ ๊ฐ์ฒด์ ๊ณต์ ์ํ๋ฅผ ์ ์ฅํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํฉ๋๋ค. ์์ ์ ์ดํดํ๋ ค๋ฉด ์ด ๊ธฐ๋ณธ ์๋ฅผ ๊ณ ๋ คํ์ญ์์ค. Employee ์ธํฐํ์ด์ค ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค .public interface Employee {
void work();
}
๊ทธ๋ฆฌ๊ณ Lawyer ํด๋์ค ์ ๊ฐ์ ๋ช ๊ฐ์ง ๊ตฌํ์ด ์์ต๋๋ค .
public class Lawyer implements Employee {
public Lawyer() {
System.out.println("A lawyer was hired.");
}
@Override
public void work() {
System.out.println("Settling legal issues...");
}
}
๊ทธ๋ฆฌ๊ณ ํ๊ณ์ฌ ์์
:
public class Accountant implements Employee {
public Accountant() {
System.out.println("An accountant was hired.");
}
@Override
public void work() {
System.out.println("Keeping accounting records...");
}
}
๋ฉ์๋๋ ์์ ํ ์์์ ์
๋๋ค. ์ด ์์์๋ ๋ฉ์๋๊ฐ ์คํ๋๊ณ ์๋์ง ํ์ธํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์์ฑ์์ ๋ํด์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ์ฝ์ ์ถ๋ ฅ์ ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ์๊ธฐ๋ฅผ ์๋ ค์ค๋๋ค. ๋ํ ์์ฒญํ ์ง์์ ๋๋ ค๋ณด๋ด๋ ์
๋ฌด๋ฅผ ๋ด๋นํ๋ ์ธ์ฌ ๋ถ์๋ ์์ต๋๋ค. ํด๋น ์ง์์ด ์์ง ์ง์์ด ์๋ ๊ฒฝ์ฐ ๊ณ ์ฉ๋๊ณ HR ๋ถ์๋ ์ ์ง์์ ๋ฐํํฉ๋๋ค.
public class HumanResourcesDepartment {
private Map<String, Employee> currentEmployees = new HashMap<>();
public Employee getEmployee(String type) throws Exception {
Employee result;
if (currentEmployees.containsKey(type)) {
result = currentEmployees.get(type);
} else {
switch (type) {
case "Accountant":
result = new Accountant();
currentEmployees.put(type, result);
break;
case "Lawyer":
result = new Lawyer();
currentEmployees.put(type, result);
break;
default:
throw new Exception("This employee is not on the staff!");
}
}
return result;
}
}
๋ฐ๋ผ์ ๋
ผ๋ฆฌ๋ ๊ฐ๋จํฉ๋๋ค. ์ํ๋ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ฉด ์ด๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์์ฑํ์ฌ ์ ์ฅ์(์บ์์ ๊ฐ์ ๊ฒ)์ ๋ฃ์ ๋ค์ ๋ฐํํฉ๋๋ค. ์ด์ ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
public static void main(String[] args) throws Exception {
HumanResourcesDepartment humanResourcesDepartment = new HumanResourcesDepartment();
Employee empl1 = humanResourcesDepartment.getEmployee("Lawyer");
empl1.work();
Employee empl2 = humanResourcesDepartment.getEmployee("Accountant");
empl2.work();
Employee empl3 = humanResourcesDepartment.getEmployee("Lawyer");
empl1.work();
Employee empl4 = humanResourcesDepartment.getEmployee("Accountant");
empl2.work();
Employee empl5 = humanResourcesDepartment.getEmployee("Lawyer");
empl1.work();
Employee empl6 = humanResourcesDepartment.getEmployee("Accountant");
empl2.work();
Employee empl7 = humanResourcesDepartment.getEmployee("Lawyer");
empl1.work();
Employee empl8 = humanResourcesDepartment.getEmployee("Accountant");
empl2.work();
Employee empl9 = humanResourcesDepartment.getEmployee("Lawyer");
empl1.work();
Employee empl10 = humanResourcesDepartment.getEmployee("Accountant");
empl2.work();
}
์ฝ์์ ํ์๋๋ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ณํธ์ฌ๊ฐ ๊ณ ์ฉ๋์์ต๋๋ค. ๋ฒ์ ๋ฌธ์ ํด๊ฒฐ... ํ๊ณ์ฌ๊ฐ ๊ณ ์ฉ๋์์ต๋๋ค. ํ๊ณ ๊ธฐ๋ก ์ ์ง... ๋ฒ์ ๋ฌธ์ ํด๊ฒฐ... ํ๊ณ ๊ธฐ๋ก ์ ์ง... ๋ฒ์ ๋ฌธ์ ํด๊ฒฐ... ํ๊ณ ๊ธฐ๋ก ์ ์ง... ๋ฒ์ ๋ฌธ์ ํด๊ฒฐ... ํ๊ณ ๊ธฐ๋ก ์ ์ง... ๋ฒ์ ๋ฌธ์ ํด๊ฒฐ... ํ๊ณ ์ ์ง ๊ธฐ๋กโฆ
๋ณด์๋ค์ํผ ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ ๊ฐ์ฒด๋ง ๋ง๋ค๊ณ ์ฌ๋ฌ ๋ฒ ์ฌ์ฌ์ฉํ์ต๋๋ค. ์ด ์๋ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง ์ด ๋์์ธ ํจํด์ด ๋ฆฌ์์ค๋ฅผ ์ด๋ป๊ฒ ์ ์ฝํ ์ ์๋์ง ๋ณด์ฌ์ค๋๋ค. ์ด๋ฏธ ๋์น์ฑ์
จ๊ฒ ์ง๋ง, ์ด ํจํด์ ๋
ผ๋ฆฌ๋ ๋ณดํ ํ์ ๋
ผ๋ฆฌ์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. 
64. ๋ฌธ์์ด์ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ๋๋๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ๊ด๋ จ ์ฝ๋์ ์๋ฅผ ๋ค์ด๋ณด์ธ์.
๋ถ๋ช ํ ์ด ์ง๋ฌธ์ ๋ถํ ๋ฐฉ๋ฒ์ ๊ดํ ๊ฒ์ ๋๋ค. String ํด๋์ค ์๋ ์ด ๋ฉ์๋์ ๋ํ ๋ ๊ฐ์ง ๋ณํ์ด ์์ต๋๋ค.String split(String regex);
๊ทธ๋ฆฌ๊ณ
String split(String regex);
regex ๋งค๊ฐ๋ณ์๋ ๊ตฌ๋ถ ๊ธฐํธ์
๋๋ค. ์๋ฅผ ๋ค์ด ๋ฌธ์์ด์ ๋ฌธ์์ด ๋ฐฐ์ด๋ก ๋ถํ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ผ๋ถ ์ ๊ท์์
๋๋ค .
String str = "Hello, world it's Amigo!";
String[] arr = str.split("\\s");
for (String s : arr) {
System.out.println(s);
}
์ฝ์์ ๋ค์์ด ํ์๋ฉ๋๋ค.
์๋
ํ์ธ์, ์ธ์ ์๋ฏธ๊ณ ์
๋๋ค!
๋ฐ๋ผ์ ๋ฌธ์์ด์ ๊ณต๋ฐฑ์ ๊ตฌ๋ถ ๊ธฐํธ๋ก ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ๋ฐฐ์ด๋ก ๋ถํ ๋์์ต๋๋ค(์ ๊ท ํํ์ "\\s" ๋์ ์ผ๋ฐ ๋ฌธ์์ด ํํ์ " " ์ ์ฌ์ฉํ ์๋ ์์ ). ๋ ๋ฒ์งธ ์ค๋ฒ๋ก๋๋ ๋ณํ์๋ ์ถ๊ฐ ์ ํ ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. Limit์ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ต๋ ํ์ฉ ํฌ๊ธฐ์
๋๋ค. ์ฆ, ๋ฌธ์์ด์ด ํ์ฉ๋๋ ์ต๋ ํ์ ๋ฌธ์์ด ์๋ก ๋ถํ ๋๋ฉด ๋ถํ ์ด ์ค์ง๋๊ณ ๋ง์ง๋ง ์์์๋ ๋ถํ ๋์ง ์์ ๋ฌธ์์ด์ "๋จ์ ๋ถ๋ถ"์ด ํฌํจ๋ฉ๋๋ค. ์:
String str = "Hello, world it's Amigo!";
String[] arr = str.split(" ", 2);
for (String s : arr) {
System.out.println(s);
}
์ฝ์ ์ถ๋ ฅ:
์๋
ํ์ธ์, ์ธ์ ์๋ฏธ๊ณ ์
๋๋ค!
๋ณด์๋ค์ํผ, limit = 2 ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ ์ธ ๊ฐ์ ํ์ ๋ฌธ์์ด๋ก ๋ถํ ๋ ์ ์์ต๋๋ค.
65. ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ๋ฐ ๋ฌธ์์ด๋ณด๋ค ๋ฌธ์ ๋ฐฐ์ด์ด ๋ ๋์ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ ๋ ๋ฌธ์์ด๋ณด๋ค ๋ฐฐ์ด์ ์ ํธํ๋ ๋ฐ์๋ ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค.1. ๋ฌธ์์ด ํ๊ณผ ๋ฌธ์์ด ๋ถ๋ณ์ฑ.
๋ฐฐ์ด( char[] )์ ์ฌ์ฉํ ๋ ์์ ์ด ๋๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ธ ์ ์์ต๋๋ค. ๋ํ ์ํ๋ ๋งํผ ๋ฐฐ์ด์ ๋ฎ์ด์ธ ์ ์์ด ๊ฐ๋น์ง ์์ง ์ด์ ์๋ ์์คํ ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค(๋ช ๊ฐ์ ์ ์ ์ ํจํ์ง ์์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค). ๋์กฐ์ ์ผ๋ก, String์ ๋ถ๋ณ ํด๋์ค์ ๋๋ค. ์ด๋ String ๊ฐ์ฒด ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๋ ๊ฒฝ์ฐ ์ ๊ฐ์ฒด๋ฅผ ์ป์ง๋ง ์ด์ ๊ฐ์ฒด๋ ๋ฌธ์์ด ํ์ ๋จ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋น๋ฐ๋ฒํธ๊ฐ ํฌํจ๋ ๋ฌธ์์ด์ ์ ๊ฑฐํ๋ ค๋ฉด ๋ฌธ์์ด ํ์์ ํด๋น ๊ฐ์ ์ ๊ฑฐํ๊ธฐ ์ํด ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ํ์ํ์ง๋ง ํด๋น ๋ฌธ์์ด์ ์ค๋ซ๋์ ๊ทธ๊ณณ์ ๋จ์ ์์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ๋ณต์กํ ์์ ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค . ์ฆ, ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๋ ๋ฐ ์์ด์ String ์ char ๋ฐฐ์ด ๋ณด๋ค ์ด๋ฑํฉ๋๋ค .2. ๋ฌธ์์ด ๊ฐ์ ์ฝ์(๋๋ ๋ก๊ทธ)์ ์ถ๋ ฅํ๋ฉด ๋ค์์ ์ป์ต๋๋ค.
String password = "password";
System.out.println("Password - " + password);
์ฝ์ ์ถ๋ ฅ:
๋น๋ฐ๋ฒํธ - ๋น๋ฐ๋ฒํธ
๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด์ ์ฝ์์ ์ธ์ํ๋ ๊ฒฝ์ฐ:
char[] arr = new char[]{'p','a','s','s','w','o','r','d'};
System.out.println("Password - " + arr);
์ฝ์์๋ ์ดํดํ ์ ์๋ ํก์ค์์ค์ด ํ์๋ฉ๋๋ค.
๋น๋ฐ๋ฒํธ - [C@7f31245a
์ฌ์ค, ๊ทธ๊ฒ์ ํก์ค์์ค์ด ์๋๋๋ค. ํ์๋๋ ๋ด์ฉ์ ์ดํดํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. [C ๋ ํด๋์ค ์ด๋ฆ - ๋ฌธ์ ๋ฐฐ์ด, @ ๋ ๊ตฌ๋ถ ๊ธฐํธ, 7f31245a ๋ 16์ง์ ํด์ ์ฝ๋์
๋๋ค.
3. ๊ณต์ JCA(Java Cryptography Architecture) ์ฐธ์กฐ ๊ฐ์ด๋์์๋ String ๋์ char[] ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋ช ์์ ์ผ๋ก ์ธ๊ธํฉ๋๋ค .
" java.lang.String ์ ํ์ ๊ฐ์ฒด์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์งํ๊ณ ์ ์ฅํ๋ ๊ฒ์ด ๋ ผ๋ฆฌ์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค . ๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์ฌํญ์ด ์์ต๋๋ค. String ์ ํ์ ๊ฐ์ฒด๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ฆ, ๋ณ๊ฒฝ(๋ฎ์ด์ฐ๊ธฐ)์ ํ์ฉํ๋ ๋ฉ์๋๊ฐ ์ ์๋์ด ์์ง ์์ต๋๋ค. ๋๋ ์ฌ์ฉ ํ String ์ ๋ด์ฉ์ 0์ผ๋ก ๋ง๋ญ๋๋ค . ์ด ๊ธฐ๋ฅ์ String ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ์ ๊ฐ์ ๋ณด์์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ ํฉํ์ง ์๊ฒ ๋ง๋ญ๋๋ค. ๋์ ํญ์ ๋ณด์์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ char ๋ฐฐ์ด๋ก ์์งํ๊ณ ์ ์ฅํด์ผ ํฉ๋๋ค."
์ด๊ฑฐํ
66. Java์ Enum์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ค๋ช ํด์ฃผ์ธ์
Enum ์ ์ด๊ฑฐํ์ ์ค์๋ง๋ก ๊ณตํต ์ ํ์ผ๋ก ํตํฉ๋ ๋ฌธ์์ด ์์ ์งํฉ์ ๋๋ค. enum ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํฉ๋๋ค . ๋ค์์ enum : ์ผ๋ถ ํ๊ต ์บ ํผ์ค์์ ํ์ฉ๋๋ ์ญํ ์ ์์ ๋๋ค .public enum Role {
STUDENT,
TEACHER,
DIRECTOR,
SECURITY_GUARD
}
๋๋ฌธ์๋ก ์ฐ์ฌ์ง ๋จ์ด๋ ์ด๊ฑฐํ ์์์ด๋ค. new ์ฐ์ฐ์ ์์ด ๋จ์ํ๋ ๋ฐฉ์์ผ๋ก ์ ์ธ๋ฉ๋๋ค . ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด ์ด๋ฆ์ ์ค๋ฅ์ ํผ๋์ ๋ฐฉ์งํ ์ ์์ผ๋ฏ๋ก ์์
์ด ํจ์ฌ ์ฌ์์ง๋๋ค(๋ชฉ๋ก์ ์ ํจํ ๊ฐ๋ง ์ ์ํ๋ฏ๋ก). ๋์๊ฒ๋ ์ค์์น
๊ตฌ์ฑ์ด ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค .
67. Enum์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๋์(implements ํค์๋ ์ฌ์ฉ)?
์. ๊ฒฐ๊ตญ ์ด๊ฑฐํ์ ๋จ์ํ ์๋ ์งํฉ(์: ํ๊ต ์บ ํผ์ค์์์ ์ญํ ) ์ด์์ ๋ํ๋ด์ผ ํฉ๋๋ค. Java์์๋ ๋ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ๋ํ๋ผ ์ ์์ผ๋ฏ๋ก ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผ ํ ์๋ ์์ต๋๋ค. ๋ํ ๊ตฌํ๋ ์ธํฐํ์ด์ค ์ ํ์ด ํ์ํ ์์น์ enum ๊ฐ์ ๋์ฒดํ์ฌ ๋คํ์ฑ์ ํ์ฉํ ์ ์์ต๋๋ค .68. Enum์ด ํด๋์ค๋ฅผ ํ์ฅํ ์ ์๋์(extends ํค์๋ ์ฌ์ฉ)?
์๋์, ๊ทธ๋ด ์ ์์ต๋๋ค. ์ด๊ฑฐํ์ ๊ธฐ๋ณธ Enum<T> ํด๋์ค์ ํ์ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฌ๊ธฐ์ T ๋ ์ด๊ฑฐํ ์ ํ์ ๋๋ค. ์ด๋ Java ์ธ์ด์ ๋ชจ๋ ์ด๊ฑฐํ ์ ํ์ ๋ํ ๊ณตํต ๊ธฐ๋ณธ ํด๋์ค์ ์ง๋์ง ์์ต๋๋ค. ์ด๊ฑฐํ ์์ ํด๋์ค๋ก์ ๋ณํ์ ์ปดํ์ผ ํ์์ Java ์ปดํ์ผ๋ฌ์ ์ํด ์ํ๋ฉ๋๋ค. ํ์ฅ์๋ ์ฝ๋์ ๋ช ์์ ์ผ๋ก ํ์๋์ง ์์ง๋ง ํญ์ ์์๋ฉ๋๋ค.69. ๊ฐ์ฒด์ ์ธ์คํด์ค ์์ด Enum์ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๊น?
์ด ์ง๋ฌธ์ ์ฝ๊ฐ ํผ๋์ค๋ฌ์์ ์ ๊ฐ ์์ ํ ์ดํดํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ ๊ฐ์ง ํด์์ด ์์ต๋๋ค. 1. ๊ฐ ์์ด ์ด๊ฑฐํ์ ๊ฐ์ง ์ ์์ต๋๊น? ์, ๋ฌผ๋ก ์ ๋๋ค. ํ์ง๋ง ๋น ํด๋์ค์ ๊ฐ์ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฌด์๋ฏธํฉ๋๋ค.public enum Role {
}
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ์ ํํ๋ฉด :
var s = Role.values();
System.out.println(s);
์ฝ์์์ ๋ค์์ ์ป์ต๋๋ค.
[Lflyweight.Role;@9f70c54
( Role ๊ฐ ์ ๋น ๋ฐฐ์ด ) 2. new ์ฐ์ฐ์ ์์ด ์ด๊ฑฐํ์ ์์ฑํ ์ ์์ต๋๊น ? ๋ฌผ๋ก ์ด์ฃ . ์์์ ๋งํ๋ฏ์ด ์ด๊ฑฐํ ๊ฐ์ ์ ์ ๊ฐ์ด๋ฏ๋ก new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
70. Enum์ toString() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ์ ์๋์?
์, ๋ฌผ๋ก toString ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ์ด๊ฑฐ ํ์ ํ์ํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๊ธฐ ์ํด toString() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ์ ์์ต๋๋ค( ์๋ฅผ ๋ค์ด ์ฝ์์ด๋ ๋ก๊ทธ์ ์ถ๋ ฅํ๊ธฐ ์ํด ์ด๊ฑฐํ ์ ์ผ๋ฐ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ฒฝ์ฐ).public enum Role {
STUDENT,
TEACHER,
DIRECTOR,
SECURITY_GUARD;
@Override
public String toString() {
return "Selected role - " + super.toString();
}
}
์ค๋์ ๊ทธ๊ฒ ์ ๋ถ์
๋๋ค. ๋ค์ ํธ๊น์ง!
GO TO FULL VERSION