본문 바로가기

야곰커리어캠프_TIL

20220209 / D3 / 하드코딩 지양하는 방법 간단히 알아보자

- Reference

- https://80000coding.oopy.io/f9e091ef-a2bd-4500-8e47-6e394cb66bab

 

(Swift) 확장성 있는 코드 만들기 연습 + 각 코드의 역할에 대해 생각하기

코드리뷰 멘토링을 받으면서, 내 코드에 아직 하드코딩으로 처리되어 있는 부분이 많다는 것을 느꼈다. 이번 기회에 오늘 피드백 받은 내용을 리팩토링 하면서 확장성있는 코드를 만드는 연습

80000coding.oopy.io

- https://tecoble.techcourse.co.kr/post/2020-05-07-avoid-hard-coding/

 

하드코딩을 피해라.

tecoble.techcourse.co.kr

# 랜덤 수를 생성하는 메서드를 구현하였는데 while문 조건에 [3] 숫자와 그 바로아래 줄 [1...9]이 하드코딩이 발생하였다고 하여 해결하는 방법에대해서 알아보았다.

 

[Before]

func generateRandomNumbers() -> Set<Int> {
    var randomNumbers: Set<Int> = []
    while randomNumbers.count < 3 {
        randomNumbers.insert(Int.random(in: 1...9))
    }
    return randomNumbers
}

[After]

func generateRandomNumbers(range: ClosedRange<Int> = 1...9, three: Int = 3) -> Set<Int> {
    var randomNumbers: Set<Int> = []
    while randomNumbers.count < three {
        randomNumbers.insert(Int.random(in: range))
    }
    return randomNumbers
}

 

확장성을 고려했을다면 three 대신 number나 count? 정도도 고민해볼 수 있을것같지만 저기능을 3이라는 기본값을 주어서 사용할 것ㄱ이기때문에 명확성을 주어 three로 지었다.

 

그러면 하드코딩이란 무엇이며 하드코딩을 왜 지양해야할까 ???

# 하드코딩이란?

프로그램의 소스 코드에서 데이터를 직접 입력해서 저장하는 것

 

# 하드코딩의 문제점이 무엇일까 ?

1. 의미를 파악하기가 어려워 가독성이 떨어진다.

 

위에 코드로 예시를 들면 [Before]while문 조건에 3이라는 숫자만 봐서는 어떤의미인지를 파악하기가 어렵다는 것이다. 

 

2. 유지 보수하기 어렵다.

작은 함수단위로는 이해하기 부족한 내용이지만 그럼에도 설명을 해보자면 [Before]예제에서 3이라는 독립적인 숫자를 넣어놓았는데 이 숫자는 재사용성이 많이 떨어진다. 만약에 3개라는 기준에서 10개로 바뀌고 그 변경된 수와 연관되있는 함수가 100개는 있따고 가정해보자. 그렇게되면 일일이 100개를 다 수정해줄 것은 아니지않나?

 

고로 Type 변수 또는 Enum등을 이용하여 연관된 값들을 따로 관리하는 방법등이 있을 수 있어 참고하자.