본문 바로가기

스폰지밥으로 공부하는 swift/swift 문법

CodeBaseUI에서 UI컴포넌트를 선언하는 다양한 방법들

728x90


iOS 개발에서는 UI 컴포넌트를 선언하고 설정하는 정말 다양한 방법이 있습니다. 이번 아티클에서는 4가지 방법들을 소개시켜드리려고 해요!

기본적인 선언과 설정

먼저 가장 기본적인 형태로 UIViewController 내부에 UILabel을 선언하고 viewDidLoad에서 속성을 지정할 수 있는데요,

class SomeViewController: UIViewController {  

    private let someLabel: UILabel = UILabel()  

    override func viewDidLoad() {  
        super.viewDidLoad()  

        someLabel.text = "블라블라"  
        someLabel.textColor = .blue  
    }  
}  

 

이 방식은 직관적이고 단순하지만 UI 컴포넌트가 많아질수록 viewDidLoad 메서드는 길고 복잡해지겠죠?

 

저는 개인적으로 잘 동작하는지 테스트하는 용도가 아니면 lifeCyce 메서드 안에서 직접구현은 피하고 별도의 메서드로 구현해서 실행시켜주는 방식을 사용하고 있습니다.

속성 설정을 위한 메서드 분리

말씀드렸다 시피 UI 설정을 아래 코드처럼 별도의 메서드로 분리하면 코드의 가독성을 높이고 viewDidLoad의 복잡성을 줄일 수 있어요!

class SomeViewController: UIViewController {  

    private let someLabel: UILabel = UILabel()  

    override func viewDidLoad() {  
        super.viewDidLoad()  

        setSomeLabelAttributes()  
    }  

    private func setSomeLabelAttributes() {  
        someLabel.text = "블라블라"  
        someLabel.textColor = .blue  
    }  
}  

이 방식은 각 UI 컴포넌트의 설정을 메서드 단위로 캡슐화해 코드를 더욱 구조적으로 관리할 수 있어요.

클로저를 활용한 선언과 초기 설정

메서드화를 하면서 메서드 만들고 실행시키는 과정이 좀 귀찮으시지 않으셨나요?

 

이렇게 클로저를 사용하면 UI 컴포넌트를 선언하면서 동시에 간편하게 초기 설정을 할 수 있어요 ㅎㅎ

class SomeViewController: UIViewController {  

    private let someLabel: UILabel = {  
        let label = UILabel()  
        label.text = "블라블라"  
        label.textColor = .blue  
        return label  
    }()  
}  

이 방식은 각 UI 컴포넌트가 자신의 설정을 내부적으로 가지고 있게 만들어 선언과 초기화를 한 곳에서 관리할 수 있는 장점이 있어요.

팩토리 메서드를 이용한 컴포넌트 생성

마지막으로 팩토리 메서드를 사용하여 UI 컴포넌트를 생성하는 방법입니다.

이렇게 메서드로 만들면 다른 뷰에서 같은 속성이 필요한 경우 메서드를 프로퍼티에 넣어서 생성할 수가 있어요!

class SomeViewController: UIViewController {  
    private let someLabel: UILabel = makeSomeLabel()  

    override func viewDidLoad() {  
        super.viewDidLoad()  
    }  

    private func makeSomeLabel() -> UILabel {  
        let label = UILabel()  
        label.text = "블라블라"  
        label.textColor = .blue  
        return label  
    }  
}

저는 자동완성 지원이 중단된 이후 then 라이브러리 사용을 잘 안하는데요, 코드의 가독성을 높여주기 때문에 사용하시는 분들도 많은 것 같습니다. 관심 있으시면 한번 확인해 보세요 :)

 

https://github.com/devxoul/Then