DevLog ๐Ÿ˜ถ

๋ถˆ๋ณ€๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ข‹์„๊นŒ? - Value Object vs Reference Object ๋ณธ๋ฌธ

โœ๏ธ/Java

๋ถˆ๋ณ€๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ข‹์„๊นŒ? - Value Object vs Reference Object

dolmeng2 2023. 4. 21. 10:44

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „

์ด๋ฒˆ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ ˆ๋ฒจ 1 ๋•Œ ํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋ง์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ํŽ˜์–ด์™€ '๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ์–ด๋– ๋ƒ๋Š” ์˜๊ฒฌ์„ ๋ฐ›์•˜๋‹ค.

๋‹น์‹œ ๋ ˆ๋ฒจ 1 ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด์˜ ์ •์˜์— ๋Œ€ํ•ด์„œ ์ž˜ ์•Œ์ง€ ๋ชปํ–ˆ์—ˆ๊ณ , ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์ ์ด ์žˆ๋‹ค๋Š” ๊ฑธ ๊ณต๋ถ€ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„ ์ƒ๊ฐ ์—†์ด ๊ทธ๋ ‡๊ฒŒ ์ง„ํ–‰ํ•˜๊ณ ์ž ํ–ˆ๋‹ค.

public class Car {

    private static final int CAR_FORWARD_NUMBER = 4;

    private final CarName name;
    private final CarPosition position;

    ...

    public Car move(final int power) {
        if (power >= CAR_FORWARD_NUMBER) {
            final CarPosition newPosition = position.addPosition();
            return new Car(name, newPosition);
        }
        return new Car(name, position);
    }

   ...
}

๊ทธ๋ž˜์„œ move์˜ ๋ฐ˜ํ™˜๊ฐ’๋„ ์ƒˆ๋กœ์šด Car๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. (Cars, CarName, CarPosition ๋ชจ๋‘ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ค์—ˆ์—ˆ๋‹ค.)

 

ํ•˜์ง€๋งŒ, ๋ฆฌ๋ทฐ์–ด๋‹˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์…จ๋‹ค.

Car๋ฅผ ์ˆ˜ํ•™์ ์ธ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ค๋ธŒ์ ํŠธ๋กœ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ–ˆ๋‹ค...?

์ฒ˜์Œ์—๋Š” ์ด ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๊ณ  ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด์„œ ๊ณ ์ƒํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ Value Object์™€ Reference Object์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ ์ด๊ฒŒ ์–ด๋–ค ๋ฆฌ๋ทฐ์ธ์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์ด์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ํฌ์ŠคํŒ…์„ ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 


โœ”๏ธ Value Object & Reference Object

ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€์žฅ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค๊ณผ ์ˆ˜ํ•™์ ์ธ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค์˜ ์กฐํ•ฉ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. - ์นธํŠธ ๋ฐฑ

์ง€๊ธˆ๋ถ€ํ„ฐ ์šฐ๋ฆฌ๋Š” '์ž๋™์ฐจ'๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•˜๊ณ ์ž ํ•œ๋‹ค.

์ž๋™์ฐจ๋ผ๋Š” ๊ฐ์ฒด๋Š” '์ด๋ฆ„', '์œ„์น˜'๋ผ๋Š” ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๊ฐ๊ฐ ์—ญ์‹œ CarName, CarPosition์ด๋ผ๋Š” ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด ๊ฝค๋‚˜ ๊ท€์—ฌ์šด ์ž๋™์ฐจ๋ฅผ ์ƒ์„ฑํ•˜์˜€๋‹ค. ํ•ด๋‹น ์ž๋™์ฐจ์˜ ์ด๋ฆ„ (CarName)์€ '์ ธ๋‹ˆ', ์œ„์น˜ (CarPosition)์€ 0์ด๋‹ค.

๋ฏธ์…˜์˜ ์š”๊ตฌ์‚ฌํ•ญ์ฒ˜๋Ÿผ ์ž๋™์ฐจ ๊ฒฝ์ฃผ๋ฅผ ์—ด๊ณ ์ž ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž๋™์ฐจ๊ฐ€ ์ถ”๊ฐ€๋  ๊ฒƒ์ด๋‹ค.

์ ธ๋‹ˆ, ์ ธ๋‹ˆB, ์ ธ๋‹ˆC๋ผ๋Š” ์ž๋™์ฐจ๊ฐ€ ์ƒ๊ฒผ๋‹ค.

