๐Ÿ”ญ
Ellery's study archive
Resume(์ˆ˜์ •์ค‘)GithubTistory
  • framework, library
    • Spring core
      • ์Šคํ”„๋ง ํŠธ๋ผ์ด์•ต๊ธ€ - POJO, IOC/DI, AOP, PSA
      • Servlet
    • Spring MVC
      • DispatcherServlet
      • Validation
    • Spring Boot
    • Spring Security
    • Spring Batch
    • Spring Webflux
    • JPA
    • JUnit, Spring Test
    • etc
      • Slf4j MDC(Mapped Diagnostic Context)
  • ETC, ๊ฐœ๋ฐœ ํŒ๋“ค
    • ๊ฐœ๋ฐœ ํŒ๋“ค
      • ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ init ์‹œ์— ํ•ด์•ผ๋  ๊ฒƒ๋“ค
      • vim ํ•œ๊ธ€ ๊นจ์งˆ ๋•Œ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹ ์ง€์ •
      • EC2 ssh connection ์‰ฝ๊ฒŒ ํ•˜๊ธฐ
      • ๋ฆฌ๋ˆ…์Šค ์ปค๋งจ๋“œ, netstats
      • Forkํ•œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ origin ์—…๋ฐ์ดํŠธ
      • git merge, rebase
      • Intellij ์ž์ฃผ ์“ฐ๋Š” ๊ธฐ๋Šฅ ๋‹จ์ถ•ํ‚ค
      • JSON handling
      • aws user-data.sh
    • Lombok annotation, ๊ถŒ์žฅ ๋ฐฉ์‹
    • DB ๋ชจ๋ธ๋ง ์‹œ์— ์ธ์กฐ ์‹๋ณ„์ž ์ •์˜ํ•˜๋Š” ์ผ€์ด์Šค
    • Redis pub/sub vs Apache kafka
  • Language
    • Java
      • ์ž๋ฐ” ๋ฒ„์ ผ๋ณ„ feature
      • JVM architecture
      • Garbage collection
      • Java String pool
      • java 8 Concurrent
      • Optional
      • Stream
      • Comparator, Comparator
      • Error, Exception
      • Java์˜ Call by value(pass by value)
      • Java ๋ณ€์ˆ˜ ๊ฐ„ ๊ฐ’ Swap ๋ฐฉ์‹ 5๊ฐ€์ง€
    • Javascript
      • ์ž์ฃผ ์“ฐ๋Š” ES6 ๋ฌธ๋ฒ• ์ •๋ฆฌ
      • ES6 module
      • ES6 proxy
      • scope, var closure ์ด์Šˆ, let, const
    • Python
      • @lru_cache
  • CS
    • OS
      • Process, Thread
      • CPU scheduling
      • sync vs async, blocking vs nonblocking
      • Memory segmentation
      • virtual memory
      • ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • Network
      • UDP
      • TCP
      • DNS
      • HTTP
      • web server, WAS
      • Proxy, Load balancer
      • web socket, WebRTC
      • gRPC
      • web secure
    • DB
      • MySQL
      • index
      • ์ •๊ทœํ™”
      • DB ํŠธ๋žœ์žญ์…˜, ๋™์‹œ์„ฑ ์ œ์–ด ๋ฌธ์ œ
      • ํด๋Ÿฌ์Šคํ„ฐ๋ง
      • ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜
      • ์ƒค๋”ฉ
    • Data Structure, Algorithm
      • AVL tree, Red black tree
      • B-tree, B*tree, B+tree
      • Hash
    • Design pattern
      • SOLID
      • ์ƒ์„ฑ ํŒจํ„ด
        • ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด
        • ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด
        • ๋นŒ๋” ํŒจํ„ด
        • Null ๊ฐ์ฒด ํŒจํ„ด
      • ๊ตฌ์กฐ ํŒจํ„ด
        • ํผ์‚ฌ๋“œ ํŒจํ„ด
        • ํ”„๋ก์‹œ ํŒจํ„ด
        • ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด
        • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด
      • ํ–‰์œ„ ํŒจํ„ด
        • ์ „๋žต ํŒจํ„ด
        • ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด
        • ์ƒํƒœ ํŒจํ„ด
        • ์˜ต์ €๋ฒ„ ํŒจํ„ด
  • ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ณ
    • Layered Architecture
    • ํด๋ฆฐ ์•„ํ‚คํ…์ณ
    • DDD
    • etc
      • DTO vs VO
  • ๊ฐœ๋ฐœ ์„œ์ ๋“ค
    • ์†ŒํŠธ์›์Šค ์•ค์†”๋กœ์ง€์—์„œ ์†Œ๊ฐœ๋˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์ƒํ™œ ์ฒด์กฐ ์›์น™ ๊ฐ„๋žต ์ •๋ฆฌ
    • ์—˜๋ ˆ๊ฐ•ํŠธ ์˜ค๋ธŒ์ ํŠธ - ์ƒˆ๋กœ์šด ๊ด€์ ์—์„œ ๋ฐ”๋ผ๋ณธ ๊ฐ์ฒด์ง€ํ–ฅ
    • ๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ณ
  • ํ…Œํฌ ๋ธ”๋กœ๊ทธ
Powered by GitBook
On this page
Edit on GitHub
  1. ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ณ
  2. etc

DTO vs VO

PreviousetcNext์†ŒํŠธ์›์Šค ์•ค์†”๋กœ์ง€์—์„œ ์†Œ๊ฐœ๋˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์ƒํ™œ ์ฒด์กฐ ์›์น™ ๊ฐ„๋žต ์ •๋ฆฌ

Last updated 2 years ago

  • 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
Domain, Entity, Value(Object)DOing
Logo