๐Ÿ’ป Develop

[Develop] DTO์™€ DAO, VO

JINiOS 2024. 1. 17. 10:30
728x90

์ตœ๊ทผ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ API๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ, ๋ฐฑ์—”๋“œ๋ถ„๊ป˜ ์งˆ๋ฌธํ•˜๊ธฐ ์ „์— ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ ๊นŒ์„œ ํ™•์ธํ•ด๋ณด๊ณ  ์งˆ๋ฌธํ•˜๊ณค ํ–ˆ์—ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๋Š” ๋ฐ DTO๋ž€ ๋‹จ์–ด๊ฐ€ ์ž๊พธ ๋ถ™์–ด์žˆ๊ธธ๋ž˜,, ๋ฌด์Šจ ์šฉ์–ด์ธ๊ฐ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค...!

 


 

1. DTO(Data Transfer Object)

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
  • ๋ชฉ์ : ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•œ ๊ฐ์ฒด. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•:
    • ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์ฒด ๋˜๋Š” ํด๋ž˜์Šค.
    • ์ฃผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ „์†ก๊ณผ ์ €์žฅ์— ๊ด€๋ จ๋œ ํ•„๋“œ๋“ค์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐ€์ง€์ง€ ์•Š๊ณ , ์ฃผ๋กœ getter์™€ setter๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. (Swift์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์†์„ฑ์„ ์„ ์–ธํ•  ๋•Œ getter์™€ setter๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋ฏ€๋กœ, ๋ณ„๋„์˜ ์ •์˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ํ•„์š”์— ๋”ฐ๋ผ getter์™€ setter๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)
    • JSON์ด๋‚˜ XML ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
struct UserDTO {
    var userId: Int
    var username: String
    var email: String
}

 

2.DAO(Data Access Object)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
  • ๋ชฉ์ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” ๋‹ค๋ฅธ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” ๊ฐ์ฒด. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์บก์Šํ™”ํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ์•Š๋„๋ก ํ•จ.
  • ํŠน์ง•:
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ๋กœ CRUD(Create, Read, Update, Delete) ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • DAO๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•  connection๊นŒ์ง€ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋กœ์ง๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋กœ์ง์„ ๊ฐ€์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์ด ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ DAO์—๊ฒŒ ๋˜์ง€๊ณ ,
      DAO๋Š” ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
struct UserDao {
    func getUserById(_ userId: Int) -> UserDTO? {
        // ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ UserDTO๋กœ ๋งคํ•‘ ํ›„ ๋ฐ˜ํ™˜
        return UserDTO(userId: userId, username: "John", email: "john@example.com")
    }

    func saveUser(_ userDTO: UserDTO) {
        // UserDTO๋ฅผ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ๋กœ์ง
        print("User saved: \(userDTO)")
    }

    func updateUser(_ userDTO: UserDTO) {
        // UserDTO๋ฅผ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฐพ์•„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋กœ์ง
        print("User updated: \(userDTO)")
    }

    func deleteUser(_ userId: Int) {
        // ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•ด๋‹น ์‚ฌ์šฉ์ž๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋กœ์ง
        print("User deleted with ID: \(userId)")
    }
}

 

 

3.VO(Value Object)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ๊ฐ’๋งŒ ์ €์žฅํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋‚˜ ํ˜•์‹์€ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ฐ’ ์ž์ฒด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ์ฒด์ด๋ฉฐ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ํ•œ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ๋‚ด๋ถ€ ๊ฐ’ ๋ณ€๊ฒฝ์ด ์•ˆ๋˜๋Š” ๊ณ ์ •๊ฐ’, ๋ถˆ๋ณ€์ ์ธ ๊ฐ’๋“ค์ž…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๊ณ , ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

 

๋‹ค์‹œ ๋ณด๋‹ˆ ํŒŒ์ด์–ด๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” iOS ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™๋‹ค..!

์ถ”ํ›„์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋„๋ฉ”์ธ ๋กœ์ง ๋“ฑ.. ๋ถ„๋ฆฌ๋ฅผ ์ž˜ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๋•Œ ๋‹ค์‹œ ๋Œ์•„์˜ค๊ฒ ๋‹ค โœˆ๏ธ

 

์‚ฌ์‹ค๊ณผ ๋‹ค๋ฅด๋‹ค๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” ๐Ÿ™‡๐Ÿป‍โ™€๏ธ

 

 

728x90