Java: java.lang.Object

    Java: java.lang.Object

    2013, Jul 23    

    ๊ด€๋ จ ๋ฌธ์„œ

    Object ํด๋ž˜์Šค๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ƒ์†๊ณ„์ธต๋„ ์ƒ ๊ฐ€์žฅ ์œ„์— ์œ„์น˜ํ•˜๋Š” ์กฐ์ƒํด๋ž˜์Šค๋‹ค. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ƒ์†ํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋ฅผ ์ปดํŒŒ์ผ ํ•  ๋•Œ ์ž๋™์œผ๋กœ Object ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋„๋ก ํ•œ๋‹ค.

    Object ํด๋ž˜์Šค๋Š” ์†Œ์œ ํ•œ ๋ณ€์ˆ˜(=๋ฉค๋ฒ„๋ณ€์ˆ˜)๊ฐ€ ์—†๊ณ  11๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋งŒ ์กด์žฌํ•œ๋‹ค.

    ์ฃผ์š” ๋ฉ”์„œ๋“œ

    clone()

    ๊ฐ์ฒด ์ž์‹ ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋ฆฌํ„ดํ•œ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋‹จ์ˆœ ๋ณต์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ๊ฐ’์„ ์†Œ์œ ํ•œ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ๋Š” ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ Cloneable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implements ํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด CloneNotSupportedException์ด ๋ฐœ์ƒํ•œ๋‹ค.

    public class LogicTest {
        public static void main(String... args) throws CloneNotSupportedException {
            Doppelganger c = new Doppelganger();
            System.out.println(c.getAa()); // 1234
    
            c.setAa("asdasd");
    
            Doppelganger cc = (Doppelganger) c.clone();
            System.out.println(cc.getAa()); // asdasd
        }
    }
    
    class Doppelganger implements Cloneable {
        private String aa = "1234";
    
        public String getAa() {
            return aa;
        }
    
        public void setAa(String aa) {
            this.aa = aa;
        }
    
        @Override
        public Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    }
    

    equals( Object obj )

    ๊ฐ์ฒด ์ž์‹ ๊ณผ obj๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด์ธ์ง€ ๋ถˆ๋ฆฌ์–ธ๊ฐ’์œผ๋กœ ๋ฆฌํ„ด. ์ฐธ์กฐ๊ฐ’์„ ๋น„๊ตํ•˜๋ฏ€๋กœ ๋™๋“ฑ๋น„๊ต ์—ฐ์‚ฐ์ž==์™€ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™๋‹ค.

    String์˜ equals() ๋Š” String ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋“œ ๋œ ๋ฉ”์„œ๋“œ๋กœ ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๋ฌธ์ž์—ด ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ฐ˜๋ฉด ์ด ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด ์ž์‹ ์˜ ์ฐธ์กฐ๊ฐ’๊ณผ ์ „๋‹ฌ์ธ์ž๋กœ ๋ฐ›๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

    equals์˜ ์‹ค์ œ ์ฝ”๋“œ

    public boolean equals(Object obj) {
        return (this == obj);
    }
    

    toString()

    ํด๋ž˜์Šค๋ช… + @ + ํ•ด์‹œ์ฝ”๋“œ๋ฅผ 16์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด ๋ฆฌํ„ดํ•œ๋‹ค.

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    

    notify(), notifyAll()

    ์ด ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋Œ€๊ธฐ์ค‘์—” ์“ฐ๋ ˆ๋“œ๋ฅผ ํ•˜๋‚˜ ํ˜น์€ ๋ชจ๋‘ ์žฌ๊ฐœํ•œ๋‹ค.

    finalize()

    ์ด ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ๋” ์ด์ƒ ์—†๋‹ค๊ณ  ํŒ๋‹จ๋  ๋•Œ(์ฆ‰, ์†Œ๋ฉธ๋  ๋•Œ) ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ

    getClass()

    Class ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์ด ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ์ฒด ์ž์‹ ์˜ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๊ฐ–๋Š”๋‹ค.

    hashCode()

    ๊ฐ์ฒด ์ž์‹ ์˜ ํ•ด์‹œ์ฝ”๋“œ ๋ฆฌํ„ด

    wait( [long timeout] [, int nanos] )

    ์“ฐ๋ ˆ๋“œ๋ฅผ ์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ๋‹ค. timeout์€ 10^-3์ดˆ, nanos๋Š” 10^-9์ดˆ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ „๋‹ฌ์ธ์ž๊ฐ€ ์—†์œผ๋ฉด notify(), notifyAll()์„ ํ˜ธ์ถœํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.