item 25 Jung inchul - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

Effective Java 3e ์•„์ดํ…œ 25๋ฅผ ์š”์•ฝํ•œ ๋‚ด์šฉ ์ž…๋‹ˆ๋‹ค.

์†Œ์Šค ํŒŒ์ผ ํ•˜๋‚˜์— ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์„ ์–ธ ํ•˜๋”๋ผ๋„ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ถˆํ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํ•œ ํด๋ž˜์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ์ค‘ ์–ด๋А ๊ฒƒ์„ ์‚ฌ์šฉํ• ์ง€๋Š” ์–ด๋А ์†Œ์Šค ํŒŒ์ผ์„ ๋จผ์ € ์ปดํŒŒ์ผํ•˜๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์„ ๊ถŒ์žฅ ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

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";
}

์šด ์ข‹๊ฒŒ "javac Main.java Dessert.java" ๋ช…๋ น์œผ๋กœ ์ปดํŒŒ์ผ ํ•œ๋‹ค๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ณ  Utensil๊ณผ Dessert ํด๋ž˜์Šค๋ฅผ ์ค‘๋ณต ์ •์˜ ํ–ˆ๋‹ค๊ณ  ์•Œ๋ ค์ค„ ๊ฒƒ์ด๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฐ€์žฅ ๋จผ์ € Main.java๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ , ๊ทธ ์•ˆ์—์„œ (Dessert ์ฐธ์กฐ๋ณด๋‹ค ๋จผ์ € ๋‚˜์˜ค๋Š”) Utensil ์ฐธ์กฐ๋ฅผ ๋งŒ๋‚˜๋ฉด Utensil.java ํŒŒ์ผ์„ ์‚ดํŽด Utensil๊ณผ Dessert๋ฅผ ๋ชจ๋‘ ์ฐพ์•„๋‚ผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์ค„ ์ธ์ˆ˜๋กœ ๋„˜์–ด์˜จ Dessert.java๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค ํ•  ๋•Œ ๊ฐ™์€ ํด๋ž˜์Šค์˜ ์ •์˜๊ฐ€ ์ด๋ฏธ ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋œ๋‹ค.

๊ตณ์ด ์—ฌ๋Ÿฌ ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋ฅผ ํ•œ ํŒŒ์ผ์— ๋‹ด๊ณ  ์‹ถ๋‹ค๋ฉด ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฝ๊ธฐ ์ข‹๊ณ  private์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ์ ‘๊ทผ ๋ฒ”์œ„๋„ ์ตœ์†Œ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ •๋ฆฌ

์†Œ์Šค ํŒŒ์ผ ํ•˜๋‚˜์—๋Š” ๋ฐ˜๋“œ์‹œ ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค(ํ˜น์€ ํ†ฑ๋ ˆ๋ฒจ ์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ํ•˜๋‚˜๋งŒ ๋‹ด์ž. ์ด ๊ทœ์น™๋งŒ ๋”ฐ๋ฅธ๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•œ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ์ผ์€ ์‚ฌ๋ผ์ง„๋‹ค.