์•ˆ๋…• ๋ชจ๋‘๋“ค! ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋Š” ํ•จ์ •์ด ๊ฐ€๋“ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์„ ๋น„ํ‹€๊ฑฐ๋ฆฌ๊ฒŒ ํ•˜๊ณ  ๋ฐœ๊ฐ€๋ฝ์„ ๋ญ‰๊ฐœ๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š์„ ๋‹จ ํ•˜๋‚˜์˜ ์ฃผ์ œ๋„ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž์—๊ฒŒ๋Š” ํŠนํžˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ฐœ๊ฐ€๋ฝ์„ ๋ณดํ˜ธํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ฐ€์žฅ ๊ทผ๋ณธ์ ์ธ ์ฃผ์ œ์— ๋Œ€ํ•ด ๊นŠ์ด ํŒŒ๊ณ ๋“ค ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Java ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ์ค‘ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๊ฒ€ํ† ๋ฅผ ๊ณ„์†ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ์€ ๊ธฐ๋ณธ์ ์ธ ์ฃผ์ œ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ ํƒ์›”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์—๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์— ๋‹ค๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€์ ์ด์ง€ ์•Š์€ ์งˆ๋ฌธ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Java ๊ฐœ๋ฐœ์ž ์ง์œ„์— ๋Œ€ํ•œ ์ทจ์—… ๋ฉด์ ‘์˜ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ์‚ดํŽด๋ณด์„ธ์š”.  ํŒŒํŠธ 7 - 1

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();
}
์ฝ˜์†”์— ํ‘œ์‹œ๋˜๋Š” ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋ณ€ํ˜ธ์‚ฌ๊ฐ€ ๊ณ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ•์  ๋ฌธ์ œ ํ•ด๊ฒฐ... ํšŒ๊ณ„์‚ฌ๊ฐ€ ๊ณ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํšŒ๊ณ„ ๊ธฐ๋ก ์œ ์ง€... ๋ฒ•์  ๋ฌธ์ œ ํ•ด๊ฒฐ... ํšŒ๊ณ„ ๊ธฐ๋ก ์œ ์ง€... ๋ฒ•์  ๋ฌธ์ œ ํ•ด๊ฒฐ... ํšŒ๊ณ„ ๊ธฐ๋ก ์œ ์ง€... ๋ฒ•์  ๋ฌธ์ œ ํ•ด๊ฒฐ... ํšŒ๊ณ„ ๊ธฐ๋ก ์œ ์ง€... ๋ฒ•์  ๋ฌธ์ œ ํ•ด๊ฒฐ... ํšŒ๊ณ„ ์œ ์ง€ ๊ธฐ๋กโ€ฆ
๋ณด์‹œ๋‹ค์‹œํ”ผ ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐœ์˜ ๊ฐœ์ฒด๋งŒ ๋งŒ๋“ค๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ ์žฌ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์ด ๋””์ž์ธ ํŒจํ„ด์ด ๋ฆฌ์†Œ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๋ฏธ ๋ˆˆ์น˜์ฑ„์…จ๊ฒ ์ง€๋งŒ, ์ด ํŒจํ„ด์˜ ๋…ผ๋ฆฌ๋Š” ๋ณดํ—˜ ํ’€์˜ ๋…ผ๋ฆฌ์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Java ๊ฐœ๋ฐœ์ž ์ง์œ„์— ๋Œ€ํ•œ ์ทจ์—… ๋ฉด์ ‘์˜ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ์‚ดํŽด๋ณด์„ธ์š”.  ํŒŒํŠธ 7 - 2

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 ๋ฐฐ์—ด๋กœ ์ˆ˜์ง‘ํ•˜๊ณ  ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." Java ๊ฐœ๋ฐœ์ž ์ง์œ„์— ๋Œ€ํ•œ ์ทจ์—… ๋ฉด์ ‘์˜ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ์‚ดํŽด๋ณด์„ธ์š”.  ํŒŒํŠธ 7 - 3

์—ด๊ฑฐํ˜•

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();
   }
}
์˜ค๋Š˜์€ ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ํŽธ๊นŒ์ง€!
๋” ์ฝ์–ด๋ณด์„ธ์š”: