๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ํ”„๋กœ๊ทธ๋žจ,  ํ”„๋กœ์„ธ์Šค, ์“ฐ๋ ˆ๋“œ_ 511p

 

• CPU 

: ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์žฅ์น˜๋กœ, ๊ฐ€์žฅ ๋น ๋ฅธ ์†๋„๋กœ ๋™์ž‘.

 

 ํ•˜๋“œ๋””์Šคํฌ

: ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€์žฅ ๋‚ฎ์€ ์†๋„๋กœ ๋™์ž‘.

 

 ๋ฉ”๋ชจ๋ฆฌ

: ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ CPU๋กœ ๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, CPU์™€ ๊ทผ์ ‘ํ•œ ์†๋„๋กœ ๋™์ž‘.

 

 ํ”„๋กœ๊ทธ๋žจ

: ํ•˜๋“œ๋””์Šคํฌ์— ์ €์žฅ๋œ ํŒŒ์ผ๋“ค์˜ ๋ชจ์ž„.

 

ํ”„๋กœ์„ธ์Šค

: ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ๋กœ๋”ฉ๋œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ์„ ๋™์ ์œผ๋กœ ๋กœ๋”ฉ.

 

 ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค

: ํ•˜๋‚˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ .

 

 ์“ฐ๋ ˆ๋“œ

: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—…์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ์ •๋œ ์ฝ”์–ด์˜ ์ˆ˜๋ฅผ ๊ฐ–๋Š” CPU์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—…์„ ๋‚˜๋ˆ  ์‚ฌ์šฉํ•˜๋ฉฐ, CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„.

 

 ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ

