Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 데이터를 넘길 때 struct 형태의 모델로 넘기면 좋은 이유 (데이터 넘기기) 본문

Refactoring (리펙토링)

[iOS - swift] 데이터를 넘길 때 struct 형태의 모델로 넘기면 좋은 이유 (데이터 넘기기)

jake-kim 2025. 4. 30. 13:03

데이터 넘기기

  • A -> B -> C로 msg 라는 String 형태의 데이터를 넘겨야하는 상황일 때 아래처럼 구현이 가능
    • 단, C에서만 msg데이터가 필요한 상태
class AViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func goToB(_ sender: UIButton) {
        let bVC = BViewController(msg: "Hello from A")
        navigationController?.pushViewController(bVC, animated: true)
    }
}

class BViewController: UIViewController {
    private let msg: String

    init(msg: String) {
        self.msg = msg
        super.init(nibName: nil, bundle: nil)
    }

    @IBAction func goToC(_ sender: UIButton) {
        let cVC = CViewController(msg: "Data modified in B: \(msg)")
        navigationController?.pushViewController(cVC, animated: true)
    }
}

class CViewController: UIViewController {
    private let msg: String

    init(msg: String) {
        self.msg = msg
        super.init(nibName: nil, bundle: nil)
    }
}
  • 만약 msg말고도 title이를 또 다른 String형태의 데이터를 넘겨야하는 경우?
  • 아래처럼 파라미터 하나를 추가할 수 있지만, 
let bVC = BViewController(msg: "Hello from A", title: "title")
  • struct 를 만들어서 이 값을 넘기는 방법도 존재
struct SomeModel {
    let msg: String
    let title: String
}

let bVC = BViewController(someModel: someModel)
  • 어떤 방법이 좋을까?

데이터 넘길때 struct로 만들어서 넘기기

  • struct로 만들어서 넘기면 struct를 만들어야하는 귀찮음이 있지만, `데이터`특성상 추후에 수정이 필요할 때 코드수정양이 적어지는 장점이 존재

ex)  C화면에서 age라는 필드가 필요한 상태

  • 만약 SomeModel을 사용하고 A -> B -> C 형태로 넘기는 상태라면, age라는 필드가 추가되었을때 A화면에서 age라는 필드에 값을 추가만 하면 구현이 완성
  • 만약 SomeModel로 넘기지 않는다면 B입장에서도 age필드를 별도로 추가해야하는 상태
    • 여기서 B는 데이터를 전달하는 전달자 역할을 하는데 struct를 사용하지 않는다면 전달자에게도 수정사항이 있기 때문에 추후에 코드를 변경해야하는 양이 많아지는 귀찮은 상황이 발생
// struct를 사용하지 않는 경우 전달자 B입장에서도 수정사항이 발생
let cVC = CViewController(msg: msg, title: title, age: age) // <- age 추가


struct SomeModel {
    let msg: String
    let title: String
    let age: Int
}
// struct를 사용하지 않는 경우 전달자 B입장에서도 수정사항 없이 그대로 사용
let cVC = CViewController(someModel: someModel)

결론

  • 전달자 역할을 하는 부분이 많다면 데이터를 넘길 때 struct로 만들어서 넘기면, 추후에 변경사항이 생길때 전달자 역할을 하는 부분들의 변경을 최소화 할 수 있음
Comments