item 25 sijun - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋Š” ํ•œ ํŒŒ์ผ์— ํ•˜๋‚˜๋งŒ ๋‹ด์œผ๋ผ

์ž๋ฐ”๋Š” ์†Œ์Šค ํŒŒ์ผ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋ฅผ ๋‘๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

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

// XX.java ๋‚ด ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๊ฐ€ ๋‘ ๊ฐœ ์กด์žฌํ•˜๋Š” ์ฝ”๋“œ ์˜ˆ์‹œ
class A {

}

class B {

}

์•„๋ž˜ ์ฝ”๋“œ๋Š” Utensil ํด๋ž˜์Šค์™€ Dessert ํด๋ž˜์Šค์˜ Name ํ•„๋“œ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.

public class Main {
	public static void main(String[] args){
		System.out.println(Utensil.Name + Dessert.Name);
	}
}
// Utensil.java ์†Œ์Šค ํŒŒ์ผ ๋‚ด๋ถ€

class Utensil {
    static final String NAME = "pan";
}

class Dessert {
    static final String NAME = "cake";
}
// Dessert.java ์†Œ์Šค ํŒŒ์ผ ๋‚ด๋ถ€

class Utensil {
    static final String NAME = "pot";
}

class Dessert {
    static final String NAME = "pie";
}

Utensil.java์™€ Dessert.java ํŒŒ์ผ์ด ์œ„์™€ ๊ฐ™์ด ์ •์˜๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ปดํŒŒ์ผ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•œ๋‹ค.

  1. javac Main.java Dessert.java๋กœ ์ปดํŒŒ์ผํ•  ๊ฒฝ์šฐ

    Main.java ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ํ•  ๋•Œ Utensil ์ฐธ์กฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ด์œผ๋กœ ์ธํ•ด Utensil ์†Œ์Šค์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ Utensil๊ณผ Dessert ํด๋ž˜์Šค๋ฅผ ์ฐพ๊ฒŒ๋œ๋‹ค.

    Dessert.java ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ์ด๋ฏธ ์ •์˜๋œ ํด๋ž˜์Šค๊ฐ€ Dessert.java๋ฅผ ์ปดํŒŒ์ผํ•  ๋•Œ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” Utensil๊ณผ Dessert๋ฅด ์ธํ•ด์„œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค

  2. javac Main.java๋‚˜ javac Main.java Utensil.java๋กœ ์ปดํŒŒ์ผํ•  ๊ฒฝ์šฐ

    pencake๋ฅผ ์ถœ๋ ฅ

  3. javac Dessert.java Main.java๋กœ ์ปดํŒŒ์ผํ•  ๊ฒฝ์šฐ

    potpie๋ฅผ ์ถœ๋ ฅ

์ด๋กœ์ธํ•ด ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋ฅผ ํ•œ ํŒŒ์ผ์— ์—ฌ๋Ÿฌ๊ฐœ ๋‹ด์œผ๋ฉด ์•ˆ๋œ๋‹ค. ๊ตณ์ด ๋‹ด์•„์•ผ ํ•œ๋‹ค๋ฉด ์•„์ดํ…œ 24์—์„œ ๋ฐฐ์šด ๊ฒƒ์ฒ˜๋Ÿผ ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ(์•„๋ž˜ ์ฝ”๋“œ ์ฐธ์กฐ)

public class Test {
    public static void main(String[] args) {
        System.out.println(Utensil.NAME + Dessert.NAME);
    }

    private static class Utensil {
        static final String NAME = "pan";
    }

    private static class Dessert {
        static final String NAME = "cake";
    }
}