public class ThreadExample01 {
    public static void main(String[] args) {
    
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. ์ฒซ๋ฒˆ์งธ for๋ฌธ๊ณผ ๋‘๋ฒˆ์งธ for๋ฌธ์ด ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ๋‚˜์˜ค๊ธธ ์›ํ–ˆ์ง€๋งŒ ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ๋กœ ์ฒซ๋ฒˆ์งธ for์ด ๋ชจ๋‘ ์ˆ˜ํ–‰๋œ ๋‹ค์Œ ๋‘๋ฒˆ์งธ for๋ฌธ์ด ์ˆ˜ํ–‰๋œ๋‹ค.

 

 

 

 ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ

: ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ

 

 

โ‘  extends Thread + 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class Task1 extends Thread {
    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Task2 extends Thread {
    @Override
    public void run() {
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample02 {
    public static void main(String[] args) {
        Task1 t1 = new Task1(); 
        Task2 t2 = new Task2(); 

        t1.start();
        t2.start(); 
    }
}
์“ฐ๋ ˆ๋“œ์—๋Š” ๋™์‹œ์„ฑ(concurrency)๊ณผ ๋ณ‘๋ ฌ์„ฑ(parallelism)์ด ์žˆ๋‹ค. ๋™์‹œ์„ฑ์€ ์ฒ˜๋ฆฌํ•  ์ž‘์—…์˜ ์ˆ˜๊ฐ€ CPU์˜ ์ฝ”์–ด ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ๋•Œ ๊ฐ ์ž‘์—…์˜ ์“ฐ๋ ˆ๋“œ์˜ ์š”์ฒญ ์ž‘์—…์„ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ•œ๋‹ค. ๋งค์šฐ ์งง์€ ๊ฐ„๊ฒฉ์œผ๋กœ ๊ต์ฐจ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋Š” ๋‘ ์ž‘์—…์ด ๋งˆ์น˜ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ๋ณ‘๋ ฌ์„ฑ์€ CPU์˜ ์ฝ”์–ด ์ˆ˜๊ฐ€ ์ž‘์—… ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ๋•Œ๋กœ ๊ฐ๊ฐ์˜ ์ž‘์—…์„ ๊ฐ๊ฐ์˜ ์ฝ”์–ด์— ํ• ๋‹นํ•ด ๋™์‹œ์— ์‹คํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. 

์—ฌ๋Ÿฌ ์ž‘์—…์ด ์žˆ๊ณ  ์—ฌ๋Ÿฌ CPU๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋А ์ž‘์—…์„ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์ง„ํ–‰ํ• ๊ฑด์ง€ ์ฝ”๋“œ๋กœ ์ ์–ด๋‘๋ฉด ๋œ๋‹ค. ๊ทธ ๋‹ค์Œ JVM์ด ์šด์˜์ฒด์ œ๋กœ ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋ฅผ ๋„˜๊ธฐ๊ณ  ์šด์˜์ฒด์ œ๋Š” ๊ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์–ด๋А CPU์— ๋ฐฐ๋ถ„ํ• ์ง€ ์•Œ์•„์„œ ์ •ํ•œ๋‹ค. (๋ณดํ†ต ๋ฐฐ๋ถ„์€ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํ•œ๋‹ค)

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž. extends Thread๋กœ Thread๋ฅผ ์ƒ์†๋ฐ›์•˜๊ณ  Thread ๋‚ด๋ถ€์—” run( )๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Thread๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์— run( ) ๋ฉ”์„œ๋“œ ์•ˆ์— ์–ด๋–ค ๋™์ž‘์„ ์ˆ˜ํ–‰ํ• ์ง€ ์žฌ์ •์˜ํ•˜๋ฉด ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋˜์–ด Thread์—์„œ ์žฌ์ •์˜ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

์“ฐ๋ ˆ๋“œ์—์„œ ํŠน์ดํ•œ ์ ์ด ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ run์„ ์žฌ์ •์˜ํ–ˆ์œผ๋‹ˆ run์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋ ํ…๋ฐ, run( )์ด ์•„๋‹Œ start( )๊ฐ€ ์ ํ˜€์žˆ๋‹ค. ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹ค์ œ CPU์™€ ์ด์•ผ๊ธฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž์‹ ๋งŒ์˜ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ํฌํ•จํ•ด ์ค€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋งŽ๋‹ค. ์—ฌ๊ธฐ์„œ start ๋ฉ”์„œ๋“œ๊ฐ€ ์ค€๋น„๋‹จ๊ณ„ ํฌํ•จํ•œ run ๋ฉ”์„œ๋“œ ์‹คํ–‰์„ ์˜๋ฏธํ•œ๋‹ค. start( )๋Š” ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ/์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์ค€๋น„ + ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ ์œ„์— run( ) ์‹คํ–‰์ด๋‹ค.

 

 

 

โ‘ก extends Thread + 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class MyThread extends Thread {
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample03 {
    public static void main(String[] args) {
        MyThread t = new MyThread(); 
        t.start();

        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
์•ž์— ์žˆ์—ˆ๋˜ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๊ทธ์ € for๋ฌธ๋งŒ ์žˆ์—ˆ๋Š”๋ฐ ๋‹จ์ผ์“ฐ๋ ˆ๋“œ, extends Thread๊ฐ€ 2๊ฐœ์˜€๋Š”๋ฐ ์ด 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์˜€๊ณ , ์ด๋ฒˆ ์ฝ”๋“œ๋Š” extends Thread๊ฐ€ 1๊ฐœ์ธ๋ฐ ์ด 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์ด๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด๋ฉด main์— ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ JVM์€ ์ž๋™์œผ๋กœ main ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ์ฝ”๋“œ main์— ์ ์–ด๋‘” for๋ฌธ์ด ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

โ‘ข Runnable + 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class Task1 implements Runnable {
    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Task2 implements Runnable {
    @Override
    public void run() {
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample04 {
    public static void main(String[] args) {
        Runnable task1 = new Task1();
        Thread t1 = new Thread(task1);
        t1.start();
        
        Runnable task2 = new Task2();
        Thread t2 = new Thread(task2);
        t2.start();
    }
}
Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , run( ) ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์“ฐ๋ ˆ๋“œ์˜ ์ž‘์—… ๋‚ด์šฉ์„ ์ž‘์„ฑํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  main์—์„œ Runnable ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

extends Thread์™€ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. ๋ฐ”๋กœ Runnable ๊ฐ์ฒด์˜ ๋‚ด๋ถ€์—๋Š” start( ) ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.  ๊ทธ๋ž˜์„œ main์„ ๋ณด๋ฉด start( )๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Thread ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ Thread ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ start( )๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค. 

Runnable๋กœ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ์€ ์ธํ„ฐํŽ˜์ด์Šค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ƒ์†์€ ํ•œ ๋ฒˆ๋งŒ ๋˜๋Š”๋ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์†ํ•ด๋ฒ„๋ฆฌ๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. 

 

 

 

 


 

 

 

โœ”๏ธ   ์“ฐ๋ ˆ๋“œ์˜ ์†์„ฑ_ 527p

 

• currentThread( )

: ์—ฐ์‚ฐ์„ ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด์˜ ์ฐธ์ขƒ๊ฐ’์„ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

new Thread(() -> {
    System.out.println("์ž‘์—… ์‹œ์ž‘");
}).start();
System.out.println("main ์Šค๋ ˆ๋“œ ์ด๋ฆ„: " + Thread.currentThread().getName());
 
 or
 
Thread current = Thread.currentThread()
System.out.println("ํ˜„์žฌ ์Šค๋ ˆ๋“œ ์ด๋ฆ„: " + current.getName());
์œ„์˜ ์ฝ”๋“œ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜ ์—†์ด ์‹คํ–‰ํ•œ ์ฝ”๋“œ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ฐธ์กฐ ๋ณ€์ˆ˜ ์—†์ด ์ผํšŒ์„ฑ์œผ๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ .getName( ) ๊ฐ™์€ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ static Thread Thread.currentThread( )๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด ์ฐธ์ขƒ๊ฐ’์„ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

• activeCount( )

: ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

public class ThreadExample05 {
    public static void main(String[] args) {

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 1 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 1 ์ข…๋ฃŒ");
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 2 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 2 ์ข…๋ฃŒ");
            }
        });

        Thread t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 3 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 3 ์ข…๋ฃŒ");
            }
        });

        t1.start();
        t2.start();
        t3.start();
    }
}
System.out.println("ํ˜„์žฌ ํ™œ์„ฑ ์Šค๋ ˆ๋“œ ์ˆ˜: " + Thread.activeCount());
main ์“ฐ๋ ˆ๋“œ ๋‚ด์—๋Š” ์ด 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ™์€ ๊ทธ๋ฃน ๋‚ด์—์„œ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๊ณ ์‹ถ์„ ๋•Œ activeCount๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

• setName( )

: ์“ฐ๋ ˆ๋“œ์— ์ง์ ‘ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•œ๋‹ค.

Thread t1 = new Thread(task);
Thread t2 = new Thread(task);

t1.setName("1๋ฒˆ");
t2.setName("2๋ฒˆ");

 

 

 

• getName( )

: ์ง์ ‘ ์ง€์ •ํ–ˆ๊ฑฐ๋‚˜ ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋œ ์“ฐ๋ ˆ๋“œ์˜ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ๋‹ค.

for(int i=0; i<3; i++){
    Thread t1 = new Thread();
    t1.setName(i + "๋ฒˆ์งธ ์“ฐ๋ ˆ๋“œ");
    System.out.println(t1.getName());
    t1.start();
}

 

 

 

• ์šฐ์„ ์ˆœ์œ„

public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
void setPriority(int priority)
int getPriority()
๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋Š” 1~10 ์‚ฌ์ด์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 1์ด ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆœ์œ„์ด๋ฉฐ 10์ด ๊ฐ€์žฅ ๋†’์€ ์ˆœ์œ„๋‹ค. ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 5์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์šฐ์„ ์ˆœ์œ„๋Š” ์“ฐ๋ ˆ๋“œ์˜ ๋™์‹œ์„ฑ๊ณผ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค. ๋งŒ์ผ 2๊ฐœ์˜ ์ž‘์—…์ด ์ผ์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ์ชฝ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ๋‹น๋ฐ›๊ฒŒ ๋œ๋‹ค.

setPriority( )๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ณ , getPriority( )๋Š” ์ง€์ •๋œ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ๋‹ค.

 

 

 

• availableProcessors

ํ˜„์žฌ ์ปดํ“จํ„ฐ์˜ CPU ์ฝ”์–ด ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

public native int availableProcessors();

 

 

 

 


 

 

 

โœ”๏ธ  ๋ฐ๋ชฌ ์„ค์ •_ 533p

 

• ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ

: ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ชจ๋‘ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ๊ป˜ ์ข…๋ฃŒ๋˜๋Š” ์“ฐ๋ ˆ๋“œ

Thread t1 = new MyThread();
t1.setDeamon(false);
t1.setName("t1");
t1.start();

Thread t2 = new MyThread();
t2.setDeamon(true);
t2.setName("t2");
t2.start();

try{Thread.sleep(3500);} catch (InterruptedException e) {}
System.out.println("main Thread ์ข…๋ฃŒ");
์“ฐ๋ ˆ๋“œ์˜ ๋ฐ๋ชฌ ์„ค์ •์€ Thread ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ธ setDeamon( )๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ ๊ธฐ๋ณธ ๊ฐ’์€ false๋กœ ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๋กœ ์„ค์ •ํ•ด๋‘”๋‹ค. ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋ฐ๋ชฌ ์„ค์ • ์—ฌ๋ถ€๋Š” isDeamon( )๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์–ธ์ œ๋“ ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„  ์“ฐ๋ ˆ๋“œ t1์€ ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ, t2๋Š” ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋กœ ์„ค์ •ํ–ˆ๋‹ค.

๋ฐ๋ชฌ ์„ค์ •์€ ๋ฐ˜๋“œ์‹œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์ธ start( ) ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „์— ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ ๊ฐ€๋ฉด ๋ฐ๋ชฌ ์„ค์ •์€ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. 

๋งŒ์•ฝ main์— ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ t1๊ณผ ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ t2๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ์ž์‹ ์„ ํ˜ธ์ถœํ•œ main ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ๊ป˜ ์ข…๋ฃŒ๋ ๊ฑฐ๋ผ ์˜ˆ์ƒํ•˜๊ฒ ์ง€๋งŒ ๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ๋Š” ์ฃผ ์“ฐ๋ ˆ๋“œ์˜ ์ข…๋ฃŒ๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋ชจ๋“  ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด์•ผ ์ข…๋ฃŒ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์•ผํ•œ๋‹ค. main์ด ๋จผ์ € ๋๋‚ด๋„ t1 ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ๋ฉด t2๋Š” ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์˜ˆ์™ธ์ฒ˜๋ฆฌ_ 467p

 

try

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค.

 

catch

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•  ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ๋‹ค.

 

finally

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋“ , ๋ฐœ์ƒํ•˜์ง€ ์•Š๋“  ํ•ญ์ƒ ์‹คํ–‰๋˜๋Š” ๋ธ”๋ก์œผ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค ํ•ด์ œ๋‚˜ try{ }, catch{ }์˜ ๊ณตํ†ต ๊ธฐ๋Šฅ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค.

 

try {
    int a = 10 / 0;
}

catch (Exception e) {
    System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ!");
}

catch (ArithmeticException e) {
    System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!");
}

finally {
    System.out.println("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฅ˜");
}
try๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ์—์„  ArithmeticException์ด๋ž€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. catch๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. try์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ์— ๋งž๋Š” ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ฒซ๋ฒˆ์งธ catch๋ถ€ํ„ฐ finally๋ฅผ ํ–ฅํ•ด ๋‚ด๋ ค๊ฐ„๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์œ„์˜ ์ฝ”๋“œ๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋ชจ๋“  ์˜ˆ์™ธ๋Š” Exception ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋“  ์ฒซ๋ฒˆ์งธ catch ๋ธ”๋ก๋งŒ ์‹คํ–‰๋˜๋ฏ€๋กœ ๋‘๋ฒˆ์งธ catch ๋ธ”๋ก์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ unreachable code ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

๋ชจ๋“  ์˜ˆ์™ธ๋Š” Exception์˜ ํ•˜์œ„ํด๋ž˜์Šค๋‹ค.

 

 

try {
    int a = 10 / 0;
}

catch (ArithmeticException e) {
    System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!");
}

catch (Exception e) {
    System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ!");
}

finally {
    System.out.println("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฅ˜");
}
์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋˜์–ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

 

 

๋‹ค์ค‘ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

public class TryCatchPratice1 {
    public static void main(String[] args) {
    
        try {
            System.out.println(10 / 0); 
        } catch (ArithmeticException e) {
            System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    

        try {
            int[] arr = new int[3];
            System.out.println(arr[5]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("๋ฐฐ์—ด ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    
    }
}
์ฒซ๋ฒˆ์งธ try์—์„œ๋Š” 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ArithmeticException ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์„ ๋’€๋‹ค. ๋‘๋ฒˆ์งธ try์—์„œ๋Š” ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 3์ž„์—๋„ ๊ทธ ์ด์ƒ์— ์žˆ๋Š” ๋ฐฐ์—ด์„ ์ถœ๋ ฅ์‹œํ‚ค๋ฉฐ ๋ฐœ์ƒํ•œ ์ธ๋ฑ์Šค ๋ฒ”์œ„ ์˜ค๋ฅ˜ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. finally์˜ ๊ฒฝ์šฐ ์ค‘๋ณต๋˜์–ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

 

public class TryCatchPratice02 {
    public static void main(String[] args) {
        try {
            int[] arr = new int[3];
            System.out.println(10 / 0);     
            System.out.println(arr[5]);      
        } catch (ArithmeticException e) {
            System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("๋ฐฐ์—ด ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    
    }
}
ํ•˜๋‚˜์˜ try ๋ธ”๋ก ์•ˆ์— ์—ฌ๋Ÿฌ ์˜ˆ์™ธ๋ฅผ ๋„ฃ๊ณ  catch๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๊ฐ€ ์™„์„ฑ๋œ๋‹ค. try ๋ธ”๋ก์— ์žˆ๋Š” ์˜ˆ์™ธ ์ฝ”๋“œ๋Š” catch ๋ธ”๋ก์˜ ์ˆœ์„œ์™€ ์—ฐ๊ด€์—†์ด ์•Œ์•„์„œ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค. try์™€ catch์— ์ค‘๋ณต๋œ ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, finally์— ์ ์–ด ์ค‘๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 ๋‹ค์ค‘ ์˜ˆ์™ธ๋ฅผ ํ•œ ๋ธ”๋ก์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

public class TryCatchPratice02 {
    public static void main(String[] args) {
        try {
            int[] arr = new int[3];
            System.out.println(10 / 0);     
            System.out.println(arr[5]);      
        } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
            System.out.println("์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    
    }
}
ํ•˜๋‚˜์˜ catch ๋ธ”๋ก์—์„œ ๋‘ ๊ฐœ์˜ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๊ฒฝ์šฐ |(OR)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜ํƒ€๋‚ด๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ๋ฆฌ์†Œ์Šค ํ•ด์ œ_ 477p

 

๋ฆฌ์†Œ์Šค ํ•ด์ œ

: ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

InputStreamReader๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ž๋™ ํ•ด์ œ

try (InputStreamReader isr1 = new InputStreamReader (System.in);) {
    char input = (char) isr1.read();
    System.out.println("์ž…๋ ฅ ๊ธ€์ž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}

try (InputStreamReader isr2 = new InputStreamReader (System.in);) {
    char input = (char) isr2.read();
    System.out.println("์ž…๋ ฅ ๊ธ€์ž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}
InputStreamReader์—๋Š” AutoCloseable์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. try์˜ ๊ด„ํ˜ธ ์•ˆ์— ์„ ์–ธ๋œ ๊ฐ์ฒด๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์˜ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์ž๋™์œผ๋กœ close( ) ํ˜ธ์ถœํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•œ๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ ์œ„์˜ ์ฝ”๋“œ๋Š” ์ฒซ๋ฒˆ์งธ try ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋งˆ์น˜๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ๋‹ค์Œ try ๋ธ”๋ก์€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”๊ฑธ๊นŒ. System.in์€ ์ฝ˜์†” ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋กœ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋ฐ˜๋‚ฉํ•˜๋ฉด ๋”์ด์ƒ ์ฝ˜์†”์„ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฒซ๋ฒˆ์งธ try ๋ธ”๋ก์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜๋‚ฉํ•ด์„œ ๋‹ค์Œ try ๋ธ”๋ก์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค.

 

 

 

 ์ง์ ‘ close๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ˆ˜๋™ ํ•ด์ œ

A a1 = null;

try {
    a1 = new A("ํŠน์ • ํŒŒ์ผ")
}

catch (Exception e) {
    System.out.println("์˜ˆ์™ธ ์ฒ˜๋ฆฌ");
}

finally {
    if(a1.resource!=null) {
        try{
            a1.close();
        } catch (Exception e) {
        }
    }
}
finally์— ์ง์ ‘ close( )๋ฅผ ์ •์˜ํ•œ๋‹ค. finally์— ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ํด๋ž˜์Šค A์— AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. AutoCloseable ๋‚ด๋ถ€์— close( ) ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๊ธฐ์— finally์— ์ง์ ‘ ์ •์˜ํ•˜์ง€ ์•Š์•„๋„, ๋ฆฌ์†Œ์Šค๋ฅผ ์•Œ์•„์„œ ํ•ด์ œํ•  ๊ฒƒ์ด๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์˜ˆ์™ธ์ „๊ฐ€_ 485p

 

์˜ˆ์™ธ ์ „๊ฐ€

: ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์˜ ์˜๋ฌด๋ฅผ ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋ฉฐ, ์ƒ์œ„์˜ ๋ฉ”์„œ๋“œ๋„ ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ์ง€์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ „๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

throws

: ์˜ˆ์™ธ ์ „๊ฐ€ ๋ฌธ๋ฒ•์ด๋‹ค.

    public static void readFile() throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
        String line = reader.readLine();
        System.out.println("์ฝ์€ ๋‚ด์šฉ: " + line);
        reader.close();
    }

    public static void main(String[] args) {
        try {
            readFile();
        } catch (IOException e) {
            System.out.println("ํŒŒ์ผ์„ ์ฝ๋Š” ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: " + e.getMessage());
        }
    }
readFile ๋ฉ”์„œ๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ IOException์œผ๋กœ ์ „๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ try-catch ๊ตฌ๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•˜๋‹ค. ๋Œ€์‹ , main ๋ฉ”์„œ๋“œ์—์„œ readFile( )์„ ํ˜ธ์ถœํ•  ๋•Œ  try-catch๋กœ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์˜ˆ์™ธ ์ „๊ฐ€๋Š” ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์˜ˆ์™ธ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ถ„๋ฆฌ ์‹œ์ผœ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ด์ค€๋‹ค.

์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ „๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ง์ ‘ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•„๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์˜ ์ •๋ณด๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ ๋’ค ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ•์ œ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ์™ธ ์ „๊ฐ€๋„ ๋‹ค์ค‘์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค. throws ์˜ˆ์™ธ ํด๋ž˜์Šค A, ์˜ˆ์™ธ ํด๋ž˜์Šค B... ๋กœ ํ•œ ๋ฒˆ์— ์ „๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค_ 492p

 

์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค

: ์ž๋ฐ”์— ์กด์žฌ ํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•œ๋‹ค.

 

 ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค ์ž‘์„ฑ

public class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}
์ƒ์„ฑ์ž์—์„œ message๋ฅผ ๋ฐ›์•„, ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ถ€๋ชจ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

 

 

์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์˜ˆ์™ธ ๊ฐ์ฒด ๋˜์ง€๊ธฐ

throw new MyException("๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");

 

 

 ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์˜ˆ์™ธ ๊ฐ์ฒด ๋˜์ง€๊ธฐ

public class Pratice01 {

    public static void checkAge(int age) throws MyException {
        if (age < 18) {
            throw new MyException("๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        } else {
            System.out.println("๊ฐ€์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.");
        }
    }

    public static void main(String[] args) {
        try {
            checkAge(15);
        } catch (MyException e) {
            System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ: " + e.getMessage());
        }
    }
}
18์‚ด ์ดํ•˜๋ฉด MyException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. try ๋ธ”๋ก์—์„œ 15๋ฅผ ์ธ์ž๋กœ ๋ณด๋ƒˆ๊ณ  ์˜ˆ์™ธ MyException์ด ๋ฐœ์ƒํ•ด ์˜ˆ์™ธ๋ฅผ ๋˜์กŒ๋‹ค. catch ๊ตฌ๋ฌธ์—์„œ ๋ฐ›์•„ ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ_ 497p

 

getMassage( ) ๋ฉ”์„œ๋“œ

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ƒ์„ฑ์ž๋กœ ๋„˜๊ธด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์„œ๋“œ

 throw new MyException("๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ: " + e.getMessage());
๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์˜ˆ์™ธ๋Š” "๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋Š” ์˜ˆ์™ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ๋‹ค. ์ด ๋ฌธ์ž์—ด์€ getMassage( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

 

printStackTrace( ) ๋ฉ”์„œ๋“œ

์˜ˆ์™ธ ๋ฐœ์ƒ์ด ์ „๋‹ฌ๋˜๋Š” ๊ฒฝ๋กœ๋กœ, ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜ˆ์™ธ์˜ ์›์ธ์„ ์ž์„ธํžˆ ์ถœ๋ ฅํ•œ๋‹ค.

try (InputStreamReader isr1 = new InputStreamReader(System.in)) {
    char input = (char) isr1.read();
    System.out.println("์ž…๋ ฅ ๊ธ€์ž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}
์ฝ˜์†”์— ์˜ˆ์™ธ๊ฐ€ ์–ด๋””์—์„œ ์ „๊ฐ€๋˜์—ˆ๋Š”์ง€ ๋“ฑ ์ถ”์  ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

#6027_ 10์ง„ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅํ•˜๊ธฐ1

์†Œ๋ฌธ์ž ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ

์ž…๋ ฅ: 255
์ถœ๋ ฅ: ff
a = int(input())
print('%x'%a)
a = input()
b = int(a)
print('%x'%b)

 

 

 

#6028_ 10์ง„ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅํ•˜๊ธฐ2

๋Œ€๋ฌธ์ž ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ

์ž…๋ ฅ: 255
์ถœ๋ ฅ: FF
a = int(input())
print('%X'%a)
a = input()
b = int(a)
print('%X'%b)

 

 

 

#6029_ 16์ง„ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 8์ง„์ˆ˜๋กœ ์ถœ๋ ฅํ•˜๊ธฐ2

์ž…๋ ฅ: f
์ถœ๋ ฅ: 17
a = input()
print(f'{int(a,16):o}')
a = input()
b = int(a, 16)
print('%o'%b)
ํŒŒ์ด์ฌ์—์„œ ์ง„๋ฒ• ๊ฐ„ ๋ณ€ํ™˜์„ ํ•  ๋•Œ ์ค‘๊ฐ„์— 10์ง„์ˆ˜๋ฅผ ๊ฑฐ์ณ์•ผํ•œ๋‹ค.

 

 

 

#6030_ ์˜๋ฌธ์ž 1๊ฐœ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

์ž…๋ ฅ: A
์ถœ๋ ฅ: 65
a = ord(input())
print(a)
ord๋Š” ๋ฌธ์ž์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ๊ฐ’ ํ˜น์€ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค.
๊ทธ๋ž˜์„œ ๋ณ€ํ™˜๋˜์—ˆ๊ธฐ์— a๋งŒ ์ถœ๋ ฅํ•ด๋„ ์›ํ•˜๋Š” ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

 

 

 

#6031_ ์ •์ˆ˜ ์ž…๋ ฅ๋ฐ›์•„ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

์ž…๋ ฅ: 65
์ถœ๋ ฅ: A
a = int(input())
print(chr(a))

 

 

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์˜ˆ์™ธ_ 457p

 

 ์˜ˆ์™ธ

: ์—ฐ์‚ฐ ์˜ค๋ฅ˜, ์ˆซ์ž ํฌ๋งท ์˜ค๋ฅ˜ ๋“ฑ๊ณผ ๊ฐ™์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

 ์—๋Ÿฌ

: ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ์ž์ฒด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋กœ ๊ฐœ๋ฐœ์ž ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

 

์˜ˆ์™ธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋งํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ด๋•Œ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•ด์„œ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฐจ์„ ์ฑ…์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.์—๋Ÿฌ๋Š” ์•„์˜ˆ ์ฒ˜๋ฆฌ์ž์ฒด๋ฅผ ํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜์ธ ๋ธ”๋ฃจ์Šคํฌ๋ฆฐ ๊ฐ™์€ ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์ž๋ฐ”์—์„œ ์˜ˆ์™ธ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋Š” Exception ํด๋ž˜์Šค๊ณ , ์—๋Ÿฌ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋Š” Error ํด๋ž˜์Šค๋‹ค. ์ด ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๋Š” Throwable ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์—๋Ÿฌ์™€ ์˜ˆ์™ธ ๋ชจ๋‘ Throwable ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ๋‹ค. 

 

 

 

 


 

 

 

โœ”๏ธ   ์ผ๋ฐ˜ ์˜ˆ์™ธ_ 458p

 

 ์ผ๋ฐ˜ ์˜ˆ์™ธ

: ์ปดํŒŒ์ผ ์ „์— ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฌธ๋ฒ•์„ ๊ฒ€์‚ฌํ•˜๋ฉฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ปดํŒŒ์ผ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

• InterruptedException

: ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฉˆ์ถ”๊ฒŒ ๋งŒ๋“ ๋‹ค.

 Thread thread = new Thread(() -> {
            try {
                System.out.println("์ž‘์—… ์‹œ์ž‘: 5์ดˆ ๋Œ€๊ธฐ ์ค‘");
                Thread.sleep(5000);  // 5์ดˆ ๋Œ€๊ธฐ
                System.out.println("์ž‘์—… ์™„๋ฃŒ");
            } catch (InterruptedException e) {
                System.out.println("์Šค๋ ˆ๋“œ๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
            }
        });
์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ณผ์ •์—์„œ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„๋กœ, ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์กด์žฌํ•œ๋‹ค. ์ฆ‰, ์ผ๋ฐ˜์ ์œผ๋กœ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ ์ปค๋‹ค๋ž€ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ž‘์€ ์ž‘์—…๋“ค๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ๊ฐ ์“ฐ๋ ˆ๋“œ์— ํ• ๋‹นํ•œ ํ›„ ์‹คํ–‰๋œ๋‹ค. ๋™์‹œ์— ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋‹ˆ ์ „์ฒด ์ž‘์—…์„ ๋นจ๋ฆฌ ๋๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ „์ฒด ์ž‘์—…์„ ์ทจ์†Œํ•˜์—ฌ ์ข…๋ฃŒํ•ด์•ผํ•  ๊ฒฝ์šฐ, ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ž‘์—…์ด ๋”์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋‹ˆ ์‹คํ–‰์„ ๊ทธ๋งŒ๋‘๊ณ  ๋ฆฌ์†Œ์Šค๋“ค์„ ์ •๋ฆฌํ•œ ํ›„ ์ข…๋ฃŒํ•˜๋„๋ก ์•Œ๋ฆฐ๋‹ค. ์ด๋•Œ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

์ด๋•Œ ๋งŒ์•ฝ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์–ด๋”˜๊ฐ„์— ๋ธ”๋กœํ‚น ๋˜์–ด์žˆ๋‹ค๋ฉด ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒดํฌํ•˜๊ณ  ์ข…๋ฃŒ ๋กœ์ง์„ ๋„ฃ์–ด๋†จ์–ด๋„ ์ธํ„ฐ๋ŸฝํŠธ ๋กœ์ง ์‹คํ–‰์€ ์˜์›ํžˆ ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— sleep์—์„œ ๋ฒ—์–ด๋‚˜ ์ธํ„ฐ๋ŸฝํŠธ ๋กœ์ง์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•˜๋Š”๋ฐ Interrupted Exception์„ try-catch๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ๋ช…์‹œํ•ด์„œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ž์—๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ž„ํ•ด์•ผํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ Interrupted Exception์€ ๋ฐ˜๋“œ์‹œ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ Interrupted Exception์„ ๋ฌด์‹œํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์—ฌ๊ธฐ์ €๊ธฐ ๋‚จ๋ฐœํ•œ๋‹ค๋ฉด ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ณ  kill-9๋กœ ๊ฐ•์ œ ์ข…๋ฃŒํ•ด์•ผํ•œ๋‹ค.

 

 

[Java] InterruptedException์ด๋ž€?

์ž๋ฐ”๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ๊ณ ๋ ค๋˜์–ด์•ผ ํ•˜๋Š” ์˜ˆ์™ธ ์ค‘ ํ•˜๋‚˜๊ฐ€ InterruptedException์ด๋‹ค. ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์„ ์ž ๊น ๋™์•ˆ ๋ฉˆ์ถ”๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” sleep ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž try { Thread.sleep(1000); } catch (Inter

hbase.tistory.com

 

 


• ClassNotFoundException

: JVM์ด ํด๋ž˜์Šค ์ด๋ฆ„์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ›์•„์„œ ๋กœ๋”ฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค.

public class ClassNotFoundExample {
    public static void main(String[] args) {
        try {
            Class.forName("com.example.NotExistClass");
        } catch (ClassNotFoundException e) {
            System.out.println("ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: " + e.getMessage());
        }
    }
}
Class.forName("ํด๋ž˜์Šค๋ช…")์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋‹ค. ClassNotFoundException๋Š” checked Exception์ด๋ผ ๋ฐ˜๋“œ์‹œ try-catch๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

• IOException

: ์ž๋ฐ” ์ž…์ถœ๋ ฅ์—์„œ ์ฃผ๋กœ ๋ณด์ด๋Š” ์ผ๋ฐ˜ ์˜ˆ์™ธ๋กœ, ์ฝ˜์†”์ด๋‚˜ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ฝ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

    try {
            BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
            String line = reader.readLine();
            System.out.println("ํŒŒ์ผ ๋‚ด์šฉ: " + line);
            reader.close();
        } catch (IOException e) {
            System.out.println("ํŒŒ์ผ์„ ์ฝ๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: " + e.getMessage());
        }
FileReader์™€ BufferedReader๋ฅผ ์ด์šฉํ•˜์—ฌ test.txt ํŒŒ์ผ์˜ ์ฒซ ์ค„์„ ์ฝ๋Š”๋‹ค. ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ฝ๋Š” ์ค‘ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด
IOException์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ œ๋Œ€๋กœ ์‹คํ–‰์„ ํ•˜๊ณ ์ž ์›ํ•œ๋‹ค๋ฉด ๊ฐ™์€ ํด๋”์— test.txt ํŒŒ์ผ์ด ์ œ๋Œ€๋กœ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ์„ ํ•ด์•ผํ•œ๋‹ค. 

 

 

 

• FileNotFoundException

: IOException์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ด๋ฉฐ, ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ ํ•ด๋‹น ๊ฒฝ๋กœ์— ํŒŒ์ผ์ด ์—†๊ฑฐ๋‚˜ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์—†๋Š” ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

  try {
            FileInputStream fis = new FileInputStream("test.txt");
        } catch (FileNotFoundException e) {
            System.out.println("ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: " + e.getMessage());
        }
test.txt ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

 

• CloneNotSupportedException

: Cloneable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š์€ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด clone( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐœ์ƒํ•œ๋‹ค.

class Person implements Cloneable {
    String name;

    Person(String name) {
        this.name = name;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class CloneExample {
    public static void main(String[] args) {
        Person person1 = new Person("Alice");

        try {
            Person person2 = (Person) person1.clone();
            System.out.println("๋ณต์ œ ์„ฑ๊ณต");
        } catch (CloneNotSupportedException e) {
            System.out.println("๋ณต์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: " + e.getMessage());
        }
    }
}
Object ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ์ค‘ clone( )์€ ์ž์‹ ์˜ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•œ ํด๋ก  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜๋“œ์‹œ Cloneable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•ด์•ผํ•œ๋‹ค.

clone ๋ฉ”์„œ๋“œ๋Š” Java์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ธ java.lang.Object ํด๋ž˜์Šค์—์„œ ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋กœ ๊ทธ ์•ˆ์— protected๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ super.clone( )์„ ํ˜ธ์ถœํ•ด์•ผ ๋ณต์ œ๋œ๋‹ค. ๋งŒ์•ฝ clone ๋ฉ”์„œ๋“œ๋ฅผ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด protected -> public์œผ๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์‹คํ–‰ ์˜ˆ์™ธ_ 463p

 ์‹คํ–‰ ์˜ˆ์™ธ

: ์ปดํŒŒ์ผ ์ „์ด ์•„๋‹Œ ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋กœ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๋”ฐ๋กœ ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ•์ œ ์ข…๋ฃŒ๋œ๋‹ค.

 

ArithmeticException

: ์—ฐ์‚ฐ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

        try {
            int a = 10;
            int b = 0;
            int result = a / b; 
            System.out.println("๊ฒฐ๊ณผ: " + result);
        } catch (ArithmeticException e) {
            System.out.println("์‚ฐ์ˆ  ์˜ค๋ฅ˜ ๋ฐœ์ƒ: " + e.getMessage());
        }
์œ„์˜ ์ฝ”๋“œ๋Š” ๋ถ„๋ชจ๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋กœ ์—ฐ์‚ฐ์ด ๋ถˆ๊ฐ€ํ•˜์—ฌ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์ด๋‹ค. ๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด result ๊ฐ’์ด -1 ํ˜น์€ 1000 ๋“ฑ์˜ ๊ฐ’์„ ๋„ฃ์€ ์ฝ”๋“œ๋ฅผ try-catch๋กœ ๊ฐ์‹ธ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š๋„๋ก ๋ง‰์œผ๋ฉด์„œ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ณด๊ณ  ์—ฐ์‚ฐ ์ฝ”๋“œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ๋ฐœ๊ฒฌํ•œ๋‹ค.

 

 

 

ClassCastException

: ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ํด๋ž˜์Šค ๊ฐ„์˜ ๋‹ค์šด ์บ์ŠคํŒ…์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ,  ๋‹ค์šด์บ์ŠคํŒ…์„ ์‹œ๋„ํ•˜๋ฉด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ํ˜•๋ณ€ํ™˜์„ ํ•˜๋ฉด ๋ฐœ์ƒํ•œ๋‹ค.

        Object obj = "๋‚˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค";  // String ๊ฐ์ฒด

        try {
            Integer num = (Integer) obj;  // ์ž˜๋ชป๋œ ํ˜•๋ณ€ํ™˜
        } catch (ClassCastException e) {
            System.out.println("ํ˜•๋ณ€ํ™˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: " + e.getMessage());
        }
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

public class CastExample {
    public static void main(String[] args) {
        Animal animal = new Cat();  // ์‹ค์ œ ๊ฐ์ฒด๋Š” Cat

        try {
            Dog dog = (Dog) animal;  // ์ž˜๋ชป๋œ ๋‹ค์šด์บ์ŠคํŒ…
        } catch (ClassCastException e) {
            System.out.println("ํ˜•๋ณ€ํ™˜ ์˜ค๋ฅ˜: " + e.getMessage());
        }
    }
}

 

 

 

ArrayIndexOutOfBoundException

: ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

        int[] numbers = {10, 20, 30};

        try {
            System.out.println(numbers[3]); // ์ธ๋ฑ์Šค 3์€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("๋ฐฐ์—ด ์ธ๋ฑ์Šค ์˜ค๋ฅ˜ ๋ฐœ์ƒ: " + e.getMessage());
        }

 

 

 

NumberFormatException

: ๋ฌธ์ž์—ด์„ ์ˆซ์ž ๋˜๋Š” ์‹ค์ˆ˜๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋ฌธ์ž์—ด์ด ๋ณ€ํ™˜ํ•˜๊ณ ์ž ํ•˜๋Š” ์ˆซ์ž ํ˜•์‹์ด ์•„๋‹ˆ๋ฉด ๋ณ€ํ™˜์ด ์‹คํŒจํ•˜๋Š”๋ฐ ์ด๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

        String input = "123ABC";  // ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์ž์—ด

        try {
            int number = Integer.parseInt(input);  // ์˜ˆ์™ธ ๋ฐœ์ƒ
            System.out.println("๋ณ€ํ™˜๋œ ์ˆซ์ž: " + number);
        } catch (NumberFormatException e) {
            System.out.println("์ˆซ์ž ํ˜•์‹ ์˜ค๋ฅ˜: " + e.getMessage());
        }

 

 

 

NullPointerException

: ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

        String text = null;  // ๋ฌธ์ž์—ด ๋ณ€์ˆ˜์— null ํ• ๋‹น

        try {
            System.out.println("๋ฌธ์ž์—ด ๊ธธ์ด: " + text.length());  // ์˜ˆ์™ธ ๋ฐœ์ƒ
        } catch (NullPointerException e) {
            System.out.println("๋„ ํฌ์ธํ„ฐ ์˜ˆ์™ธ ๋ฐœ์ƒ: " + e.getMessage());
        }
์œ„์˜ ์ฝ”๋“œ์—์„œ text๋Š” null ๊ฐ’์ด๋‹ค. null์€ ์œ„์นซ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ์ดˆ๊นƒ๊ฐ’์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ˜„์žฌ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

 

 

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค_ 436p

 

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

: ์ด๋ฆ„์„ ์•Œ ์ˆ˜ ์—†๋Š” ์ด๋„ˆ ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ธ์Šคํ„ด์Šค ์ต๋ช… ํด๋ž˜์Šค์™€ ์ง€์—ญ ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค.

 

 

์ด๋„ˆํด๋ž˜์Šค์™€ ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค ๋น„๊ตํ•˜๊ธฐ.

interface MyInterface {
    public abstract void myMethod1();
}

class OuterClass {
     MyInterface inner = new InnerClass();
     void myMethod2(){
         inner.myMethod1();
     }
     
     class InnerClass implements MyInterface {
         public void myMethod1() {
             System.out.println("์ธ์Šคํ„ด์Šค ์ด๋„ˆ ํด๋ž˜์Šค!");
         }
     }
}

public class PracticeInnerClass {
     public static void main(String[] args) {
     
         OuterClass outer = new OuterClass();
         outer.myMethod2();
     }
}
์œ„์˜ ์ฝ”๋“œ๋Š” ์ด๋„ˆํด๋ž˜์Šค์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„ ์ธํ„ฐํŽ˜์ด์Šค myMethod1์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ์ด๋‹ค. ์ถœ๋ ฅ๋˜๋Š” ์ฝ”๋“œ๋Š” 'myMethod1!'์ด ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค. ์œ„์˜ ์ฝ”๋“œ๊ฐ€ ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค ์ฝ”๋“œ์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ๋น„๊ตํ•˜๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
interface MyInterface {
    public abstract void myMethod1();
}

class OuterClass {

	 MyInterface myinter = new MyInterface() {
         public void myMethod1() {
              System.out.println("์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค");
         }
     };
     
     void myMethod2() {
         myinter.myMethod1();
     }    
     
}

public class PracticeAnonymousClass {
     public static void main(String[] args) {
     
         OuterClass outer = new OuterClass();
         outer.myMethod2();
     }
}
์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ธ MyInterface๋ฅผ ์ฐธ์กฐ ๋ณ€์ˆ˜ ํƒ€์ž…์œผ๋กœ ๋ฐ›์•„ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ƒ์„ฑ์ž ์ค‘๊ด„ํ˜ธ ์•ˆ์— ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ์ธ myMethod1๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ MyInterface๋ฅผ ์ƒ์†๋ฐ›์•„ ํด๋ž˜์Šค๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒ์„ฑํ•œ ํ›„(์ต๋ช… ํด๋ž˜์Šค) ํ•ด๋‹น ํด๋ž˜์Šค๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์ฐธ์กฐ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•œ๋‹ค.

์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ฃผ์˜ํ•ด์•ผํ•  ๊ฒƒ์€ ํ•ญ์ƒ ๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ๋งŒ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ถ€๋ชจํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋˜์—ˆ๊ธฐ์— ๋ถ€๋ชจ์—๊ฒŒ ์—†๋Š” ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

 

Q. ๊ทธ๋Ÿฐ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š”๋ฐ, ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค๋Š” ์–ด๋–ป๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๊ฑธ๊นŒ?

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

 

Q. ์ฑ…์— ๋ณด๋ฉด '๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ์„ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์• ์ดˆ์— ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์„๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ๋Š” ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ž‘์„ฑํ•ด์•ผํ•  ๋‚ด์šฉ์ด ๋งŽ์„ ๋•Œ ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•ด ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋ฉฐ, ์ด๋•Œ ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค ์ •์˜์‹ ๋‚ด๋ถ€์— ์ถ”๊ฐ€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•  ์ˆ˜ ์žˆ๋‹ค.'๋ผ๊ณ  ๋˜์–ด์žˆ๋‹ค. ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ผ๊นŒ?

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

 

 

 


 

 

 

โœ”๏ธ   ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ_ 439p

 

์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ ๋ฐฉ๋ฒ•_ ์ฝ”๋“œ: ์ต๋ช…์ด๋„ˆํด๋ž˜์Šค + ์ฐธ์กฐ๋ณ€์ˆ˜ํ™œ์šฉX

interface Messenger {
    void send(String message);
}

class MessageProcessor {
    void process(Messenger messenger) {
        messenger.send("์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค ๋ฉ”์‹œ์ง€ ์ „์†ก!");
    }
}

public class Main {
    public static void main(String[] args) {
        MessageProcessor processor = new MessageProcessor();
        
        // ์ฐธ์กฐ ๋ณ€์ˆ˜ ์—†์ด ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์ธ์ž๋กœ ์ „๋‹ฌ
        processor.process(new Messenger() {
            public void send(String message) {
                System.out.println("๋ณด๋‚ธ ๋ฉ”์‹œ์ง€: " + message);
            }
        });
    }
}
์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ด 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์—ฌ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ช…์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ช… ์—†์ด ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜๋Š”๋ฐ ์ด๋•Œ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ช…์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ช…์„ ํ™œ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. 

๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ์—ญํ• ์€ ๊ฐ์ฒด์˜ ์ฐธ์ขƒ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ๋‹จ์ˆœํžˆ ๊ฐ์ฒด์˜ ์ฐธ์ขƒ๊ฐ’๋งŒ์„ ์ „๋‹ฌํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๊ตณ์ด ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์„œ๋“œ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ„์น˜์—์„œ ๋ฐ”๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ ์ฐธ์ขƒ๊ฐ’์ด ๋ฉ”์„œ๋“œ๋กœ ์ „๋‹ฌ๋  ๊ฒƒ์ด๋‹ค.

 

 

 

 


 

 

 

 

โœ”๏ธ   ์ด๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค_ 444p

 

 ์ •์  ์ด๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค

: ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ ํ•ด๋‹น ํด๋ž˜์Šค์— ์˜์กด์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

// ๊ตฌํ˜„ ํด๋ž˜์Šค

class Outer {
    interface MyInterface {
        void hello();
    }
}

public class Main {
    public static void main(String[] args) {

        Outer.MyInterface obj1 = new Outer.MyInterface() {
            public void hello() {
                System.out.println("์ต๋ช… ํด๋ž˜์Šค!!");
            }
        };
        obj1.hello();

        class Impl implements Outer.MyInterface {
            public void hello() {
                System.out.println("๊ตฌํ˜„ ํด๋ž˜์Šค!!");
            }
        }

        Outer.MyInterface obj2 = new Impl();
        obj2.hello();
    }
}

 

์ด๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฌด์กฐ๊ฑด ์ •์  ์ด๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ static ์ œ์–ด์ž๋ฅผ ์ƒ๋žตํ•˜๋ฉด, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„œ ์ปดํŒŒ์ผ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” 'Outer$MyInterface.class'๋กœ ํ˜•์„ฑ๋œ๋‹ค. ์•„์šฐํ„ฐ ํด๋ž˜์Šค ๋‚ด์— ์†ํ•ด ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋„ ๋‹น์—ฐํ•˜๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฏ€๋กœ ์ง์ ‘ ๊ฐ์ฒด ์ƒ์„ฑ์€ ๋ถˆ๊ฐ€ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†์„ ๋ฐ›๊ฑฐ๋‚˜, ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด์•ผํ•œ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์—์„  ๋‘๊ฐ€์ง€ ๋ชจ๋‘๋ฅผ ๋ฐ˜์˜ํ•œ ์ฝ”๋“œ๋กœ, obj1์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๋ฐฉ๋ฒ• ๊ทธ๋ฆฌ๊ณ  Impl ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด Outer.MyInterface๋ฅผ ์ƒ์†ํ•œ ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.

 

 

 

 ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

class Button {

    // ์ธํ„ฐํŽ˜์ด์Šค OnClickListenerํƒ€์ž…์„ ๊ฐ€์ง€๋Š” ocl ๋ณ€์ˆ˜์ธ ํ•„๋“œ
    OnClickListner ocl;
    
    // OnClickListenerํƒ€์ž…์˜ ocl ๋ณ€์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„
    // Button ํด๋ž˜์Šค์˜ ocl ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” setOnClickListener ๋ฉ”์„œ๋“œ
    void setOnClickListener(OnClickListener ocl) {
         this.ocl = ocl;
    }
    
    // ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค
    // ์ถ”์ƒ ๋ฉ”์„œ๋“œ onClick์ด ์žˆ์Œ์„ ์ •์˜
    interface OnclickListener {
        public abstract void onClick();
    }
    
    void click() {
         ocl.onClick();
    }
}
public static void main(String[] ar) {
    // Button ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ธ button1
    Button button1 = new Button();
    
    // Button ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ต๋ช… ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„
    button1.setOnClickListener(new Button.OnClicklistener() {
        @Override
        public void onClick() {
             System.out.println("๊ฐœ๋ฐœ์ž 1. ์Œ์•…์žฌ์ƒ");
        }
    });
    button1.click();
}
main์—์„œ Button ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ธ button1์ด ๋งŒ๋“ค์–ด์ง€๊ณ , ์ด ๊ฐ์ฒด๋Š” OnClickListener ํƒ€์ž…์˜ ocl ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. OnClickListener์—์„œ onClick ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ setOnclickListener๋Š” ์ด ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์„œ ๋ฒ„ํŠผ ์•ˆ์— ์žˆ๋Š” ocl ํ•„๋“œ์— ์ €์žฅํ•œ๋‹ค. this.ocl = ocl๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „๋‹ฌํ•œ ๋™์ž‘์„ ๋ฒ„ํŠผ์ด ๊ธฐ์–ตํ•˜๊ฒŒ ๋œ๋‹ค.

button1.click();๋กœ ๋ฒ„ํŠผ์ด ํด๋ฆญ๋˜๋ฉด, onClick ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด "๊ฐœ๋ฐœ์ž 1. ์Œ์•…์žฌ์ƒ"์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ์ด๋„ˆ ํด๋ž˜์Šค_ 426p

 

 ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ์ด๋„ˆ ํด๋ž˜์Šค

: ์•„์šฐํ„ฐ ํด๋ž˜์Šค ๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค์ธ ๊ฐ์ฒด ๋‚ด๋ถ€ ๋ฉค๋ฒ„์˜ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šค

 

class OuterClass {

    public int a = 1;
    protected int b = 2;
    private int c = 3;
    
    void outerMethod(){
        System.out.println("์•„์šฐํ„ฐํด๋ž˜์Šค!");
    }    

    class InnerClass {
        
        void innerMethod() {
            System.out.println(a);
            System.out.println(b);
            System.out.println(c);
            
            outerMethod();
        }
    }    
     
}

public class PraticeInnerClass1 {
    public static void main(String[] args) {
    
        OuterClass outer = new OuterClass();
        
        OuterClass.InnerClass inner = outer.new InnerClass();
        
        inner.innerMethod();
        
    }
}
๋ฉค๋ฒ„ ์ด๋„ˆ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์ธ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋ฉค๋ฒ„์˜ ํ˜•ํƒœ๋กœ ์กด์žฌํ•œ๋‹ค. ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋ž€, ํ•ด๋‹น ํด๋ž˜์Šค์— ์žˆ๋Š” ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์•ผ๊ธฐ ํ•˜๋Š”๋ฐ ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด๋ถ€์— ํด๋ž˜์Šค๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ์ด ํด๋ž˜์Šค๋„ ๋ฉค๋ฒ„๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ์ด๋„ˆ ํด๋ž˜์Šค๋Š” ์•„์šฐํ„ฐ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ ‘๊ทผ ์ง€์ •์ž์˜ ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ž๋ฐ”๋Š” ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๊ฐ ํด๋ž˜์Šค๋ณ„๋กœ ๋ฐ”์ดํŠธ ์ฝ”๋“œ์ธ .class ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. ์ด๋„ˆ ํด๋ž˜์Šค ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒ์„ฑ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ํ˜•ํƒœ๋Š” ์•„์šฐํ„ฐ ํด๋ž˜์Šค์™€๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์•„์šฐํ„ฐ ํด๋ž˜์Šค๋Š” 'OuterClass.class'๋ผ๊ณ  ์ƒ์„ฑ์ด ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•„์šฐํ„ฐ ํด๋ž˜์Šค ์•ˆ์— ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” 'OuterClass$InnerClass.class'๋กœ ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์•„์šฐํ„ฐ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์„ ํ‘œ์‹œํ•˜๊ณ ์ž ์ƒ์„ฑ๋œ๋‹ค.

InnerClass ๋‚ด์— innerMethod๊ฐ€ ์žˆ๋‹ค. innerMethod๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ คํ•œ๋‹ค. ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์•„์šฐํ„ฐ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด ์ƒ์„ฑ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ ํ›„์— ์•„์šฐํ„ฐ ํด๋ž˜์Šค ๋‚ด์— ์žˆ๋Š” ์ด๋„ˆ ํด๋ž˜์Šค์ด๋‹ˆ, ์ƒ์„ฑํ•œ ์•„์šฐํ„ฐ ํด๋ž˜์Šค ๊ฐ์ฒด์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด ๋‚ด๋ถ€์— ์žˆ๋Š” ์ด๋„ˆ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด OuterClass.InnerClass inner = outer.new InnerClass( );๊ฐ€ ๋œ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์—์„œ innerMethod๋ฅผ ๋ณด๋ฉด ์•„์šฐํ„ฐ ํด๋ž˜์Šค ํ•„๋“œ์— ์ ‘๊ทผํ•˜๊ณ  ์žˆ๋‹ค. ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” InnerClass ๋‚ด์— OuterClass์˜ ๋ฉค๋ฒ„์™€ ๋™์ผํ•œ ์ด๋ฆ„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, ๋งŒ์•ฝ ๊ฐ™์€ ์ด๋ฆ„์ด InnerClass๋‚ด์— ์กด์žฌํ•œ๋‹ค๋ฉด ์„€๋„์ž‰์ด ๋ฐœ์ƒํ•ด InnerClass ๋‚ด๋ถ€ ํ•„๋“œ์˜ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ƒํƒœ์—์„œ ์•„์šฐํ„ฐ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? 'OuterClass.this.a'๋ฅผ ๋ถ™์ด๋ฉด ๋œ๋‹ค. OuterClass๋ฅผ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด InnerClass์˜ ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•˜๋‹ˆ ์œ ์˜ํ•ด์•ผํ•œ๋‹ค.

 

 

 

 


 

 

 

 

โœ”๏ธ   ์ •์  ๋ฉค๋ฒ„ ์ด๋„ˆ ํด๋ž˜์Šค_ 431p

 

 ์ •์  ๋ฉค๋ฒ„ ์ด๋„ˆ ํด๋ž˜์Šค

: ์ด๋„ˆ ํด๋ž˜์Šค ์•ž์— static์ด ํฌํ•จ๋œ ํด๋ž˜์Šค๋‹ค.

class OuterClass {
    int a = 1;
    static int b = 2;
    
    void outerMethod1() {
        System.out.println("์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ!");
    }
    
    static void outerMethod2() {
        System.out.println("์ •์  ๋ฉ”์„œ๋“œ!");
    }    
     
    
    static class InnerClass {
        void innerMethod() {
            System.out.println(b);
            outerMethod();
        }
    }
}

public class PracticeInnerClass2 {
    public static void main(String[] args) {
        OuterClass.InnerClass inner = new OuterClass.InnerClass();
        
        inner.innerMethod();
    }
}
static์ด ํฌํ•จ๋œ ์ด๋„ˆ ํด๋ž˜์Šค๋Š” static ํŠน์„ฑ์„ ์ง€๋‹ˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ ํŠน์ง•์ด ์•„์šฐํ„ฐ ํด๋ž˜์Šค ๋‚ด์— static์ด ๋ถ™์€ ๋ฉค๋ฒ„๋งŒ ์ •์  ์ด๋„ˆ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๋˜ ๋‹ค๋ฅธ ํŠน์„ฑ์„ ์‚ดํŽด๋ณด์ž. ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด main์—์„œ ์•„์šฐํ„ฐ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ •์  ์ด๋„ˆ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์•„์šฐํ„ฐ ํด๋ž˜์Šค ๋‚ด์— ์žˆ๋Š” ์ •์  ์ด๋„ˆ ํด๋ž˜์Šค๋„ ์ •์  ๋ฉค๋ฒ„์ด๋ฏ€๋กœ ํด๋ž˜์Šค๋ช…์œผ๋กœ ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์ง€์—ญ ์ด๋„ˆ ํด๋ž˜์Šค_ 433p


 ์ง€์—ญ ์ด๋„ˆ ํด๋ž˜์Šค

: ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์ •์˜๋˜๋Š” ํด๋ž˜์Šค

class OuterClass {
    int a = 1;
    
    void outerMethod(){
        int b = 2;
        
        class InnerClass {
            void innerMethod() {
                System.out.println(a);
                System.out.println(b);
            }
        }
        
    InnerClass inner = new InnerClass();
    inner.innerMethod();
    }
}

public class PracticeInnerClass3 {
    public static void main(String[] args) {
        
        OuterClass outer = new OuterClass();
        outer.outerMethod();
        
    }
}
์ง€์—ญ ์ด๋„ˆ ํด๋ž˜์Šค๋Š” ์ •์˜๋œ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ง€์—ญ ์ด๋„ˆ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธ ์ดํ›„ ๋ฐ”๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ์ด ๋˜๋ฉด ๊ทธ๋•Œ๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ •์  ์˜์—ญ๊ณผ๋Š” ๋‹ค๋ฅธ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ •์  ์˜์—ญ์€ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์— ๋จผ์ € ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉ๋˜์–ด์žˆ๋‹ค.

๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ์ง€์—ญ ์ด๋„ˆ ํด๋ž˜์Šค๊ฐ€ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋ฉด ํ•ด๋‹น ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ final๋กœ ์„ ์–ธ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ final์„ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ ํ•ด๋‹น ์ง€์—ญ ๋ณ€์ˆ˜์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ๋˜ ํ•ด๋‹น ์ง€์—ญ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๋™๋œ๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

Q. ์ง€์—ญ ๋ณ€์ˆ˜์—๋งŒ final์„ ๋ถ™์—ฌ์•ผํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ?

A. ๋ฉ”์„œ๋“œ๊ฐ€ ๋์ด ๋‚˜๋”๋ผ๋„ ์ง€์—ญ ์ด๋„ˆ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋Š” ๋ฉ”์„œ๋“œ ๋ฐ–์—์„œ ์‚ด์•„๋‚จ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฉ”์„œ๋“œ ๋‚ด์— ์žˆ๋Š” ๋ณ€์ˆ˜์ธ ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋๋‚˜๋ฉด ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. ์ง€์—ญ ์ด๋„ˆ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋Š” ์‚ด์•„๋‚จ์•„์„œ ํ™œ๋™ํ•ด์•ผํ•˜๋Š”๋ฐ, ๋ณ€์ˆ˜๊ฐ€ ๋๋‚˜๋ฒ„๋ฆฌ๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— final์„ ๋ถ™์—ฌ ํ•ด๋‹น ๊ฐ’์ด ๋ณ€๋™๋˜์ง€ ๋ชปํ•˜๋„๋กํ•˜๊ณ  ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ฉ”์„œ๋“œ๊ฐ€ ๋์ด๋‚˜๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 

 

 

 

 

 

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์ถ”์ƒํด๋ž˜์Šค_ 395p

 

 ์ถ”์ƒํด๋ž˜์Šค

: ๋ฉ”์„œ๋“œ ๋ณธ์ฑ„๊ฐ€ ์™„์„ฑ๋˜์ง€ ์•Š์€ ๋ฏธ์™„์„ฑ ๋ฉ”์„œ๋“œ๋กœ, ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๋Š” ์ค‘๊ด„ํ˜ธ ์ž์ฒด๊ฐ€ ์—†์œผ๋ฉฐ ๋ช…๋ น์–ด์˜ ๋์„ ์•Œ๋ฆฌ๋Š” ์„ธ๋ฏธํด๋ก ์œผ๋กœ ๋๋‚œ๋‹ค.

abstract class A {
    abstract void abc();    
    void bcd() {
    }
}
์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ 1๊ฐœ ์ด์ƒ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•ด์•ผํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋Šฅ์ด ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๋Š” ๋ฏธ์™„์„ฑ ๋ฉ”์„œ๋“œ์ธ ์ค‘๊ด„ํ˜ธ๊ฐ€ ์—†๋Š” ํ˜•ํƒœ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ 1๊ฐœ ์ด์ƒ ์กด์žฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ถ”์ƒ ํด๋ž˜์Šค์˜ ํ˜•์‹์€ class ํ‚ค์›Œ๋“œ ์•ž์— abstract๋ฅผ ๋ถ™์—ฌ ํ‘œํ˜„ํ•œ๋‹ค.

์ถ”์ƒ ํด๋ž˜์Šค์˜ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€, ์ค‘๊ด„ํ˜ธ์˜ ์—ฌ๋ถ€์ด๋‹ค. ๋งŒ์ผ ์ค‘๊ด„ํ˜ธ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ์™„์„ฑํ•˜๋ฉด ๊ทธ ๋ฉ”์„œ๋“œ๋Š” '์•„๋ฌด๋Ÿฐ ๊ธฐ๋Šฅ์„ ํ•˜์ง€ ์•Š๋Š” ์™„์„ฑ๋œ ๋ฉ”์„œ๋“œ'๋ผ๊ณ  ๊ธฐ๋Šฅ์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ฒŒ ๋œ๋‹ค.

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€์˜ ๋ฏธ์™„์„ฑ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ ์ด์œ ๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์ด๋‹ค. ํž™ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ’์ด ๋น„์–ด์žˆ๋Š” ํ•„๋“œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์—†๋Š” ํŠน์„ฑ์„ ์ง€๋…”๋Š”๋ฐ, ์ด๋กœ ์ธํ•ด ๋ฏธ์™„์„ฑ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„ ์ถ”์ƒ ํด๋ž˜์Šค๋Š” A a = new A( )์™€ ๊ฐ™์ด ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์ž์ฒด๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค.

 

 

 

์ถ”์ƒ ํด๋ž˜์Šค ๊ฐ์ฒด ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• : 1. ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ ์ผ๋ฐ˜ ํด๋ž˜์Šค

abstract class A {
	abstract void abc();
}

class B extends A {
	void aaa() {
    	System.out.println("์ž์‹ ํด๋ž˜์Šค๋กœ ์ถ”์ƒ ํด๋ž˜์Šค ์ด์šฉํ•˜๊ธฐ");
    }
}

public class AbstractClass_1 {
	public static void main(String[] args) {
    	A b1 = new B();
        A b2 = new B();
        
        b1.aaa();
        b2.aaa();
    }
}
B๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ–ˆ๋‹ค. B๊ฐ€ ์ผ๋ฐ˜ ํด๋ž˜์Šค๋กœ ์—ญํ• ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ–ˆ๊ธฐ์— ์ถ”์ƒ ๋ฉ”์„œ๋“œ์˜ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์—ญํ• ์„ ํ•  ๊ฒƒ์ธ์ง€ ์ •์˜ํ•ด์•ผํ•œ๋‹ค. ๋งŒ์•ฝ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ์ ˆํ•œ๋‹ค.

 

 

 

 ์ถ”์ƒ ํด๋ž˜์Šค ๊ฐ์ฒด ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• : 2. ์ด๋„ˆํด๋ž˜์Šค 

abstract class A {
    abstract void abc();
}

public class AbstractClass {
    public static main(String[] args) {
    
        A a1 = new A();
            void abc() {
                System.out.println("์ด๋„ˆํด๋ž˜์Šค๋กœ ์ด์šฉํ•˜๊ธฐ");
            }
        };
                  
        a1.aaa();
}
์ด๋„ˆํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์€, A( )๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํด๋ž˜์Šค A๋ฅผ ์ƒ์†๋ฐ›์•„ aaa( ) ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ ์ต๋ช… ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๊ฒฝ์šฐ ํด๋ž˜์Šค A์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์ต๋ช… ์ด๋„ˆ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•œ ์žฅ์ ์œผ๋กœ๋Š” ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด ๋ณด์ธ๋‹ค๋Š” ์ ์ด ์žˆ์ง€๋งŒ, ์ƒ์†ํ•œ ๊ฒฝ์šฐ์™€ ๋‹ฌ๋ฆฌ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค๊ธฐ์—” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. 

 

 

 

 


 

 

 

โœ”๏ธ   ์ธํ„ฐํŽ˜์ด์Šค_ 402p

 

 ์ธํ„ฐํŽ˜์ด์Šค

: ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ด๋‚˜ ์žฅ์น˜, ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ฐ„์˜ ์ •๋ณด ๊ตํ™˜์„ ์œ„ํ•œ ์ ‘์ ์ด๋‚˜ ๊ฒฝ๊ณ„๋ฉด

interface abc {
    public static final int a = 1;
    public abstract void abc();
}
์ธํ„ฐํŽ˜์ด์Šค ๋‚ด๋ถ€์˜ ๋ชจ๋“  ํ•„๋“œ๋Š” public static final๋กœ ์ •์˜๋˜์–ด์žˆ๊ณ , static๊ณผ default ๋ฉ”์„œ๋“œ ์ด์™ธ์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” public abstract๋กœ ์ •์˜๋˜์–ด์žˆ๋‹ค. ํด๋ž˜์Šค๋Š” class๋ผ๊ณ  ์ด๋ฆ„ ์•ž์— ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค๋ฉด, ์ธํ„ฐํŽ˜์ด์Šค๋Š” interface์ž„์„ ์ด๋ฆ„ ์•ž์— ๋ช…์‹œํ•œ๋‹ค. ์ œ์–ด์ž๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ ์ง€ ์•Š์•˜์–ด๋„ public static final๊ณผ public abstract๋Š” ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

 

Q. ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด ํ•„๋“œ์— static๊ณผ final์„ ๋ถ™์ด๋Š” ์ด์œ ๋Š”?

A. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ธฐ๋Šฅ์˜ ์•ฝ์†์„ ์ •์˜ํ•˜๋Š” ๊ณณ์œผ๋กœ "์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ฒ ๋‹ค."๋ผ๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„๊ณผ ๊ทœ์•ฝ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ–‰์œ„์— ๋Œ€ํ•œ ์•ฝ์†๋งŒ ํ•˜์ง€, ๋ณ€์ˆ˜์— ๋Œ€ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์˜ ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ƒ์ˆ˜์—ฌ์•ผ๋งŒ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ static์€ ํด๋ž˜์Šค(์ธํ„ฐํŽ˜์ด์Šค) ์ž์ฒด์— ๋ถ™์–ด์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ, final์€ ํ•œ ๋ฒˆ ์ •์˜ํ•œ ๊ฐ’์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํŠน์„ฑ์„ ๋ถ€์—ฌํ•ด์ค€๋‹ค.
์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์— static์„ ๋ถ™์—ฌ ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์— ์ €์žฅ๋˜๋„๋ก ํ•˜์—ฌ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณณ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ๋˜๋Š” ๋ณ€์ˆ˜์— ์˜ํ•ด ๋ฉ”์„œ๋“œ์˜ ๋ณ€๋™์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ด์•ผํ•จ์œผ๋กœ final์„ ๋ถ™์ธ๋‹ค.

 

 

Q. ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ด๋ฉฐ ์–ด๋–ค ์ƒํ™ฉ์— ๋งž์ถฐ ์จ์•ผํ•˜๋Š”๊ฐ€?

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

 

 

 

 ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์†

class ABC extends myClass implements myInterface1, MyInterface2 {

}
์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฏธ์™„์„ฑ ๋ฉ”์„œ๋“œ๋ฅผ ์™„์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์†ํ•˜๋Š” ์˜๋ฏธ์ธ extends๊ฐ€ ์•„๋‹Œ ๊ตฌํ˜„ํ•˜๋Š” ์˜๋ฏธ์ธ implements๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ชจ๋‘ ๊ตฌํ˜„๋˜์–ด์•ผ ์ œ๋Œ€๋กœ ์ž‘๋™๋œ๋‹ค.

1. ํ•œ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค์ค‘ ์ƒ์† ๊ฐ€๋Šฅํ•˜๋‹ค.

ํด๋ž˜์Šค๋Š” ๋‘ ๋ถ€๋ชจ ํด๋ž˜์Šค์— ๋™์ผํ•œ ์ด๋ฆ„์˜ ํ•„๋“œ ํ˜น์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉด ์–ด๋А ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•„๋“œ(๋ฉ”์„œ๋“œ)๋ฅผ ๊ฐ€์ ธ์˜ฌ์ง€ ํ˜ผ๋™ํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๊ณ  ๊ทธ๊ฒƒ์„ ๋ง‰๊ณ ์ž ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ๋‹ค์ค‘ ์ƒ์†ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค์ค‘ ์ƒ์†ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ชจ๋“  ํ•„๋“œ๊ฐ€ public static final๋กœ ์ •์˜๋˜์–ด ๊ฐ ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ ๊ณต๊ฐ„์ด ๊ฒน์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ ์–ด์ฐจํ”ผ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์™„์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋˜๋Š” ๋ถ€๋ถ„์ด ์—†๋‹ค.

2. ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์™€ ์—ฌ๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋™์‹œ์— ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํด๋ž˜์Šค๋งŒ ๋‹ค์ค‘ ์ƒ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฌธ์ œ๋  ๊ฑด ์—†๋‹ค. ๋‹ค๋งŒ ์ƒ์†ํ•  ๊ฒฝ์šฐ ์ˆœ์„œ์— ์œ ์˜ํ•ด์•ผํ•œ๋‹ค. ๋ฐ˜๋“œ์‹œ ์ฒ˜์Œ์— ํด๋ž˜์Šค ๋จผ์ € ์ƒ์†ํ•ด์ฃผ๊ณ  ๊ทธ ๋‹ค์Œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•ด์•ผํ•œ๋‹ค.

3. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋•Œ implements๊ฐ€ ์•„๋‹Œ extends๋กœ ์ƒ์†ํ•ด์•ผํ•œ๋‹ค. ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž๋ฉด interface myInterface1 extends myInterface2์˜ ํ˜•์‹์ด ๋  ๊ฒƒ์ด๋‹ค.

4. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ธํ„ฐํŽ˜์ด์Šค๋Š” ์™„์„ฑ๋˜์ง€ ์•Š์€ ํ…Œ๋‘๋ฆฌ๋งŒ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์™„์„ฑ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€๋‹Œ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ธํ„ฐํŽ˜์ด์Šค์˜ ์˜๋ฏธ๊ฐ€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋˜๋‹ˆ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์ƒ์†๋˜์ง€ ๋ชปํ•œ๋‹ค.

5. ๋ชจ๋“  ์ž์‹ ํด๋ž˜์Šค์˜ ๊ตฌํ˜„ ๋ฉ”์„œ๋“œ๋Š” public๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
ํ•˜์œ„ ํด๋ž˜์Šค์— ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ์ˆ˜ํ–‰๋  ๋•Œ ์ ‘๊ทผ ์ง€์ •์ž๋Š” ๋ถ€๋ชจ ๋ฉ”์„œ๋“œ์˜ ์ ‘๊ทผ ์ง€์ •์ž์™€ ์ ‘๊ทผ ๋ฒ”์œ„๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ์ปค์•ผ ํ•œ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋Š” public์œผ๋กœ ๊ฐ•์ œ๋˜์–ด์žˆ์–ด์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ๋ชจ๋“  ์ž์‹ ํด๋ž˜์Šค๋Š” public ์ ‘๊ทผ ์ง€์ •์ž๋งŒ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ ์ถ”์ƒ ํด๋ž˜์Šค์™€ ๋™์ผํ•˜๋‹ค.

 

 

 

์ธํ„ฐํŽ˜์ด์Šค์˜ ๋””ํดํŠธ ๋ฉ”์„œ๋“œ

interface myInterface {
    public default void myMethod {
    
    }
}
myInterface๊ฐ€ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ์ƒ์†๋˜์–ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ํด๋ž˜์Šค์— ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ์™€์ค‘์— ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์— ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด? myInterface๋ฅผ ์ƒ์†ํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋Š” ์ƒ์†ํ•œ ํด๋ž˜์Šค์—์„œ ๋ชจ๋‘ ๊ตฌํ˜„๋˜์–ด์•ผํ•˜๋Š”๋ฐ, ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์— ๊ตฌํ˜„๋˜์ง€ ์•Š์•„์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ์ถ”๊ฐ€๋œ ๊ฒƒ์ด default ๋ฉ”์„œ๋“œ์ด๋‹ค. ๋””ํดํŠธ ๋ฉ”์„œ๋“œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด๋ถ€์— ์™„์„ฑ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

 

 ์ธํ„ฐํŽ˜์ด์Šค์˜ super

interface myInterface {
    default void myMethod(){
        System.out.println("MyInterface์˜ ๋ฉ”์„œ๋“œ ์ถœ๋ ฅ");
     }
}

class myClass implements myInterface {
    @Override
    public void myMethod(){
        myInterface.super.myMethod();
        System.out.println("myClass์˜ ๋ฉ”์„œ๋“œ ์ถœ๋ ฅ");
    }
}
myClass.myMethod( );๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด, super๋กœ ์ธํ•ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ ํ›„ ๊ทธ ๋‹ค์Œ์— ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๊ฒƒ์ด๋‹ค. super๋ฅผ ํด๋ž˜์Šค์— ์‚ฌ์šฉํ•  ๋•, ๊ทธ๋ƒฅ ๋ฉ”์„œ๋“œ๋ช… ์•ž์— super.์„ ๋ถ™์ด๋ฉด ๋๋Š”๋ฐ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค๋ช….super.๋ฉ”์„œ๋“œ๋ช…์„ ๋ถ™์˜€๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ์•„๋งˆ ๊ทธ ์ด์œ ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์–ด๋–ค ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๊ฒƒ์ธ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ์ ์–ด์•ผํ•˜๋Š” ๋“ฏ ํ•˜๋‹ค.

 

 

 

 ์ธํ„ฐํŽ˜์ด์Šค์˜ static

interface MyInterface {
    static void greet() {
        System.out.println("Hello from Interface!");
    }
}

public class Main {
    public static void main(String[] args) {
        MyInterface.greet(); 
    }
}
์ธํ„ฐํŽ˜์ด์Šค์— static ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ ๊ฒฝ์šฐ Main ํด๋ž˜์Šค์— ๋ณด์ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ธํ„ฐํŽ˜์ด์Šค์˜ greet ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์˜ค๋ฒ„๋ผ์ด๋”ฉ ์‹ ๊ฒฝ์“ธ ๊ฒƒ ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌ ๊ฐ€๋Šฅํ•˜๋ฉฐ, static ๋ฉ”์„œ๋“œ๋ฅผ ์™ธ๋ถ€๋กœ ๋นผ์ง€ ์•Š์•„๋„ ๋˜์–ด ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„  ์ข€ ๋” ํŽธ๋ฆฌํ•ด์ง„๋‹ค.

 

 

 

๐Ÿคธ๐Ÿป ๐Ÿคธ๐Ÿป ๐Ÿคธ๐Ÿป

 

 

 

 

ํฌ์ธํ„ฐ(Pointer)

  • ํฌ์ธํ„ฐ๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Ÿ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.
  • int *b = &a
  • int *b๋Š” b๊ฐ€ ์–ด๋–ค intํ˜• ์ฃผ์†Œ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • = &a๋Š” b์— a์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์˜๋ฏธ์ด๋‹ค.

 

1. ๊ธฐ๋ณธ ๊ฐœ๋… 

int a = 10;
int *b = &a;
a์˜ ๊ฐ’์€ 10, a์˜ ์ฃผ์†Œ๋Š” 0x7ffee3b8dace

b์˜ ๊ฐ’์€ a์˜ ์ฃผ์†Œ๊ฐ€ ๋˜๊ณ , *b์˜ ๊ฐ’์€ a์˜ ๊ฐ’์ด ๋œ๋‹ค.
์ด๋•Œ *๊ณผ &๋Š” ์„œ๋กœ ์ƒ์‡„ํ•˜๋Š” ํšจ๊ณผ๋ฅผ ์ง€๋‹Œ๋‹ค. ์ฆ‰, *๊ณผ &๊ฐ€ ๊ฐ™์ด ๋งŒ๋‚˜๋ฉด ์‚ฌ๋ผ์ ธ์„œ ํ•ด๋‹น ๋ณ€์ˆ˜๋งŒ ๋‚จ๊ฒŒ ๋œ๋‹ค. &๋Š” "์ง‘ ์ฃผ์†Œ ์ข€ ์•Œ๋ ค์ค˜!"๋ผ๋Š” ์˜๋ฏธ๋ผ๋ฉด, *์€ "๊ทธ ์•ˆ์— ์‚ฌ๋Š” ์‚ฌ๋žŒ(๊ฐ’)์„ ์•Œ๋ ค์ค˜!"๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. (์‚ฌ์‹ค ์˜๋ฏธ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ดํ•ดํ•˜๊ธฐ๋ณด๋‹ค, ๊ทธ๋ƒฅ ์ƒ์‡„๋œ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ์•„๋‘๊ณ  1์ฐจ์› ๋ฐฐ์—ด, 2์ฐจ์› ๋ฐฐ์—ด ๋“ฑ ์–ด๋–ป๊ฒŒ ์“ฐ์ด๋Š”์ง€ ์™ธ์šฐ๋Š”๊ฒŒ ๋ฌธ์ œํ’€์ด์— ๋” ํšจ๊ณผ์ ์ด๋‹ค)

*&a๊ฐ€ ์žˆ๋‹ค๋ฉด, [ a์˜ ์ง‘์ฃผ์†Œ๋ฅผ ์•Œ๋ ค์ค˜ -> ๊ทธ ์ง‘์— ๋ˆ„๊ฐ€์žˆ์–ด? -> 10 ]
&*b๊ฐ€ ์žˆ๋‹ค๋ฉด, [ ์ฃผ์†Œ b์•ˆ์— ๋ˆ„๊ฐ€์žˆ์–ด? -> 10 -> 10์˜ ์ฃผ์†Œ๋ฅผ ์•Œ๋ ค์ค˜ ] ๊ฐ€ ๋œ๋‹ค.

 

 

 

int a = 20;
int *b = &a;

printf("%d %d %d", a, *b, *(&a));
a์˜ ๊ฐ’์€ 20์ด๋‹ค.
*b ์•ˆ์—๋Š” &a(a์˜ ๊ฐ’)์ด ๋‹ด๊ฒจ ์žˆ์œผ๋‹ˆ 20์ด๋‹ค.
*(&a)๋Š” *์™€ &๊ฐ€ ์ƒ์‡„๋˜์–ด a์˜ ๊ฐ’๋งŒ ๋‚จ์•„ 20์ด ๋œ๋‹ค.

 

 

 

 

2. 1์ฐจ์› ๋ฐฐ์—ด

int a[3] = {1, 2};
int *p = a;

print("%d %d %d\n", *a, *(a+1), *(a+2));
print("%d %d %d\n", *p, *(p+1), *(p+2));

 


a๊ฐ€ 1์ฐจ์› ๋ฐฐ์—ด์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉด์„œ int *p = a;๋กœ a๊ฐ€ ์ƒ์ˆ˜๋ฅผ ๊ฐ€์กŒ์„ ๋•Œ์™€ ๋‹ฌ๋ฆฌ a ์•ž์— &๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, int *p = &a ์‹์—์„œ &a๋Š” ๋ฐฐ์—ด a์˜ ์ „์ฒด ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์— "int 3๊ฐœ ์งœ๋ฆฌ ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ"๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ, int *p๋Š” "ํ•œ ๊ฐœ์˜ int๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ"๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ํƒ€์ž…์ด ์ผ์น˜ํ•˜์ง€ ์•Š์•„ ๊ฒฝ๊ณ  ํ˜น์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋งŒ์•ฝ int *p = &a๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, int (*p)[3] = &a๋ผ๊ณ  ์จ์ค˜์•ผํ•œ๋‹ค. 

[ ๊ณต์‹์œผ๋กœ ๊ธฐ์–ตํ•˜์ž! ]
"์ž๋ฃŒํ˜• ๋ฐฐ์—ด๋ช…[์š”์†Œ];"์ธ ๊ฒฝ์šฐ,
โž€ ๋ฐฐ์—ด+i == &๋ฐฐ์—ด[i]
โž *(๋ฐฐ์—ด+i) == ๋ฐฐ์—ด[i] 

int *p = a๋Š” ๋ฐฐ์—ด ์ „์ฒด๋ฅผ ์˜๋ฏธํ•˜๊ธฐ๋Š” ํ•˜๋‚˜, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ โž€  int *p = &a[0]์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  *a๋Š” โž *(&a[0])์ด ๋˜์–ด *๊ณผ &๊ฐ€ ์ƒ์‡„๋˜๊ณ  a[0]๋งŒ ๋‚จ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  *(a+1)์€ *(&a[0]+1)์ด ๋˜๋Š”๋ฐ, +1์ด ๊ด„ํ˜ธ ์•ˆ์— ์žˆ์œผ๋‹ˆ a[0] ๋‹ค์Œ ๋ฐฐ์—ด a[1]์„ ๋œปํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ *(&a[1])์ด ๋˜๊ณ  *๊ณผ &๋Š” ์ƒ์‡„๋˜์–ด a[1]๋งŒ ๋‚จ์•„ 2๊ฐ€ ๋œ๋‹ค. *(a+2)๋Š” ๋˜‘๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ a[2]๋งŒ ๋˜๋Š”๋ฐ ์ง€๊ธˆ ๋ฐฐ์—ด์ด {1,2}๋กœ ๋˜์–ด์žˆ์ง€๋งŒ ํฌ๊ธฐ๋Š” 3์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์งˆ์ ์œผ๋กœ {1,2,0}์˜ ํ˜•ํƒœ์ด๋‹ค. ๊ทธ๋ž˜์„œ a[2]๋Š” 0์ด ๋œ๋‹ค.

์•„๊นŒ ์„ค๋ช…์—์„œ int *p = a;๋ผ๊ณ  ํ–ˆ์ง€๋งŒ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ โž€  int *p = &a[0]์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ p๋Š” a[0]์˜ ์ฃผ์†Ÿ๊ฐ’(&)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, โž p ์•ž์— *๊ฐ€ ๋ถ™์œผ๋‹ˆ &์™€ *์ด ์ƒ์‡„๋˜์–ด a[0]์˜ ๊ฐ’์„ ์•Œ๋ ค๋‹ฌ๋ผ๋Š” ์˜๋ฏธ๋กœ ๋ณ€ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด *p๋Š” a[0]์ธ ๊ฐ’ 1์ด ๋˜๊ณ  *(p+1)์€ *(&a[0]+1)์ด ๋˜์–ด์„œ a[1]์ธ 2๊ฐ€ ๋˜๊ณ , *(p+2)๋Š” *(&a[0]+2)๋กœ a[2]๊ฐ€ ๋˜์–ด 0์˜ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

 

 

 

 

3. 2์ฐจ์› ๋ฐฐ์—ด

  • 2์ฐจ์› ๋ฐฐ์—ด๊ณผ 1์ฐจ์› ํฌ์ธํ„ฐ
int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};
int *p = a[1];

printf("%d %d %d\n", *a[0], *a[1], *a[2]);
printf("%d %d %d\n", **a, **(a+1), **(a+2);
printf("%d %d\n", *p, *(p+1));
printf("%d %d\n", p[0], p[1]);
์œ„์—์„œ โž€  a = &a[0]์ด ๋œ๋‹ค๊ณ  ํ–ˆ์—ˆ๋‹ค. ์—ฌ๊ธฐ๋„ ๋˜‘๊ฐ™๋‹ค. *a[0]์€ *(&a[0][0]) ๋ถ™๊ณ  *๊ณผ &์€ ์ƒ์‡„๋˜์–ด a[0][0]๋งŒ ๋‚จ์•„ 1์„ ์ถœ๋ ฅํ•œ๋‹ค. *a[1]์€ *(&a[1][0])์ด ๋˜๊ณ  a[1][0]์œผ๋กœ 3์„ ์ถœ๋ ฅํ•œ๋‹ค.

**a๋„ ๊ฐ™๋‹ค. **(&a[0])์ด ๋˜๊ณ  *์™€ &๊ฐ€ ์ƒ์‡„๋˜์–ด *(a[0])์ด ๋œ ํ›„ ๋‹ค์‹œ *(&a[0][0])์œผ๋กœ a[0][0]๋งŒ ๋‚จ๋Š”๋‹ค. ๊ทธ๋กœ์ธํ•ด ๊ฐ’์€ 1์ด ๋œ๋‹ค. ๊ทธ๋ƒฅ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด์„œ *๋ฅผ ์—†์• ๊ณ  ์‹ถ์œผ๋ฉด &๋ฅผ ๊ฐ€์ ธ์™€์•ผํ•˜๋Š”๋ฐ &๋Š” [0]๊ณผ ํ•œ ๋ฌถ์Œ์ด๋ผ ๊ฐ™์ด ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ์™ธ์šฐ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค์‹œ ์ด์–ด์„œ **(a+1)๋„ ์‚ดํŽด๋ณด์ž **(&a[1])์ด ๋˜๊ณ  *(a[1])์ด ๋˜์—ˆ๋‹ค. *(&a[1][0])์ด ๋˜๊ณ  ์„œ๋กœ ์ƒ์‡„๋˜์–ด a[1][0]๋งŒ ๋‚จ์•„ 3์„ ์ถœ๋ ฅํ•œ๋‹ค.


p๋Š” a[1]์˜ ์ฃผ์†Ÿ๊ฐ’์ธ &a[1][0] ๊ฐ€์ง„๋‹ค. *p๋Š” *(&a[1][0])์ด ๋˜์–ด a[1][0]์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฐ’์€ 3์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. *(p+1)์€ *(&a[1][0]+1)๋กœ a[1][0]๋‹ค์Œ ๊ฐ’์ธ a[1][1]์ด ๋œ๋‹ค. ๊ทธ๋ž˜์„œ 4๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

p[0]๋Š” *(p+0)๊ณผ ๊ฐ™๋‹ค. ์ด์œ ๋Š” ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ž๋ฅผ ๋” ์‚ดํŽด๋ด์•ผํ•˜๋Š”๋ฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด c์–ธ์–ด์—์„œ ๋ฐฐ์—ด๊ณผ ์ธ๋ฑ์Šค๋Š” ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ž๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ *(p+0)์€ p๊ฐ€ a[1]์—์„œ ์‹œ์ž‘ํ•˜๋‹ˆ *(&a[1][0])์ด ๋˜์–ด a[1][0]์˜ ๊ฐ’์ธ 3์„ ๊ฐ€์ง„๋‹ค. p[1]๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. *(p+1)์ด ๋˜๊ณ  *(&a[1][1])๋กœ 4๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

  • 2์ฐจ์› ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ ๋ฐฐ์—ด
int a[3][2] = {{1,2}, {3,4}, {5,6}};
int *p[3] = {a[2], a[0], a[1]};

printf("%d, %d\n", *a[0], *a[1]);
printf("%d, %d\n", p[1][0], p[2][0]);
printf("%d, %d\n", *p[1], *p[2]);
*a[0]์€ *(&a[0[0])์ด ๋˜์–ด์„œ 1์ด ์ถœ๋ ฅ๋œ๋‹ค. *a[1]์€ *(&a[1][0])์œผ๋กœ 3์ด ์ถœ๋ ฅ๋œ๋‹ค.

p๋Š” int * 3๊ฐœ์งœ๋ฆฌ ๋ฐฐ์—ด์ด๋‹ค. p[1][0]์„ ์‚ดํŽด๋ณด์ž. p[1]์€ a[0]์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ p[1][0]์€ *(p[1]+0) -> *(a[0]+0) -> *(&a[0][0])์ด ๋˜์–ด 1์ด ์ถœ๋ ฅ๋œ๋‹ค. p[2][0]์€ p[2]๊ฐ€ a[1]์„ ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋‹ˆ, *(&a[1][0])์œผ๋กœ 3์ด ๋œ๋‹ค.

p์— ๋Œ€ํ•ด์„œ ๋” ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. p์˜ 0๋ฒˆ์งธ ํ–‰์— a์˜ 2๋ฒˆ์žฌ ํ–‰์ด ๋“ค์–ด๊ฐ”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

p[1] a[0][0]
1
a[0][1]
2
p[2] a[1][0]
3
a[1][1]
4
p[0] a[2][0]
5
a[2][1]
6

๊ทธ๋Ÿฌ๋ฉด *p[1]๋Š” *(&p[1][0])์ด ๋˜์–ด 1์ด ์ถœ๋ ฅ๋˜๊ณ , *p[2]๋Š” *(&p[2][0])์ด ๋˜์–ด 3์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

  • 2์ฐจ์› ๋ฐฐ์—ด๊ณผ 2์ฐจ์› ํฌ์ธํ„ฐ
int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};
int (*p)[2] = a;
int (*q)[2] = a+1;

printf("%d %d %d \n", p[0][0], p[0][1], p[1][0]);
printf("%d %d %d \n", q[0][0], q[0][1], q[1][0]);
๋ณ€์ˆ˜ p๋Š” &a[0]์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด p[0]์€ *(p+0)์ด ๋˜๊ณ  *(&a[0])์ด ๋˜๋ฉด์„œ a[0]์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด p[0][0]์€ *(*(p+0)+0))์ด ๋˜๊ณ  *(*(&a[0])+0) -> *(a[0]+0) -> *(&a[0][0]) -> 1์ด ๋œ๋‹ค. p[0][1]์€ *(*(p+0)+1) -> *(*(&a[0])+1) -> *(&(a[0][1])) -> 2๊ฐ€๋œ๋‹ค.

๋ณ€์ˆ˜ q๋Š” &a[1]์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด q[0][0] -> *(*(q+0)+0) ->  *(*(&a[1])+0) -> *(&a[1][1]) -> 3์ด ๋œ๋‹ค. q[0][1]์€  *(*(q+0)+1) ->  *(*(&a[1])+1) -> *(&a[1][2]) -> 4๊ฐ€ ๋œ๋‹ค.

 

 

 

 

4. ๊ตฌ์กฐ์ฒด์™€ ํฌ์ธํ„ฐ

  • ์ผ๋ฐ˜ ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜๋กœ ์ ‘๊ทผํ•  ๋•Œ .์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค.
  • ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ๋กœ ์ ‘๊ทผํ•  ๋•Œ๋Š” ->๋กœ ์ ‘๊ทผํ•œ๋‹ค. 

 

struct Student {
  char gender;
  int age;
};

void main(){
  struct Student s[3] = { 'F', 21, 'M', 20, 'M', 24};
  struct Student *p = s;
  
  printf("%c %d\n", s[0].gender, s[0].age);
  printf("%c %d\n", (*s).gender, (*s).age);
  printf("%c %d\n", s->gender, s->age);
  printf("%c %d\n", (s+1)->gender, (s+1)->age);
  printf("%c %d\n", p[0].gender, p[0].age);
  printf("%c %d\n", (*p).gender, (*p).age);
  printf("%c %d\n", p->gender, p->age);
  printf("%c %d\n", (p+1)->gender, (p+1)->age);
}

 

๊ตฌ์กฐ์ฒด์—์„œ .์€ ์ผ๋ฐ˜ ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ์ฃผ์†Œ๊ฐ€ ์•„๋‹Œ ๊ฐ’์— ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๋ฉด .์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์œ„์— ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ, .์€ s[0], *s, p[0], *p์™€ ๊ฐ™์ด ๊ทธ ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ ์‚ฌ์šฉํ–ˆ๋‹ค. ->๋Š” s, (s+1), p, (p+1)๊ณผ ๊ฐ™์ด &๊ฐ€ ๋ถ™๋Š” ๊ณณ์— ์‚ฌ์šฉํ–ˆ๋‹ค. ์•„๋งˆ ์œ„์˜ ๋‚ด์šฉ์„ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ๋Š” ์–ด๋ ต์ง€ ์•Š๊ฒŒ ๋ฐ”๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

 

 

 

5. ๋ฌธ์ œ

 

  • ๋ฌธ์ž์—ด 
char *p = "KOREA";

printf("%s\n", p);
printf("%s\n", p+3);
printf("%c\n", *p);
printf("%c\n", *(p+3));
printf("%c\n", *p+2);

 


 

"KOREA"๋Š” ๋ฌธ์ž 6๊ฐœ ์งœ๋ฆฌ ์ƒ์ˆ˜ ๋ฌธ์ž์—ด์ด๋‹ค. ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” K O R E A null ์ด๋ ‡๊ฒŒ ์ด 6๋ฐ”์ดํŠธ๊ฐ€ ์ €์žฅ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ "KOREA"๋Š” ๋ฌธ์ž์—ด ์ƒ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž๋กœ K์˜ ์ฃผ์†Œ๋กœ ์ž๋™ ๋ณ€ํ™˜๋˜๋ฉด์„œ "KOREA"๊ฐ€ &"KOREA"[0]๊ฐ€ ๋˜๊ณ  ๊ฒฐ๊ตญ &p[0]์ด ๋œ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ํŒ์ด๋ผ๋ฉด, %s๋ฅผ ์ผ๋Š”์ง€, %c๋ฅผ ์ผ๋Š”์ง€๋ฅผ ๋ณด๊ณ  ๋ฌธ์ž์—ด์ด ์ถœ๋ ฅ๋˜๋Š”์ง€ ๋ฌธ์ž ํ•˜๋‚˜๊ฐ€ ์ถœ๋ ฅ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด %s๋Š” ๋ฌธ์ž์—ด ํฌ๋งท์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅ๋˜๋Š” ๋ฐฉ์‹์ด ์ฃผ์†Œ๊ฐ’์„ ํ•˜๋‚˜ ๋ฐ›์•„์„œ ๊ทธ ์ฃผ์†Œ์— ๋“ค์–ด์žˆ๋Š” ๊ฒƒ์„ null์ด ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ์ฝ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

[ ํ•ด์„ค ]
1. KOREA
: p๋Š” ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ %s๊ฐ€ p์˜ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž ์ฃผ์†Œ๋กœ๊ฐ€์„œ null ๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ฐจ๋ก€๋กœ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— KOREA๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. , &p[0]

2. EA
: p+3์€ p๊ฐ€ K์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์—ˆ์œผ๋‹ˆ ๊ฑฐ๊ธฐ์„œ 3๊ฐœ๋ฅผ ๊ฑด๋„ˆ๊ฐ€๋ฉด E๊ฐ€ ๋‚˜์˜จ๋‹ค. ๊ทธ๋ž˜์„œ E์˜ ์ฃผ์†Œ๋กœ ๊ฐ€์„œ null ๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ฐจ๋ก€๋กœ  ์ฝ์œผ๋‹ˆ EA๊ฐ€ ๋œ๋‹ค. , &p[3]

3. K
: *p๋Š” p์˜ ๊ฐ’์„ ๋งํ•˜๋Š” ๊ฒƒ์œผ๋กœ, p[0]์˜ ๊ฐ’์„ ์˜๋ฏธํ•˜์—ฌ K๊ฐ€ ๋œ๋‹ค. , *(&p[0]) = p[0]

4. E

: *(p+3)์€ p์˜ 3๋ฒˆ์งธ ์ฃผ์†Œ์˜ ๊ฐ’์„ ์˜๋ฏธํ•˜์—ฌ E๊ฐ€ ๋œ๋‹ค. , *(&p[0]+3) = *(&p[3]) = p[3]

5. M
: *p+2๋Š” *์ด ๊ด„ํ˜ธ ์—†์ด p์— ๋ถ™์–ด์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š” ๊ฒƒ์€ 3๋ฒˆ์ฒ˜๋Ÿผ *p๊ฐ€ p[0]์„ ์˜๋ฏธํ•˜๋ฉฐ, ๊ทธ ๊ฐ’์—์„œ 2๋ฅผ ๋”ํ•œ ๊ฐ’์ด ๋œ๋‹ค. p[0]์€ K์ด๊ณ  K ๋‹ค์Œ์€ L ๊ทธ ๋‹ค์Œ์€ M์ด๋‹ˆ 2๋ฅผ ๋”ํ•œ ๊ฐ’์€ M์ด ๋œ๋‹ค. , *(&p[0])+2 = p[0]+2 = M


[ ๋‹ต ]
1. KOREA
2. EA
3. K
4. E
5. M

 

 

  • ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ ๋ฌธ์ œ
struct Pointer1 {
  char name[10];
  int age;
};

void main() {
  struct Pointer1 p[] = {"Lee", 10, "Park", 19, "Baek", 21, "Yoon", 13};
  struct Pointer1 *s;
  p = s;
  p++;
  printf("%s\n", s->name);
  printf("%d\n", s->age); 
}

[ ํ’€์ด ]
p = &s[0]์œผ๋กœ p๋Š” "Lee"๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Ÿ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ printf๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ์ „, p++๋ฅผ ํ†ตํ•ด &s[0]์ด ์ฆ๊ฐ€ํ•˜์—ฌ &s[1]์ด ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด "Lee"๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋˜ ์ฃผ์†Ÿ๊ฐ’์€ "Park"์œผ๋กœ ๋ณ€๋™๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค. ์ด ์ƒํƒœ์—์„œ p -> name๊ณผ p -> age๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค๋ฉด, ํ˜„์žฌ p๋Š” s[1]์˜ ์ฃผ์†Ÿ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋‹ˆ ->๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜ํƒ€๋ƒˆ๊ณ  ๊ฐ name๊ณผ age๋Š” Park์™€ 19๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

[ ๋‹ต ]
Park
19

 

 

< ์ด์ „ ์ •๋ฆฌ ๊ธ€  - ์ž์ฃผ ํ•จ๊ป˜ ์“ฐ์ด๋Š” static๊ณผ final >

 

 

Java ๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ์ž์ฃผ ํ•จ๊ป˜ ์“ฐ์ด๋Š” static๊ณผ final

๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ์ธ์Šคํ„ด์Šค, ์ƒ์„ฑ์ž ๊ทธ๋ฆฌ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter)์™€ ์ธ์ž(Argument)์˜ ์ฐจ์ด๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ๋ณ€์ˆ˜๋ž€?๐Ÿชฝ"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."    โ–บ ๋ณ€์ˆ˜๋ณ€์ˆ˜๋ž€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ’

post-this.tistory.com

 

 

 

< ์ž๋ฐ” ์™„์ „ ์ •๋ณต_ 10์žฅ ํด๋ž˜์Šค์˜ ์ƒ์†๊ณผ ๋‹คํ–ฅ์„ฑ >

 

[Java] ์ž๋ฐ” ์™„์ „ ์ •๋ณต_ 10์žฅ ํด๋ž˜์Šค์˜ ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ (2)

๐Ÿ“š ์ฑ… ์†Œ๊ฐœํ•˜๊ธฐ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ž๋ฐ”์™„์ „์ •๋ณต ์ฑ… ๋งํฌ!ใ„ด ๊น€๋™ํ˜• ์ง€์Œ, ์ด์ง€์Šคํผ๋ธ”๋ฆฌ์‹ฑ      ์ด ์ฑ…์„ ๊ณ ๋ฅด๊ฒŒ ๋œ ์ด์œ ๋Š” ์นœ๊ตฌ์˜ ์ถ”์ฒœ์ด์—ˆ๋‹ค. ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ ํ˜€์žˆ์–ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์ด์œ ๋กœ

post-this.tistory.com

 

 


 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

1. ๊ธฐ๋ณธ์ ์ธ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

class A {
    void print() {
         System.out.println("A ํด๋ž˜์Šค")
    }
}

class B extends A {
    @Override
    void print() {
         System.out.println("B ํด๋ž˜์Šค")
    }
}

public class MethodOverrideing_1 {
     public static void main(String[] args) {
         
         A aa = new A();
         aa.print();
         
         B bb = new B();
         bb.print();
         
         A ab = new B();
         ab.print();
     }
}
์ด ์ฝ”๋“œ๋Š” '์ž๋ฐ” ์™„์ „ ์ •๋ณต'์˜ ์ฝ”๋“œ๋‹ค. ์ „์— ๋ฐฐ์› ๋˜๊ฑธ ๋ณต์Šตํ•ด๋ณด์ž๋ฉด, A aa = new A( );๋Š” A ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์ด์ž A ํƒ€์ž…์ด๋‹ค. aa.print( )๋ฅผ ์‹คํ–‰ํ•˜๋ฉด A ํด๋ž˜์Šค์— ์žˆ๋Š” print ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

๊ทธ ๋‹ค์Œ A ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ B bb = new B( );๊ฐ€ ์ƒ์„ฑ๋˜๋‹ˆ ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ €์žฅ๋œ A์˜ print ๋ฉ”์„œ๋“œ๋ฅผ ๋ฎ๊ณ  B์˜ print ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ฌ๋ผํƒ€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ bb.print( )๊ฐ€ ์‹คํ–‰๋˜๋ฉด "B ํด๋ž˜์Šค"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

์ด์ œ A ab = new B( );๋ฅผ ์‚ดํŽด๋ณด์ž. ํ•ด๋‹น ์ฝ”๋“œ๋Š” A ํƒ€์ž…์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜ ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š” ๋ง์€ ab.print( )๋Š” "A ํด๋ž˜์Šค"๊ฐ€ ์ถœ๋ ฅ๋˜์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์•„๊นŒ ์œ„์˜ ์ฝ”๋“œ์—์„œ ์ด๋ฏธ B bb = new B( );๋กœ A ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” print ๋ฉ”์„œ๋“œ๊ฐ€ B ํด๋ž˜์Šค์˜ print( ) ๋ฉ”์„œ๋“œ๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋˜์—ˆ๋‹ค. A ab = new B( );๋Š” B์˜ print( )๊ฐ€ ์‹คํ–‰๋˜๊ณ  "B ํด๋ž˜์Šค"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

2. ์—…์บ์ŠคํŒ…๊ณผ ๋‹ค์šด์บ์ŠคํŒ…

class A {
    void print() {
        System.out.println("A ํด๋ž˜์Šค");
    }
}

class B extends A {
    @Override
    void print() {
        System.out.println("B ํด๋ž˜์Šค");
    }
    
    void printB() {
        System.out.println("B์—๋งŒ ์žˆ๋Š” ๋ฉ”์„œ๋“œ");
    }
}

public class MethodOverrideing_1 {
    public static void main(String[] args) {

        A aa = new A();   
        B bb = new B();   

        A ab = new B();  
        ab.print();       

        // ab.printB();  

        B b2 = (B) ab;    
        b2.printB();     
    }
}

 

์—…์บ์ŠคํŒ…์€ ์•„๊นŒ ๊ธฐ๋ณธ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์—์„œ ํ–ˆ๋‹ค. A ab = new B( );๊ฐ€ ์—…์บ์ŠคํŒ…ํ•œ ์ผ€์ด์Šค๋‹ค. ์—…์บ์ŠคํŒ…์ด๋ž€, ์ž์‹ ํด๋ž˜์Šค(B ํด๋ž˜์Šค)๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค(A ํด๋ž˜์Šค) ํƒ€์ž…์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด, B ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šค๋กœ ๊ฐ€์ ธ๋„ B ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฒฐ๊ตญ ํƒ€์ž…์€ A์ด๊ธฐ์— A ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด printB( ) ๋ฉ”์„œ๋“œ๋Š” B ํด๋ž˜์Šค์—๋งŒ ์žˆ๊ณ  A ํด๋ž˜์Šค์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ printB๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ฐธ์กฐ ํƒ€์ž…๋„ ์‹ค์ฒด ๊ฐ์ฒด๋„ B์ธ B bb = new B( );๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ab๋ฅผ ๋‹ค์šด ์บ์ŠคํŒ…ํ•˜๋ฉด ๋œ๋‹ค.


๋‹ค์šด ์บ์ŠคํŒ…์€ ํƒ€์ž…์„ ๋‹ค์‹œ B b2 = (B) ab๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค. ์ด๊ฒƒ์„ ํ˜•๋ณ€ํ™˜์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

 

3. super( ), this( )

class A {
    A() {
        this(3);
        System.out.println("A ์ƒ์„ฑ์ž1")
    }
    
    A(int a) {
        System.out.println("A ์ƒ์„ฑ์ž2")
    }
}

class B extends A {
    B() {
         this(3);
         System.out.println("B ์ƒ์„ฑ์ž1")
    }
    
    B(int a) {
         System.out.println("B ์ƒ์„ฑ์ž2")
    }
}
A aa1 = new A();
A aa2 = new A(3);

B bb1 = new B();
B bb2 = new B(3);
ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ๋˜‘๊ฐ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์ƒ์„ฑ์ž์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด A aa1 = new A( ); ์ด๊ฒƒ์€ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์ฝ”๋“œ์ด๋‹ค. super์™€ this๋Š” ์ƒ์„ฑ์ž ์•ˆ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. super๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ์‹œํ‚ค๋ฉฐ, ๋งŒ์ผ ์ƒ์„ฑ์ž์— super๋‚˜ this๊ฐ€ ์—†๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ super๋ฅผ ํฌํ•จ์‹œ์ผœ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  this๋Š” ๊ฐ™์€ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์žˆ๋Š” ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ์‹œํ‚จ๋‹ค.(์ƒ์„ฑ์ž๊ฐ€ 2๊ฐœ ์ด์ƒ ์žˆ์–ด์•ผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.) ์ฆ‰ this๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์žˆ๋Š” ์ƒ์„ฑ์ž๋กœ ๊ฐ€์ง€ ์•Š๊ฒŒ ํ•ด์ค€๋‹ค.

B bb1 = new B( );๋ฅผ ์‚ดํŽด๋ณด์ž.

1) this(3)์œผ๋กœ ์ธํ•ด ๊ฐ™์€ ํด๋ž˜์Šค ์•ˆ์— ์žˆ์œผ๋ฉด์„œ, 3์ด๋ผ๋Š” ์ธ์ž๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” B(int a)๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
2) ๊ทธ๋Ÿฐ๋ฐ B(int a) ์ƒ์„ฑ์ž๋Š” this๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์ ์œผ๋กœ super๋ฅผ ๋„ฃ์–ด์ค„ ๊ฒƒ์ด๋‹ค.
3) super๋กœ ์ธํ•ด ๋ถ€๋ชจํด๋ž˜์Šค์— ์žˆ๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž(A)๋กœ ๊ฐ€๊ฒŒ ๋œ๋‹ค.
4) A ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž A์— this(3)์ด ์žˆ์œผ๋‹ˆ, intํ˜• ์ธ์ž ํ•˜๋‚˜๋ฅผ ๋ฐ›๋Š” A ์ƒ์„ฑ์ž๊ฐ€ ์‹คํ–‰๋  ๊ฒƒ์ด๋‹ค.
5) A(int a)๊ฐ€ ์‹คํ–‰๋˜์–ด ๋“œ๋””์–ด! "A ์ƒ์„ฑ์ž2"๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค.
6) ๊ทธ๋Ÿฌ๋ฉด ๋‹ค์‹œ A ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž A๋กœ ๋Œ์•„์™€ "A ์ƒ์„ฑ์ž 1"์ด ์ถœ๋ ฅ๋œ๋‹ค.
7) ๋˜ ์ „์œผ๋กœ ๋Œ์•„๊ฐ€ B ํด๋ž˜์Šค์˜ B(int a)์˜ "B ์ƒ์„ฑ์ž 2"๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ 
8) ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€์žฅ ์ฒ˜์Œ ํ˜ธ์ถœ๋˜์—ˆ๋˜ B ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž B์˜ "B ์ƒ์„ฑ์ž 1"์ด ํ˜ธ์ถœ๋œ๋‹ค.

๋งŒ์•ฝ์— A ab = new B( ); ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด๋ณธ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๊ฒฐ๊ตญ ์ž์‹ ํด๋ž˜์Šค B์˜ B( )๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ถœ๊ณผ์ •๋ถ€ํ„ฐ ๋‹ต๊นŒ์ง€ ๋ชจ๋‘ ๊ฐ™๋‹ค.


 

 

4. ๋ฌธ์ œ 

- ์ˆ˜์ œ๋น„ ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ 2023 ์ฑ… ๋ฌธ์ œ ๋ฐœ์ทŒ

class Parent {
    public Parent() {
        System.out.print("A");
    }
    public void fn() {
        System.out.print("B");
    }
    public void fnA() {
        System.out.print("C");
    }
}

class Child extends Parent {
    public Child() {
        System.out.print("D");
    }
    public void fn() {
        System.out.print("E"); 
    }
    public void fnB() {
        System.out.print("F");
    }
}
Child c = new Child( );
c.fn( );
c.fnA( );

 

 


 

 

1) Child c = new Child( );๋กœ Child ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์œผ๋‹ˆ Child( )๊ฐ€ ํ˜ธ์ถœ๋  ๊ฒƒ์ด๋‹ค. 
2) ๊ทธ๋Ÿฐ๋ฐ Child( ) ๋‚ด๋ถ€์— this๊ฐ€ ์—†๋‹ค. (๋ฌผ๋ก  this๋ฅผ ์“ธ ์ˆ˜ ์—†๋‹ค, ์ƒ์„ฑ์ž๊ฐ€ 1๊ฐœ๋ผ์„œ)
3) ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์ ์œผ๋กœ super๋ฅผ ๋„ฃ์–ด ๋ถ€๋ชจ ํด๋ž˜์Šค Parent์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
4) Parent ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์–ด "A"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
5) ๋‹ค์‹œ Child ์ƒ์„ฑ์ž๋กœ ๋Œ์•„์™€์„œ "B"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

6) c.fn( );์€ Child ํด๋ž˜์Šค์— fn ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์œผ๋‹ˆ "E"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
7) c.fnA( );์€ fnA๊ฐ€ Parent ํด๋ž˜์Šค์— ์žˆ์ง€๋งŒ Child๊ฐ€ Parent ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ๋ฐ›๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ ์—†์ด Parent ํด๋ž˜์Šค์˜ fnA๊ฐ€ ์‹คํ–‰๋˜์–ด "C"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.



1.
Parent cp = new Child();
cp.fn();
cp.fnA();

2.
Child pc = new Parent():
cp.fn();
cp.fnA():

3.
Parent p = new Parent();
cp.fnB();
์œ„์˜ ๊ฒฝ์šฐ๋Š” ์–ด๋–จ๊นŒ?

1๋ฒˆ์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ์—†์ด ๋‹ค ์‹คํ–‰์ด ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ 2๋ฒˆ์˜ ๊ฒฝ์šฐ Child pc = new Parent( );์—์„œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์ธ Child์ธ๋ฐ ํ•˜์œ„ ํด๋ž˜์Šค์ธ ์ฐธ์กฐ ํƒ€์ž… ์•ˆ์— ์ƒ์œ„ ํด๋ž˜์Šค์ธ Parent ๊ฐ์ฒด๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

3๋ฒˆ๋„ ์‹คํ–‰๋  ์ˆ˜ ์—†๋‹ค. Parent๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ํ•˜์œ„ ํด๋ž˜์Šค์ธ Child์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹ค์–‘ํ•˜์ง€๋งŒ, ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ์œ„ํ•จ์ด ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์€ ์ฐธ์กฐ๋ณ€์ˆ˜ ํƒ€์ž…์„ ๊ธฐ์ค€์œผ๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘๋ฉด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.

 

 

 

๐Ÿคธ๐Ÿป ๐Ÿคธ๐Ÿป ๐Ÿคธ๐Ÿป

 

 

 

1. SIEM (Security Information and Event Management)

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

 

2. ์นจ์ž… ํƒ์ง€ ์‹œ์Šคํ…œ(IPS;Intrusion Prevention System)

  • ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ๊ณต๊ฒฉ์ด๋‚˜ ์นจ์ž…์„ ์‹ค์‹œ๊ฐ„์ ์œผ๋กœ ์ฐจ๋‹จํ•˜๊ณ , ์œ ํ•ดํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•œ ์กฐ์น˜๋ฅผ ๋Šฅ๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ

 

3. ์นจ์ž… ๋ฐฉ์ง€ ์‹œ์Šคํ…œ(IDS; Intrusion Detect System)

  • ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋น„์ธ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž์› ์ ‘๊ทผ๊ณผ ๋ณด์•ˆ ์ •์ฑ… ์œ„๋ฐ˜ ํ–‰์œ„๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํƒ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ

 

4. PIA(Privacy Impact Assessment)

  • ๊ฐœ์ธ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด ์ •๋ณด ์‹œ์Šคํ…œ์˜ ๋„์ž…์ด๋‚˜ ๊ฐœ์ธ์ •๋ณด ์ทจ๊ธ‰์ด ์ˆ˜๋ฐ˜๋˜๋Š” ๊ธฐ์กด ์ •๋ณด ์‹œ์Šคํ…œ์˜ ์ค‘๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‹œ, ๋™ ์‹œ์Šคํ…œ์˜ ๊ตฌ์ถ• ์šด์˜ ๋ณ€๊ฒฝ ๋“ฑ์ด ํ”„๋ผ์ด๋ฒ„์‹œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์— ๋Œ€ํ•˜์—ฌ ์‚ฌ์ „์— ์กฐ์‚ฌ ๋ฐ ์˜ˆ์ธก, ๊ฒ€ํ† ํ•˜์—ฌ ๊ฐœ์„  ๋ฐฉ์•ˆ์„ ๋„์ถœํ•˜๋Š” ์ฒด๊ณ„์ ์ธ ์ ˆ์ฐจ

 

5. ESM(Enterprise Security Management)

  • ๋ฐฉํ™”๋ฒฝ, ์นจ์ž… ํƒ์ง€ ์‹œ์Šคํ…œ, UTM, ๊ฐ€์ƒ์‚ฌ์„ค๋ง ๋“ฑ์˜ ์—ฌ๋Ÿฌ ๋ณด์•ˆ ์‹œ์Šคํ…œ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐœ์ƒํ•œ ๊ฐ์ข… ์ด๋ฒคํŠธ ๋ฐ ๋กœ๊ทธ๋ฅผ ํ†ตํ•ฉํ•ด์„œ ๊ด€๋ฆฌ, ๋ถ„์„, ๋Œ€์‘ํ•˜๋Š” ์ „์‚ฌ์  ํ†ตํ•ฉ ๋ณด์•ˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
  • ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ์ข…์˜ ๋ณด์•ˆ ์žฅ๋น„๋“ค์„ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๋„คํŠธ์›Œํฌ ์ž์› ํ˜„ํ™ฉ์˜ ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ์ด ์žˆ๊ณ , ์ฃผ๋กœ ์ด๋ฒคํŠธ ์œ„์ฃผ์˜ ๋‹จ์‹œ๊ฐ„ ์œ„ํ˜‘ ๋ถ„์„ ๋ฐ DBMS ๊ธฐ๋ฐ˜์˜ ๋ณด์•ˆ ๊ด€๋ฆฌ ์†”๋ฃจ์…˜

 

6. ISMS(Information Sercurity Management System)

  • ์กฐ์ง์˜ ์ฃผ์š” ์ •๋ณด์ž์‚ฐ์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์ •๋ณด๋ณดํ˜ธ ๊ด€๋ฆฌ ์ ˆ์ฐจ์™€ ๊ณผ์ •์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ˆ˜๋ฆฝํ•˜์—ฌ ์ง€์†์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ข…ํ•ฉ์ ์ธ ์ฒด๊ณ„

7.  PMS(Productive Management System)

  • ๊ธฐ์—…์ด ๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ ํ™œ๋™์„ ์ฒด๊ณ„์ , ์ง€์†์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ณดํ˜ธ์กฐ์น˜ ์ฒด๊ณ„๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€, ํ‰๊ฐ€ํ•˜์—ฌ ๊ธฐ์—…์—๊ฒŒ ๋ถ€์—ฌํ•˜๋Š” ์ธ์ฆ์ œ๋„

+ Recent posts