DTO vs VO

  • DTO, VO๋ฅผ ํ˜ผ๋™ํ•ด์„œ ์“ฐ๊ฒŒ ๋œ ์›์ธ์€ core J2EE ๊ด€๋ จ ์ฑ…์—์„œ VO๋ผ๊ณ  ํ–ˆ๋‹ค๊ฐ€ TO๋กœ ์ •์ •ํ•˜๊ฒŒ ๋จ. ์ดํ›„ D ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ™์—ฌ DTO๋ผ๊ณ  ์นญํ•˜๊ฒŒ ๋จ

  • DTO : ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์šฉ, VO : ๊ฐ’ ์ž์ฒด ํ‘œํ˜„์šฉ

  • DTO - Data Transfer Object

    • ๊ณ„์ธต๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด ex) Controller โ†” Service ๋ ˆ์ด์–ด ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

    • ์˜ค์ง getter, setter๋งŒ ๊ฐ€์ง€๊ณ  ๋‹ค๋ฅธ ๋กœ์ง์€ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.

    • setter๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ƒ์„ฑ์ž๋กœ ๊ฐ์ฒด ์ดˆ๊ธฐํ™”๋ฅผ ๊ฐ•์ œํ•˜๋ฉด ์ „๋‹ฌ ๊ณผ์ • ์ค‘์—์„œ์˜ ๋ฐ์ดํ„ฐ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋”์šฑ ์•ˆ์ •์ ์ด๋‹ค. (setter ์กด์žฌ ์‹œ์—๋Š” ๊ฐ€๋ณ€์ , ์—†์œผ๋ฉด ๋ถˆ๋ณ€)

    • ์†์„ฑ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™๋‹ค๊ณ  ํ•ด์„œ ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค

  • Entity ํด๋ž˜์Šค

    • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์™€ ๋งคํ•‘๋˜์–ด ์žˆ๋Š” ํ•ต์‹ฌ์ ์ธ ํด๋ž˜์Šค. ์ด ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜๊ณ  ์Šคํ‚ค๋งˆ๊ฐ€ ๋ณ€๊ฒฝ๋จ.

    • ๋งŒ์•ฝ ์ด๋ฅผ ์ด์šฉํ•ด์„œ ์š”์ฒญ, ์‘๋‹ต๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ํด๋ž˜์Šค๋กœ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋ทฐ๊ฐ€ ์ˆ˜์ •๋  ๋•Œ๋งˆ๋‹ค ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋„ ๋ณ€๊ฒฝํ•ด์•ผ๋จ. ์—”ํ‹ฐํ‹ฐ์™€ ์—ฐ๊ด€๋œ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋Œ€์‹  DTO๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

    • ์‘๋‹ต๊ฐ’์œผ๋กœ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์™€ ๋ทฐ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ด๊ธด DTO๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • VO - Value Object

    • ๊ฐ’ ๊ทธ ์ž์ฒด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ์ฒด ex) ๋ˆ ์ง€ํ์—๋Š” ๊ฐ๊ฐ์˜ ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ์ง€๋งŒ ๊ฐ™์€ ๊ฐ€์น˜๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ’์œผ๋กœ๋งŒ ๋น„๊ต๋œ๋‹ค. (๊ฐ์ฒด์˜ hashcode๊ฐ€ ๋‹ค๋ฅด์ง€๋งŒ, ๋‚ด๋ถ€์— ๋“ค์–ด์žˆ๋Š” ํ•„๋“œ๊ฐ’์€ ๊ฐ™์„ ์ˆ˜ ์žˆ๋‹ค)

    • ์†์„ฑ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ๊ฐ์ฒด์ด๋‹ค.

  • HashXXX(HashSet, HashMap, Hashtable)์˜ ๋™๋“ฑ๋น„๊ต ๋ฐฉ์‹

    Screenshot 2023-02-06 at 10.56.21 PM.png
    • hashCode() ๊ฐ’๊ณผ equals() ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™์•„์•ผ ๋™๋“ฑ ๊ฐ์ฒด์ด๋ฏ€๋กœ ์™„์ „ํ•œ VO๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ๋งŒ ๋น„๊ตํ•˜๋„๋ก equals(), hashCode()๋ฅผ ๋ชจ๋‘ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

public class Money {
	private final int value;

	public Money(int value) {
		this.value = value;
	}
 
	public int getHalfValue() { // VO๋Š” getter setter ์ด์™ธ์˜ ๋กœ์ง์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค
		return value / 2;
	}

	@Override
	public boolean equals(Object o) {
		if (this == o) {
			return true;
		}
		if (!(o instanceof Money)) {
			return false;
		}
		Money money = (Money) o;
		return value == money.value
	}

	@Override
	public int hashCode() {
		return Objects.hash(value);
	}

}

[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐Ÿ“์ธ๋น„์˜ DTO vs VO

Last updated