아삭아삭 iOS 개발

[코드리뷰] 2022.07.13 (1) 본문

카테고리 없음

[코드리뷰] 2022.07.13 (1)

바닐라머스크 2022. 7. 14. 01:33

 

SeSAC 멘토님에게 피드백 받은 사항들을 잊지 않기위해 정리합니다!

아래 내용들 외에도 추가 개선할 사항이 있다면 댓글로 알려주세요~ :)

 

1. 반복되는 사항이 있을 경우, 별도로 정의하여 해당 명칭으로 적용하기

2. for문의 바구니객체 표기방식 개선

3. 문자열로 감싸는 대상 검토 필요

4. 반복되는 함수 사용이 있을 경우, 해당 함수들을 별도로 묶어서 사용하기

5. textField의 액션 연결시 did end on exit 사용해보기 

6. 변수를 줄여서 쓸 방법 생각해보기


신조어 검색기 app

1. 반복되는 사항이 있을 경우, 별도로 정의하여 해당 명칭으로 적용하기

  • 아래 반복문내 조건문에서 randomkey.rawValue 값의 포함여부를 확인하고,
    그 결과에 따라서 randomKeys라는 상수에 담아주고 싶었다.
    → 이 때 반복되는 randomkey.rawValue를 data로 별도정의 후 적용했다.
        (또한 코드작성시 test용으로 적었다가 삭제하지 않았던 Print문들도 정리했다.)

<AS-IS>

while randomKeys.count < 4 {
    let randomkey = NewCoinedWord.allCases.randomElement()!
       print(randomkey)
            
    if !randomKeys.contains(randomkey.rawValue) {
        randomKeys.append(randomkey.rawValue)
    }
    print(randomKeys.sorted())
}

 

<TO-BE>

while randomKeys.count < 4 {
    let randomkey = NewCoinedWord.allCases.randomElement()!
    let data = randomkey.rawValue
            
    if !randomKeys.contains(data) {
        randomKeys.append(data)
    }
}

 

 


2. for문의 바구니객체 표기방식 개선

  • 0...3 과 같이 숫자로 정의해줄 경우, 반복대상 객체의 수가 반복됨에 따라 수정해주어야 하는 번거로움이 발생할 수 있다.
    → 그래서 (hashTags.count - 1) 로 수정해주었다.

3. 문자열로 감싸는 대상 검토 필요

  • 어제 TIL 마지막에 문자열 보간법 마음에 든다고 끄적거리자마자 문자열 보간법을 남발하는 코드들을 발견했다.ㅋㅋㅋ
    randomKeys[i]의 데이터 타입 자체가 String 이라서 굳이 "\()"로 감싸줄 필요가 없던거다!
    편하다고 막 쓰기전에 필요한지 생각을 하고 써야겠다!

<AS-IS>

// 버튼 4개에 반복하여 적용
for i in 0...3 {
    hashTags[i].setTitle("\(randomKeys[i])", for: .normal)
    hashTags[i].setTitleColor(.black, for: .normal)
    // 생략
}

 

<TO-BE>

// 버튼  hashTags.count개에 반복하여 적용
for i in 0...(hashTags.count - 1) {
    hashTags[i].setTitle(randomKeys[i], for: .normal)
    hashTags[i].setTitleColor(.black, for: .normal)
    // 생략
}

 


4. 반복되는 함수 사용이 있을 경우, 해당 함수들을 별도로 묶어서 사용하기

  • 버튼을 클릭할 때와 키보드에서 return키를 클릭할 때 동일한 액션들이 나와야 했다.
    1) 신조어의 의미를 검색(searchLogic())하고,
    2) 해시테그의 예제 키워드들을 랜덤으로 재표기(changeNewCoinedWordRandom()) 하는 액션
    → 그래서 두 함수를 실행하는 searchAndHashtag() 함수를 정의해서 사용해주었다.
        물론 지금 연습하는 코드에서는 함수 2개가 반복될 뿐이지만 추후 코드양이 많아지면 필요할 수 있다고 한다.

5. textField의 액션 연결시 did end on exit 사용해보기 

  • did end on exit으로 연결할 경우, 키보드 return 클릭시 자동으로 키보드가 내려간다.
    이전까지는 항상 touch up inside만 사용했었는데, 액션연결시 다양한 sent event에 대해 더 공부해볼 필요가 있겠다.

<AS-IS>

// MARK: - 검색버튼 클릭시
@IBAction func searchButtonTapped(_ sender: UIButton) {
    searchLogic()
    changeNewCoinedWordRandom()
}
    
// MARK: - 키보드 엔터키 클릭시
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    searchLogic()
    changeNewCoinedWordRandom()
    return true
}

func searchLogic() {...}

func changeNewCoinedWordRandom() {...}

<TO-BE>

   // MARK: - 검색버튼 클릭시 (touch up inside)
    @IBAction func searchButtonTapped(_ sender: UIButton) {
        searchAndHashtag()
        view.endEditing(true)
    }
    
    // MARK: - 키보드 엔터키 클릭시 (did end on exit)
    @IBAction func keyboardEnterTapped(_ sender: UITextField) {
        searchAndHashtag()
    }
    
    // MARK: - 검색 및 해시테그예제 랜덤표기 함수묶기
    func searchAndHashtag() {
        searchLogic()
        changeNewCoinedWordRandom()
    }

 

 


6. 변수를 줄여서 쓸 방법 생각해보기 

  • enum구문을 활용시 사용하려고 각각 변수를 모두 정의해주었다.
    → 변수 12개를 각각 생성했었는데, 배열과 allCases를 사용하여 한줄로 줄여주었다.
    ※ 아래 NewCoinedWord가 정의해준 열거형 데이터 타입
    ※ 단, allCases는 프로토콜 CaseIterable 채택 필요

<AS-IS>

var word1: NewCoinedWord = .윰차
var word2: NewCoinedWord = .알잘딱깔쎈
var word3: NewCoinedWord = .내또출
var word4: NewCoinedWord = .H워얼V
var word5: NewCoinedWord = .많관부
var word6: NewCoinedWord = .회의주의자
var word7: NewCoinedWord = .글설리
var word8: NewCoinedWord = .Whyrano
var word9: NewCoinedWord = .너뭐돼
var word10: NewCoinedWord = .당모치
var word11: NewCoinedWord = .돼지런하다
var word12: NewCoinedWord = .무물

<TO-BE>

var words: [NewCoinedWord] = NewCoinedWord.allCases

 

 

(전체코드 보러가기 : https://github.com/minhye9731/newlyCoinedWord)