Post

Snapkit이란

Snapkit이란

SnapKit이란? – 오토레이아웃을 코드로 간결하게 작성하는 DSL

SnapKit은 iOS 개발에서 **Auto Layout을 코드로 쉽게 작성할 수 있게 해주는 DSL(Domain Specific Language)**이다. 복잡한 NSLayoutConstraint 코드를 Swift 문법에 맞게 간결하게 표현할 수 있어 가독성생산성을 크게 향상시켜준다.


왜 SnapKit을 쓰는가?

기존의 Auto Layout 코드 방식은 다음처럼 매우 장황하다.

1
2
3
4
5
NSLayoutConstraint.activate([
    view.topAnchor.constraint(equalTo: superview.topAnchor, constant: 20),
    view.leadingAnchor.constraint(equalTo: superview.leadingAnchor, constant: 20),
    ...
])

SnapKit을 사용하면 다음처럼 단순화된다.

1
2
3
4
view.snp.makeConstraints {
    $0.top.equalToSuperview().offset(20)
    $0.leading.equalToSuperview().offset(20)
}

주요 특징

  • NSLayoutConstraint 기반 위에 얹힌 Swift DSL
  • 가독성 좋고 간결한 문법
  • 체이닝 문법 지원
  • UIView 외에도 UILayoutGuide, SafeArea, Margins 등 지원
  • 의존성 주입 없이 바로 사용 가능

기본 문법

1. 기본 제약 설정

1
2
3
4
5
view.snp.makeConstraints {
    $0.top.equalToSuperview()
    $0.left.equalToSuperview().offset(16)
    $0.height.equalTo(100)
}

2. 다른 뷰와의 제약

1
2
3
4
label.snp.makeConstraints {
    $0.top.equalTo(imageView.snp.bottom).offset(8)
    $0.centerX.equalTo(imageView)
}

3. 업데이트 / 재설정

1
2
3
4
5
6
7
view.snp.updateConstraints {
    $0.height.equalTo(150)
}

view.snp.remakeConstraints {
    $0.edges.equalToSuperview()
}

설치 방법

CocoaPods

1
pod 'SnapKit'

Swift Package Manager

1
2
3
dependencies: [
    .package(url: "https://github.com/SnapKit/SnapKit.git", from: "5.0.0")
]

언제 쓰면 좋은가?

  • Storyboard 없이 코드로 UI를 구성할 때
  • 동적으로 뷰를 생성하거나 레이아웃을 변경해야 할 때
  • 빠르게 UI를 구현하고자 할 때
  • Auto Layout 제약 조건을 명시적으로 관리하고자 할 때

주의할 점

  • SnapKit은 결국 NSLayoutConstraint의 래퍼이기 때문에 레이아웃 관련 버그는 Auto Layout과 동일하게 발생할 수 있다.
  • 제약 조건 충돌이나 ambiguous layout 발생 시 디버깅 필요
  • 과도한 중첩 사용은 오히려 가독성을 해칠 수 있음

마무리

SnapKit은 코드 기반 UI 작성 시 가장 널리 쓰이는 레이아웃 도구 중 하나다. 특히 UIKit 환경에서 빠르게 레이아웃을 잡아야 하는 상황에 강력한 생산성을 발휘한다. SwiftUI의 선언적 UI와는 다르지만, UIKit을 쓰는 프로젝트에서는 여전히 강력한 선택지다.

This post is licensed under CC BY 4.0 by the author.