Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- swiftUI
- clean architecture
- swift documentation
- tableView
- 클린 코드
- UITextView
- Protocol
- Refactoring
- Xcode
- rxswift
- ios
- RxCocoa
- 리펙토링
- Human interface guide
- HIG
- Observable
- uitableview
- 애니메이션
- MVVM
- 리팩토링
- UICollectionView
- ribs
- Clean Code
- collectionview
- uiscrollview
- combine
- scrollview
- SWIFT
- map
- 스위프트
Archives
- Today
- Total
김종권의 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로 만들어서 넘기면, 추후에 변경사항이 생길때 전달자 역할을 하는 부분들의 변경을 최소화 할 수 있음
'Refactoring (리펙토링)' 카테고리의 다른 글
Comments