SwiftUI에서 @State와 @Binding의 차이가 뭘까?

김하민·2024년 12월 5일
2

[Swift] 미분류

목록 보기
3/3

SwiftUI로 앱을 만들다 보면, 토글, 버튼 등의 변수 값 저장을 위해 @State를 사용합니다.

근데 또 보면 어쩔때는 @Binding을 사용하죠?
차이가 뭘까요?

코딩에 영어가 필수란 말을 들어보셨을 건데, 여기서 체감 가능합니다.
Binding은 묶음이라는 뜻입니다.

뭐에 묶였길래 묶음이라고 했을까요?

다른 State에 묶어서 동작하기 때문입니다.

코드로 예시를 한 번 볼까요?

위 코드는 showChildView라는 상태 속성(@State)을 이용해서 true일 경우 ChildView가 나오고,
false일 경우 나타나지 않습니다.

프리뷰를 보면 아래처럼 나옵니다:

클릭하면?

이렇게 됩니다.

어 근데 이러면 전 화면으로 어떻게 돌아가나요?
showChildView를 false로 바꿔주면 되겠죠?

어디 한번 해봅시다.

ChildView가 나타났을 때니, ChildView에서 showChildView를 false로 바꿔주는 버튼을 만들면 되겠죠?

네. 안됩니다. 같은 scope에 있지 않아서죠.

아니 그럼 영원히 닫지 못 하는 창을 계속 띄우고 있어야 하냐고요?

다행스럽게도 방법이 있습니다.

@Binding을 사용해서 ParentView에 있는 showChildView 상태 속성과 연결해 주면 됩니다.

@Binding을 추가해 주면 아래와 같이 뜨는데요,

ChildView()를 호출할 때 파라미터로 Binding을 요구하는 것을 볼 수 있습니다.

그럼 다시 ParentView()로 돌아가서, ChildView의 파라미터를 넣어주면?

와! 해결!

한줄 요약: @State에 묶어서 사용하는 것이 @Binding이다.

배움에 도움이 된 영상
https://www.youtube.com/watch?v=uiptHyyxF3Y

4개의 댓글

comment-user-thumbnail
2024년 12월 5일

UIKit 공부 해야된다는 말씀을 불과 어제 하신 거 같은데 어딜 도망가십니까

1개의 답글
comment-user-thumbnail
2024년 12월 12일

SwiftUI 공부를 하신다면, 선언형 프로그래밍과 SSOT, 뷰 렌더링 매커니즘에 대한 공부 추천드려요 ~

1개의 답글