본 글은 SOPT 30기 iOS파트 1차 세미나 과제를 하고 받은 코드 리뷰들을 다시 점검해 보는 리뷰입니다.

1. viewDidLoad() 내 직접적인 코드 작성 대신 함수 사용

<기존 코드>

 override func viewDidLoad() {
        super.viewDidLoad()

        userNameLabel.text = userName
        userNameLabel.font = .boldSystemFont(ofSize: 20)
        subMessage.sizeToFit()

        welcomeMessage1.text = "instagram에"
        welcomeMessage1.font = .boldSystemFont(ofSize: 20)
        welcomeMessage2.text = "오신 것을 환영합니다."
        welcomeMessage2.font = .boldSystemFont(ofSize: 20)

        subMessage.text = "언제든지 연락처 정보와 사용자 이름을 변경할 수 있습니다."
        subMessage.sizeToFit()

        signInDoneUIButton.backgroundColor = .systemBlue
        signInDoneUIButton.setTitle("완료하기", for: .normal)
        signInDoneUIButton.setTitleColor(.white, for: .normal)
        ...

기존에 위 코드처럼 view의 생명주기 함수인 viewDidLoad 함수 내에 필요한 코드들을 직접적으로 작성했다.

그러나 이는 코드들이 기능별로 분류되지 않아 보기 지저분하다.

< 수정 코드>

override func viewDidLoad() {
        super.viewDidLoad()

        configureUI()
        setMessageLabelData()  
        // ..
}

private func configureUI() {
      userNameLabel.font = .boldSystemFont(ofSize: 20)
     // ...
}

private func setMessageLabelData() {
      welcomeMessage1.text = "instagram에"
      // ..
  
}

때문에 위 코드처럼 기존 코드들을 함수로 각각 구현하고 viewDidLoad에는 함수만 작성해주는 것이 훨씬 깔끔하고 나중에 리뷰하기도 좋을것 같다.

 

2. 더 이상 상속되지 않는 클래스에 대한 final 키워드 사용

<기존 코드>

class SignInViewController: UIViewController {

Swift에서는 클래스를 호출할때 Dynamic한 방법을 사용하는데 이는 성능을 떨어뜨리는 요소 중 하나다.

때문에 더 이상 상속되지 않는 클래스에 final 키워드를 붙여줌으로써 Dynamic -> Static한 방식으로 바꿔주어 성능을 향상 시킨다.

관련 자료: Swift Inheritance

< 수정 코드>

final class SignInViewController: UIViewController {

3. UIButton의 isSelected 프로퍼티, toggle(), 삼항연산자 사용

<기존 코드>

 @IBAction func eyeIconButton(_ sender: Any) {
        if(eyeIcon == true) {
            passwordTextField.isSecureTextEntry = false
            eyeIconUIButton.setImage(UIImage(named: "password shown eye icon"), for: .normal)

        }else {
            passwordTextField.isSecureTextEntry = true
            eyeIconUIButton.setImage(UIImage(named: "password hidden eye icon"), for: .normal)
        }

        eyeIcon = !eyeIcon
    }

1. UIButton 버튼이 선택된 상태임을 감지 할 수 있는 isSelected라는 인스턴스 프로퍼티가 있다. 

해당 버튼을 선택시 true , 선택 해제시 false를 리턴하는 Bool타입으로 위의 코드를  아래와 같이 수정 할 수 있다.

< 수정 코드 1>

if sender.isSelected {
 // true 인 경우 코드 작성
} else {
// false 인 경우 코드 작성
}

 

2. 기존 코드에서 버튼이 눌릴때마다 eyeIcon이라는 변수의 Bool값을 변경 해주기 위해 eyeIcon = !eyeIcon이라는 코드로 작성을 했는데, .toggle이라는 코드를 통해 자동으로 bool값을 true <-> false로 변경 해줄 수 있다.

< 수정 코드 2>

...
eyeIcon.toggle()
...

3. 기존 코드의 if else 문 대신에 삼항 연산자를 통해 if문을 좀 더 깔끔하게 구현해 줄 수 있다. 

삼항 연산자 => ' 조건 ? true : false'

< 수정 코드 3>

passwordTextField.isSecureTextEntry = passwordCheckButton.isSelected ? false : true
복사했습니다!