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로 만들어서 넘기면, 추후에 변경사항이 생길때 전달자 역할을 하는 부분들의 변경을 최소화 할 수 있음