Taehyeon-Kim / Blog

오늘을 부재중으로 만들지 말자
17 stars 0 forks source link

[CS] DTO, VO #72

Open Taehyeon-Kim opened 2 years ago

Taehyeon-Kim commented 2 years ago

깃허브 프로젝트를 서칭하던 중 DTO라고 폴더링되어있는 부분을 보았다.

무슨 약자인가? 라는 생각에 검색을 하게 되었다.

간단하게 찾아보니 객체를 사용하는 프로그래밍에서 통용되는 개념(?!)이라고 한다.

DTO (Data Transfer Object)

번역하면 데이터 전송 객체 !

데이터를 전송할 때 사용하는 객체라는 데..

데이터의 gettersetter 만 있는 객체가 DTO란다.

음 뭐가 정말 엄청 복잡한 내용인지 알았는데

딱 위에 있는 설명이 전부다.

전송될 데이터를 한곳으로, 객체로 모은다는 개념? 인 거 같은데

https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html

검색을 해봤을 때는 이곳의 설명이 가장 와 닿았다.

정리를 해보면 우리가 서버와 통신을 할 때에 Request, Response시 사용하는 데이터 모델이라고 생각하면 어떨가 싶다. DB에서 받아온 데이터를 Service, Controller 등에서 사용하기 위한 객체라고 보면 될 것 같다.

getter, setter만 있는 객체가 DTO라고 설명되고 있는데, 실제로 우리는 setter를 사용하지는 않는다. 값을 특정 형태로 바꾸어서 사용하지 않기 때문이다. 임의로 값을 바꾸는 것이 아니라 값을 형태 그대로 받고, 그 값을 이용해서 어떠한 로직을 처리하게 된다.

+)

getter랑 setter가 뭔데?

한 번 봤던 것 같은데 ...

DUST

연산 프로퍼티 (Computed Property)에 대해서 공부해봅시다.

get, set에 대한 부분도 함께!

https://ios-development.tistory.com/559

읽다보니까 괜찮은 포스트라고 생각해서 가져와봤는데, 데이터 모델을 DTO 모델, Domain 모델로 나누어서 사용하는 것이 신기했다. API 통신 쪽에서는 DTO를 사용하고 있고, 마지막에 Completion으로 넘겨줄때만 Domain 모델을 사용하고 있다.

iOS Clean Architecture + MVVM 개념과 예제

DTO 객체를 사용하면 안되는 이유에 대한 포스트이다.

Why We Shouldn't Use Data Transfer Objects In Swift

VO (Value Object)

getter만 있는 객체를 VO라고 하는데, 즉 Read-Only Object이다.

흔히 예시를 UIColor 클래스로 드는데, 다들 한 번 쯤 봤을 것이라고 생각한다.

@available(iOS 2.0, *)
open class UIColor : NSObject, NSSecureCoding, NSCopying {

    // Initializers for creating colors
    public init(white: CGFloat, alpha: CGFloat)

    public init(hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat)

    public init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

    @available(iOS 10.0, *)
    public init(displayP3Red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

    public init(cgColor: CGColor)

    public init(patternImage image: UIImage)

    @available(iOS 5.0, *)
    public init(ciColor: CIColor)

    // Some convenience methods to create colors.  These colors will be as calibrated as possible.
    // These colors are cached.
    open class var black: UIColor { get } // 0.0 white

    open class var darkGray: UIColor { get } // 0.333 white

    open class var lightGray: UIColor { get } // 0.667 white

    open class var white: UIColor { get } // 1.0 white

    open class var gray: UIColor { get } // 0.5 white

        // ...
}
EunHee-Jeong commented 2 years ago

흥미롭군요...