Item 25. Limit File Top-level Class

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

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

// Foo.java
class Foo {
    static final String NAME = "Foo - foo";
}

class Bar {
    static final String NAME = "Foo - bar";
}

// Bar.java
class Bar {
    static final String NAME = "Bar - bar";
}

class Foo {
    static final String NAME = "Bar - foo";
}

// Main.java
public class Main {
    public static void main(String[] args) {
        System.out.println(Foo.NAME);
        System.out.println(Bar.NAME);
    }
}

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

> rm *.class
> javac Main.java
> java Main
Foo - foo
Foo - bar
> rm *.class
> javac Main.java Foo.java
> java Main
Foo - foo
Foo - bar
> rm *.class
> javac Main.java Bar.java
> java Main
Bar - foo
Bar - bar
> rm *.class
> javac Main.java Foo.java Bar.java
Bar.java:1: error: duplicate class: Bar
class Bar {
^
Bar.java:5: error: duplicate class: Foo
class Foo {
^
2 errors

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ, ์†Œ์Šค ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•˜๋ฉด ํ•ด๊ฒฐ๋˜๊ณ , ๊ผญ ๊ฐ™์€ ํŒŒ์ผ์— ์—ฌ๋Ÿฌ ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

class Main {

    public static void main(String[] args) {
        System.out.println(Foo.NAME);
        System.out.println(Bar.NAME);
    }

    private static class Foo {
        static final String NAME = "foo";
    }

    private static class Bar {
        static final String NAME = "bar";
    }
}

Last updated

Was this helpful?