์šฐ๋ฆฌ์˜ ์‹œ์Šคํ…œ์—์„œ '์ ธ๋‹ˆ'๋ผ๋Š” ์ž๋™์ฐจ๋Š” 3๊ฐœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ผ๊นŒ? ์•„๋‹ˆ๋‹ค.

'์ ธ๋‹ˆ'๋ผ๋Š” ์ž๋™์ฐจ๋Š” ์˜ค์ง ์šฐ๋ฆฌ์˜ ์‹œ์Šคํ…œ์—์„œ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋ฉฐ, ๋‚˜๋Š” ์ด๋Ÿฌํ•œ ๋„๋ฉ”์ธ์„ 'Car'๋ฅผ ํ†ตํ•ด ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์šฐ๋ฆฌ๋Š” ์ด์ œ๋ถ€ํ„ฐ ์ด๊ฒƒ์„ 'Reference Object'๋ผ๊ณ  ํ‘œํ˜„ํ•  ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์ž๋™์ฐจ '์ ธ๋‹ˆ'๋ฅผ ์›€์ง์—ฌ๋ณด์ž.

์ž๋™์ฐจ '์ ธ๋‹ˆ'์˜ ์œ„์น˜๋Š” ๋ณ€ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜๊ฐ’์ด 0์—์„œ 10์œผ๋กœ ์ฆ๊ฐ€ํ•˜์˜€๋‹ค.

ํ•˜์ง€๋งŒ ์œ„์น˜๊ฐ€ 10๋งŒํผ ์ด๋™ํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ๊ทธ ์ž๋™์ฐจ๋Š” '์ ธ๋‹ˆ'๋ผ๋Š” ์ž๋™์ฐจ๊ฐ€ ์•„๋‹ˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ผ๊นŒ?

 

์ž๋™์ฐจ๋กœ ๋น„์œ ํ•˜์ง€ ์•Š์•„๋„, ์‹ค์„ธ๊ณ„์—์„œ ์‚ฌ๋žŒ์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณด์ž.

๋‚ด ๋‚˜์ด๊ฐ€ 23์‚ด์—์„œ 24์‚ด์œผ๋กœ ๋ณ€ํ–ˆ๋”๋ผ๋„, ๋‚˜๋Š” ๊ทธ์ € ๋‚˜์ผ๋ฟ์ด๋‹ค.

๋‚ด๊ฐ€ 23์‚ด์ธ์ง€ 24์‚ด์ธ์ง€๋Š” ๋‚˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š”๋ฐ ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ๋„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์šฐ๋ฆฌ์˜ ์ž๋™์ฐจ ์‹œ์Šคํ…œ์—์„œ๋Š” ์œ„์น˜ ๊ฐ’์„ ๊ณ„์† ์ถ”์ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ์ € ์œ„์น˜๋ฅผ ํ‘œํ˜„ํ•  '๊ฐ’'์ผ๋ฟ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๊ฒƒ์„ 'Value Object'๋ผ๊ณ  ๋งํ•  ๊ฒƒ์ด๋‹ค.

 


โœ”๏ธ ๋™์ผ์„ฑ (Identity)์™€ ๋™๋“ฑ์„ฑ (Equality)

Reference Object์™€ Value Object์˜ ๋™์ผ์„ฑ๊ณผ ๋™๋“ฑ์„ฑ์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•ด๋ณด์ž.

 

์šฐ์„ , ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ผ์„ฑ์€ ๋‘ ๋ณ€์ˆ˜๊ฐ€ ์™„์ „ํžˆ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์™„์ „ํžˆ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๊ณง ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์™„์ „ํžˆ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ==์„ ํ†ตํ•ด์„œ ๋น„๊ต ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋ฐ˜๋ฉด์— ๋™๋“ฑ์„ฑ์˜ ๊ฒฝ์šฐ, ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š๋”๋ผ๋„, ๊ฐ ๊ฐ์ฒด์˜ ๋‚ด์šฉ์ด ๋™์ผํ•˜๋‹ค๋ฉด ๋™๋“ฑํ•˜๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋™๋“ฑ์„ฑ์€ equals๋ฅผ ํ†ตํ•ด์„œ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ์ฒด์ง€ํ–ฅ ์‹œ์Šคํ…œ์—์„œ ๊ฐ์ฒด์—๊ฒŒ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์‹๋ณ„์ž๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์กฐ๊ฑด์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์ž๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ์•ž์„œ์„œ Reference Object์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์—์„œ ์œ ์ผํ•˜๊ฒŒ ์กด์žฌํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค.

