CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /์ต๋ช… ํด๋ž˜์Šค
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

์ต๋ช… ํด๋ž˜์Šค

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

public interface MonitoringSystem {
  
   public void startMonitoring();
}
3๊ฐœ์˜ ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๊ฐ€ ์ด๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

public class GeneralIndicatorMonitoringModule implements MonitoringSystem {
   
@Override
   public void startMonitoring() {
       System.out.println("Starting to monitor general indicators!");
   }
}


public class ErrorMonitoringModule implements MonitoringSystem {

   @Override
   public void startMonitoring() {
       System.out.println("Starting to monitor errors!");
   }
}


public class SecurityModule implements MonitoringSystem {

   @Override
   public void startMonitoring() {
       System.out.println("Starting to monitor security!");
   }
}
๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋œ ๊ฝค ์ผ๊ด€๋œ ์‹œ์Šคํ…œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค ๊ฐ๊ฐ์€ ์ž์‹ ์˜ ํ–‰๋™์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ชจ๋“ˆ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฌ์šด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ• ์ง€ ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๋‹จ์ง€ 3๊ฐœ์˜ ๊ฐ์ฒด( , , ) ์ต๋ช… ํด๋ž˜์Šค - 3๋ฅผ ์ƒ์„ฑ ํ•˜๊ณ  ๊ฐ๊ฐ์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์€ 3๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ๋“ค์— ๋Œ€ํ•ด 1๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. GeneralIndicatorMonitoringModuleErrorMonitoringModuleSecurityModulestartMonitoring()

public class Main {

   public static void main(String[] args) {

       GeneralIndicatorMonitoringModule generalModule = new GeneralIndicatorMonitoringModule();
       ErrorMonitoringModule errorModule = new ErrorMonitoringModule();
       SecurityModule securityModule = new SecurityModule();

       generalModule.startMonitoring();
       errorModule.startMonitoring();
       securityModule.startMonitoring();
   }
}
์ฝ˜์†” ์ถœ๋ ฅ:

Starting to monitor general indicators! 
Starting to monitor errors! 
Starting to monitor security!
์ด๋ ‡๊ฒŒ ์ž‘์€ ์ž‘์—…์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์ „์ฒด ์‹œ์Šคํ…œ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค: 3๊ฐœ์˜ ํด๋ž˜์Šค์™€ ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค! ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ๊ฒƒ์€ 6์ค„์˜ ์ฝ”๋“œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ์šฐ๋ฆฌ์˜ ์„ ํƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์Œ, ์šฐ๋ฆฌ๊ฐ€ ์ด๋Ÿฌํ•œ "์ผํšŒ์„ฑ" ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ๋ฉ‹์ง„ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์„œ ์ต๋ช…์˜ ๋‚ด๋ถ€ ํด๋ž˜์Šค๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์ค๋‹ˆ๋‹ค! ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

public class Main {

   public static void main(String[] args) {

       MonitoringSystem generalModule = new MonitoringSystem() {
           @Override
           public void startMonitoring() {
               System.out.println("Starting to monitor general indicators!");
           }
       };

       

MonitoringSystem errorModule = new MonitoringSystem() {
           @Override
           public void startMonitoring() {
               System.out.println("Starting to monitor errors!");
           }
       };

       MonitoringSystem securityModule = new MonitoringSystem() {
           @Override
           public void startMonitoring() {
               System.out.println("Starting to monitor security!");
           }
       };

       generalModule.startMonitoring();
       errorModule.startMonitoring();
       securityModule.startMonitoring();
   }
}
๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์•„ ๋ด…์‹œ๋‹ค! ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

MonitoringSystem generalModule = new MonitoringSystem() {
   
@Override
   public void startMonitoring() {
       System.out.println("Starting to monitor general indicators!");
   }
};
๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜ค๋žซ๋™์•ˆ ์•Œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋Š” ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์“ธ ๋•Œ:

MonitoringSystem generalModule = new MonitoringSystem() {
   
};
๋‹ค์Œ์€ Java ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  1. ์ธํ„ฐํŽ˜์ด์Šค ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ช…๋ช…๋˜์ง€ ์•Š์€ Java ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค MonitoringSystem.
  2. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค MonitoringSystem(์ด ์ž‘์—…์„ 3๋ฒˆ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค).
  3. ์ด ํด๋ž˜์Šค์˜ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์— ์ฃผ์˜ํ•˜์„ธ์š”.

