VO

1. VO

VO(Value Object) ๋Š” ๊ฐ’์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด ๋กœ, ์ฃผ๋กœ ํŠน์ • ์†์„ฑ์„ ๊ทธ๋ฃนํ™”ํ•˜๊ฑฐ๋‚˜ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ์–ด์„œ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ. VO ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„๊ตํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š”๋ฐ ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ์Œ.


2. VO ์˜ ์ฃผ์š” ํŠน์ง•

1. ๋ถˆ๋ณ€์„ฑ

  • VO ๋Š” ์ƒ์„ฑ๋œ ์ดํ›„ ๊ทธ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„๋จ.

  • ์ด๋ฅผ ํ†ตํ•ด VO ๋Š” ์•ˆ์ „ํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ.

2. ๋™๋“ฑ์„ฑ

  • VO ์˜ ๋™๋“ฑ์„ฑ์€ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จ ๋จ.

    • ๋‘ VO ๊ฐ์ฒด์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ๋™์ผํ•œ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผ

    • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(์ฐธ์กฐ)๋‚˜ ๊ฐ์ฒด ID ๊ฐ€ ์•„๋‹ˆ๋ผ, VO ๊ฐ€ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ(๊ฐ’) ๋กœ ๋น„๊ต.

3. ๋„๋ฉ”์ธ ์˜๋ฏธ

  • VO ๋Š” ํŠน์ • ๋„๋ฉ”์ธ(์—…๋ฌด ์˜์—ญ) ์—์„œ ์ค‘์š”ํ•œ ๊ฐ’ ๋˜๋Š” ์†์„ฑ์„ ํ‘œํ˜„ํ•จ.

    • ์˜ˆ: ๋ˆ(money) , ์ขŒํ‘œ (Coordinates), ์ด๋ฆ„(Name), ์ฃผ์†Œ(Address)


3. VO์™€ POJO, DTO ๋น„๊ต

ํŠน์ง•

VO (Value Object)

POJO (Plain Old Java Object)

DTO (Data Transfer Object)

๋ชฉ์ 

๊ฐ’์„ ํ‘œํ˜„ํ•˜๊ณ  ๋™๋“ฑ์„ฑ ํŒ๋‹จ

์ž๋ฐ”์˜ ์ผ๋ฐ˜์ ์ธ ๊ฐ์ฒด

๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐ ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ ์ด๋™

๋ถˆ๋ณ€์„ฑ

๋ณด์žฅ

ํ•„์š”์— ๋”ฐ๋ผ ์„ ํƒ

ํ•„์š” ์—†์Œ

๋™๋“ฑ์„ฑ ๋น„๊ต

๊ฐ’ ๊ธฐ๋ฐ˜ ๋น„๊ต

์ฐธ์กฐ ๋˜๋Š” ๊ฐ’

์ฐธ์กฐ ๋˜๋Š” ๊ฐ’

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง

์—†์Œ

์žˆ์Œ

์—†์Œ

๊ณ„์ธต

๋„๋ฉ”์ธ ๊ณ„์ธต

๋„๋ฉ”์ธ ๊ณ„์ธต

๋ฐ์ดํ„ฐ ์ „์†ก ๊ณ„์ธต


4. VO ์˜ ์žฅ์ 

1. ๋ถˆ๋ณ€์„ฑ

  • ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋ฉฐ, ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€

2. ๊ฐ€๋…์„ฑ

  • ๋„๋ฉ”์ธ์—์„œ ์ค‘์š”ํ•œ ๊ฐ’์„ ์˜๋ฏธ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์บก์Аํ™”

3. ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ

  • ๋™์ผํ•œ ๋„๋ฉ”์ธ ๊ฐœ๋…์„ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

4. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

  • VO ์ƒ์„ฑ ์‹œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€


์˜ˆ์ œ

public class Coordinates {
    private final double latitude;
    private final double longitude;

    public Coordinates(double latitude, double longitude) {
        if (latitude < -90 || latitude > 90) {
            throw new IllegalArgumentException("Latitude must be between -90 and 90.");
        }
        if (longitude < -180 || longitude > 180) {
            throw new IllegalArgumentException("Longitude must be between -180 and 180.");
        }
        this.latitude = latitude;
        this.longitude = longitude;
    }

    public double getLatitude() {
        return latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Coordinates that = (Coordinates) o;
        return Double.compare(that.latitude, latitude) == 0 &&
                Double.compare(that.longitude, longitude) == 0;
    }

    @Override
    public int hashCode() {
        return Objects.hash(latitude, longitude);
    }

    @Override
    public String toString() {
        return "Coordinates{" +
                "latitude=" + latitude +
                ", longitude=" + longitude +
                '}';
    }
}

Last updated

Was this helpful?