์œ ์ผํ•˜๊ฒŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ๋„ ์˜ค์ง 1๊ฐœ๋งŒ ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋น„๊ตํ•˜๋Š”, ๋™์ผ์„ฑ์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š”, ==์„ ํ†ตํ•ด ๋น„๊ต๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒ˜์Œ ์–ธ๊ธ‰ํ–ˆ๋˜ Car ๋„๋ฉ”์ธ์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•œ๋‹ค. '์ ธ๋‹ˆ' ์ž๋™์ฐจ๋Š” ์œ ์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Car๋Š” ๊ณง ==์„ ํ†ตํ•ด ๋น„๊ต๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ฐ˜๋ฉด์—, Value Object์˜ ๊ฒฝ์šฐ ์œ ์ผํ•˜๊ฒŒ ์กด์žฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

'์œ„์น˜ 0'์„ ๋‚˜ํƒ€๋‚ด๋Š” CarPosition๋งŒ ์ƒ๊ฐํ•˜๋”๋ผ๋„ '์ ธ๋‹ˆ', '์ ธ๋‹ˆB', '์ ธ๋‹ˆC'๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— CarPosition์˜ ๊ฒฝ์šฐ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ ธ ๋™๋“ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋™์ผํ•  ํ•„์š”๋Š” ์—†์–ด์ง„๋‹ค.

๊ทธ๋ž˜์„œ ==์„ ํ†ตํ•ด ๋น„๊ตํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ, equals๋ฅผ ์žฌ์ •์˜ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•œ๋‹ค.

 

์ž, ์ด์ œ ๋ฆฌ๋ทฐ๋ฅผ ๋‹ค์‹œ ๋ณด์ž.

Car๋ฅผ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ์ฃผ์‹œ๋‹ˆ, ์ด์   ๋™๋“ฑ์„ฑ์œผ๋กœ ๋น„๊ตํ•ด์•ผ ํ•˜๋Š” ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋ณด์ด๋„ค์š”.

๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์น˜๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด Car ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ Car๋Š” Reference Object๊ฐ€ ์•„๋‹Œ, Value Object์˜€๊ณ , ๋“ฑ์„ฑ์œผ๋กœ ๋น„๊ตํ•˜๋Š” ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค๊ณ  ๋ง์”€ํ•ด ์ฃผ์‹  ๊ฑฐ์˜€๋‹ค.

 


โœ”๏ธ ๋ถˆ๋ณ€ ๊ฐ์ฒด์™€ Value, Reference Object

Value Object๋Š” ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์™œ์ผ๊นŒ?

๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ผํ•œ ๊ฐ์ฒด์ž„์—๋„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋กœ ์ฐธ์กฐํ–ˆ์„ ๋•Œ, ๋‹ค๋ฅธ ๋ณ€์ˆ˜๊ฐ€ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฒ„๊ทธ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. (๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ - ๋ฒ„๊ทธ๋ฅผ ์žก๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.)

 

Value Object๋Š” ๋งŒ์•ฝ ๋‚ด๋ถ€์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด, ๊ธฐ์กด ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

์™ผ์ชฝ์ฒ˜๋Ÿผ ๋‚ด๋ถ€์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์˜ค๋ฅธ์ชฝ์ฒ˜๋Ÿผ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

๋‚ด๋ถ€์˜ ๊ฐ’์ด ๋ณ€ํ–ˆ์„ ๋•Œ ๊ตณ์ด ๊ธฐ์กด์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ• ๊นŒ? ์•„๋ฌด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

๊ตณ์ด ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฒ„๊ทธ (๋ณดํ†ต aliasing ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค)์˜ ์œ„ํ—˜์„ฑ์„ ์•ˆ๊ณ  ๊ฐˆ ๋งŒํผ ๋™์ผํ•˜๊ฒŒ ๊ฐ€์ง€๊ณ  ์žˆ์„ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

๋˜ํ•œ, ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด ์–ด์ฐจํ”ผ GC ๋Œ€์ƒ์ด ๋  ๊ฒƒ์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ดค์„ ๋•Œ๋„ ๋ถ€๋‹ด์ด ์—†๋Š” ๊ฒƒ์ด๋‹ค.

 

Value Object์˜ ๊ฒฝ์šฐ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต์  ๋ณ€์ˆ˜๋ฅผ ์ ‘๊ทผํ•  ๋•Œ ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ ์—†์ด ๋‚ด๋ถ€์˜ ๊ฐ’์ด ๋™์ผํ•  ๋•Œ๊นŒ์ง€๋งŒ ์œ ํšจํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜์˜ ์œ„ํ—˜์„ฑ๋„ ์—†๋‹ค.

 

ํ•˜์ง€๋งŒ, Reference Object๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆ๋ณ€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค.

'Car'๋Š” ์œ„์น˜๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. Car๋Š” ์›€์ง์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ณ„์†ํ•ด์„œ ์ƒํƒœ๋Š” ๋ณ€๊ฒฝ๋  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

๋˜ํ•œ, ์ž๋™์ฐจ '์ ธ๋‹ˆ'์— ๋Œ€ํ•ด ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ํ•ญ์ƒ ๋™์ผํ•œ '์ ธ๋‹ˆ' ๊ฐ์ฒด๊ฐ€ ์‹œ์Šคํ…œ์—์„œ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•œ๋‹ค.

์‹œ์Šคํ…œ์ด ํ•ญ์ƒ ๋™์ผํ•œ ์ž๋™์ฐจ ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ„์นญ ๋ฌธ์ œ๋Š” ํ”ผํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ ํ•ญ์ƒ Reference Object์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•ด์•ผ ํ•œ๋‹ค.

 

๋ฌผ๋ก ! Reference Object๋„ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งŒ๋“ค์–ด๋„ ์ข‹๋‹ค. (์š”๊ตฌ์‚ฌํ•ญ์— ๋‹ฌ๋ ค์žˆ๋Š” ๊ฒƒ์ด๋‹ค)

๋‹ค๋งŒ, ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ๊ณ„์†ํ•ด์„œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์— ํ•˜๋„๋ก ํ•˜์ž.

๋ฏธ์…˜ ์š”๊ตฌ์‚ฌํ•ญ์ฒ˜๋Ÿผ ์ž๋™์ฐจ '์ ธ๋‹ˆ'์˜ ์œ„์น˜๊ฐ€ ๊ณ„์† ๋ฐ”๋€๋‹ค๋ฉด, ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐœ๋…์ ์œผ๋กœ ์ด์ƒํ•˜๋‹ค. (์ผ๊ด€์„ฑ๋„ ๊นจ์ง„๋‹ค)


์‚ฌ์‹ค, ์ด๋Ÿผ์—๋„ ๋ถˆ๋ณ€ ๊ฐ์ฒด๊ฐ€ ๋” ์ข‹๋‹ค๋Š” ์˜๊ฒฌ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋ถˆ๋ณ€ ๊ฐ์ฒด๊ฐ€ ์ฃผ๋Š” ์žฅ์ ์ด ์ƒ๋‹นํžˆ ๋ช…ํ™•ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ, ๊ฐ์ฒด์˜ ์˜๋ฏธ๋ก ์  ์„ค๊ณ„๋กœ ๋ดค์„ ๋•Œ๋„ ๊ณผ์—ฐ ์ข‹์€์ง€... ํ˜„์‹ค์„ธ๊ณ„๋ฅผ ์ž˜ ๋ชจ๋ธ๋งํ•œ ๊ฒƒ์ธ๊ฐ€?์˜ ๊ด€์ ์ด๋ผ๋ฉด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค.

์•ž์œผ๋กœ ๋ฏธ์…˜ํ•˜๋ฉด์„œ ๋ฌด์ž‘์ • ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ค์ง€ ๋ง๊ณ , ํ•œ ๋ฒˆ ์ด๋Ÿฌํ•œ ์ ๋“ค์— ๋Œ€ํ•ด์„œ ์ž˜ ๋”ฐ์ ธ๋ด์•ผ๊ฒ ๋‹ค...

 

Reference Object๋ฅผ ์‹๋ณ„ํ•จ์œผ๋กœ์„œ ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ๊ฐœ๋…๋“ค์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์— ์ดˆ์ ์„ ๋งž์ถœ ์ˆ˜ ์žˆ๋‹ค.
Value Object๋ฅผ ์‹๋ณ„ํ•จ์œผ๋กœ์„œ ๋„๋ฉ”์ธ์˜ ์ผ๋ถ€์ง€๋งŒ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฐœ๋…๋“ค์„ ๊ฑธ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

Comments