MonitoringSystem generalModule = new MonitoringSystem() {
   
};
๋์— ์„ธ๋ฏธ์ฝœ๋ก ์ด ์žˆ์Šต๋‹ˆ๋‹ค! ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋™์‹œ์— ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ (์ค‘๊ด„ํ˜ธ ์‚ฌ์šฉ) ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉ ();). ์šฐ๋ฆฌ์˜ ์„ธ ๊ฐœ์ฒด๋Š” ๊ฐ๊ฐ startMonitoring()๊ณ ์œ ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

generalModule.startMonitoring();
errorModule.startMonitoring();
securityModule.startMonitoring();
์ฝ˜์†” ์ถœ๋ ฅ:

Starting to monitor general indicators! 
Starting to monitor errors! 
Starting to monitor security!
๊ทธ๊ฒŒ ๋‹ค์•ผ! ์šฐ๋ฆฌ๋Š” ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ธ ๊ฐœ์˜ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  MonitoringSystem์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๊ณ  ์„ธ ๋ฒˆ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ธ ๊ฐœ์˜ ๋ชจ๋“ˆ์ด ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์–ด ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๋™์‹œ์— ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐ๊ฐ€ ํ›จ์”ฌ ๋” ๋‹จ์ˆœํ•ด์กŒ์Šต๋‹ˆ๋‹ค! ๊ฒฐ๊ตญ, GeneralIndicatorMonitoringModule, ErrorMonitoringModule๋ฐ SecurityModuleํด๋ž˜์Šค๋Š” ์ด์ œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์™„์ „ํžˆ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๋“ค์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค ์—†์ด๋„ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ต๋ช… ํด๋ž˜์Šค์— ๋‹ค๋ฅธ ๋™์ž‘์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ(์˜ˆ: ๋‹ค๋ฅธ ํด๋ž˜์Šค์—๋Š” ์—†๋Š” ๊ณ ์œ ํ•œ ๋ฉ”์„œ๋“œ) ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MonitoringSystem generalModule = new MonitoringSystem() {
  
   @Override
   public void startMonitoring() {
       System.out.println("Starting to monitor general indicators!");
   }
  
   public void someSpecificMethod() {

       System.out.println("Specific method only for the first module");
   }
};
Oracle ์„ค๋ช…์„œ๋Š” "๋กœ์ปฌ ํด๋ž˜์Šค๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ [์ต๋ช… ํด๋ž˜์Šค]๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค."๋ผ๋Š” ์ข‹์€ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ต๋ช… ํด๋ž˜์Šค๋Š” ๋ณธ๊ฒฉ์ ์ธ ๋‚ด๋ถ€ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •์  ๋ฐ ๊ฐœ์ธ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜์—ฌ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

public class Main {

   private static int currentErrorCount = 23;

   public static void main(String[] args) {

       MonitoringSystem errorModule = new MonitoringSystem() {
          
           @Override
           public void startMonitoring() {
               System.out.println("Starting to monitor errors!");
           }

           public int getCurrentErrorCount() {

               return currentErrorCount;
           }
       };
   }
}
๋กœ์ปฌ ํด๋ž˜์Šค์™€ ๊ณตํ†ต์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ ๋ฉ”์„œ๋“œ errorModule์™ธ๋ถ€์˜ ๊ฐœ์ฒด์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ๋ชจ๋“  ์‹œ๋„๋Š” main()์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ต๋ช… ํด๋ž˜์Šค๊ฐ€ "์กฐ์ƒ"(๋‚ด๋ถ€ ํด๋ž˜์Šค)์—์„œ ์ƒ์†ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ต๋ช… ํด๋ž˜์Šค๋Š” ์ •์  ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค . ์œ„์˜ ์˜ˆ์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ getCurrentErrorCount()์ •์ ์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

// Error! Inner classes cannot have static declarations
public static int getCurrentErrorCount() {

   return currentErrorCount;
}
์ •์  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

MonitoringSystem errorModule = new MonitoringSystem() {

   // Error! Inner classes cannot have static declarations!
   static int staticInt = 10;

   @Override
   public void startMonitoring() {
       System.out.println("Starting to monitor errors!");
   }

};
๊ทธ๋ฆฌ๊ณ  ์˜ค๋Š˜ ์ˆ˜์—…์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ์ค‘์ฒฉ๋œ ํด๋ž˜์Šค์˜ ๋งˆ์ง€๋ง‰ ๊ทธ๋ฃน์„ ์กฐ์‚ฌํ–ˆ์ง€๋งŒ ์•„์ง ์ด ํ•ญ๋ชฉ์„ ์™„๋ฃŒํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค‘์ฒฉ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ๋ฌด์—‡์„ ๋” ๋ฐฐ์šฐ๊ฒŒ ๋ ๊นŒ์š”? ๋‹น์‹ ์€ ํ™•์‹คํžˆ ๊ณง ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค! :)
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION