SnapKit은 iOS 개발에서 Auto Layout을 더 쉽게 사용할 수 있도록 도와주는 Swift 기반 라이브러리입니다.
기존의 NSLayoutConstraint 코드보다 더 직관적이고 간결한 문법으로 자동 레이아웃을 설정할 수 있습니다.
1. NSLayout
NSLayoutConstraint.activate([
boxView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
boxView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
boxView.widthAnchor.constraint(equalToConstant: 100),
boxView.heightAnchor.constraint(equalToConstant: 100)
2. SnapKit
boxView.snp.makeConstraints { make in
make.center.equalToSuperview()
make.width.height.equalTo(100)
이처럼 훨씬 간단한 문법으로 작성 가능
| 비교 항목 | SnapKit | NSLayoutConstraint |
|---|---|---|
| 코드 작성 방식 | 체이닝 방식으로 간결하게 작성 가능 | NSLayoutConstraint 객체를 개별적으로 추가해야 함 |
| 가독성 | 직관적이고 코드 길이가 짧음 | 코드가 길어지고 가독성이 낮음 |
| 설정 방식 | snp.makeConstraints {} 내부에서 한 번에 설정 | NSLayoutConstraint.activate([]) 배열에 추가 |
| 업데이트 방식 | updateConstraints로 일부 제약 변경 가능 | 변경할 제약을 찾고 다시 활성화해야 함 |
| 재설정 방식 | remakeConstraints로 기존 제약을 제거하고 새로 설정 | 기존 제약을 isActive = false로 비활성화 후 새로 추가 |
| 코드 유지보수 | 변경이 용이하고 유지보수하기 쉬움 | 코드가 길어질 경우 유지보수가 어려울 수 있음 |
| Apple 공식 지원 | ❌(서드파티 라이브러리) | ✅(Apple 공식 API) |
| SwiftUI 호환성 | SwiftUI에서는 사용 불가 | SwiftUI에서도 NSLayoutConstraint 사용 가능 |
SnapKit에서 자주 사용하는 메서드
| 메서드 | 설명 |
|---|---|
| makeConstraints | 처음 제약 조건을 설정 |
| updateConstraints | 기존 제약 조건 일부를 변경 |
| remakeConstraints | 기존 제약 조건을 완전히 삭제하고 다시 설정 |
| equalToSuperview() | 부모 뷰와 동일한 크기로 설정 |
| edges.equalToSuperview() | 상하좌우 모든 가장자리를 부모 뷰에 맞춤 |
| size.equalTo(CGSize(width: 100, height: 100)) | 크기 설정 |
| center.equalToSuperview() | 부모 뷰 기준으로 중앙 정렬 |
| top.equalTo(view.snp.bottom).offset(10) | 특정 뷰의 아래쪽에서 10pt 떨어지게 배치 |
코드 업데이트 기능
SnapKit에서 기존 제약 조건 변경 (updateConstraints)
boxView.snp.updateConstraints { make in
make.width.equalTo(200) // 기존 width 값을 200으로 변경
}
기존 제약 조건을 완전히 새로 설정 (remakeConstraints)
boxView.snp.remakeConstraints { make in
make.center.equalToSuperview()
make.size.equalTo(CGSize(width: 200, height: 200)) // 기존보다 더 큰 크기로 변경
}
SnapKit은 강력한 Auto Layout 도구이며 특히 코드 기반 UI 개발에서는 매우 유용합니다. 하지만 프로젝트의 성격과 개발 환경을 고려하여 도입 여부를 결정해야 합니다.
✅ 코드로 UI를 구성해야 하고, 유지보수가 중요한 경우 → SnapKit 추천
✅ Storyboard/XIB와 병행하거나, SwiftUI를 사용할 경우 → NSLayoutConstraint 유지
결국 SnapKit은 Auto Layout을 더 쉽고 직관적으로 사용할 수 있도록 도와주는 도구이며, 적절한 상황에서 활용하면 개발 속도를 높이고 코드의 가독성을 향상시킬 수 있습니다.