본문 바로가기
iOS, Swift 개발

Swift 하드 코딩, 날코딩 관리

by Nin J 2024. 11. 11.

1.  하드 코딩 란 무엇이냐?

안녕하십니까.

오늘은 가급적 사용하지 않아야 하지만 꼭 가끔씩 필요하게 사용될 하드코딩? 날코딩? 에 대해서 이야기하고자 합니다.

Swift에서 "하드코딩"이란 특정한 데이터나 값을 코드 내에 직접 입력하여 사용하는 방식으로, 변수나 상수 대신에 코드에 값을 고정시켜 사용하는 것을 의미합니다.

예를 들어, 다음과 같은 코드에서 문자열 "https://example.com/api/data"는 하드코딩된 URL입니다:

let url = "https://example.com/api/data"

2.  하드 코딩의 문제점

일반적으로 하드코딩된 값은 유지보수와 확장성이 떨어지며, 앱 동작을 변경해야 할 때 코드 수정이 필요해 문제가 될 수 있습니다.

여기서 가장 큰 문제는 하드코딩은 본인만 혹은 본인조차 고정 값을 입력한 잊어버려서 해당 특정 이슈를 발생시키고

유지보수를 너무 어렵게 하는 문제를 만들게 됩니다.

이 부분은 크게 3가지로 나누어지는데

  1. 유지보수성 저하: 값이 코드 곳곳에 하드코딩되어 있으면 변경 시 각 위치를 찾아 수정해야 합니다.
  2. 확장성 부족: 다른 환경에서 사용하거나 다른 값을 입력해야 할 때 유연하지 않습니다.
  3. 가독성 저하: 코드가 복잡하고 길어질수록 하드코딩된 값이 많을 경우 가독성을 떨어뜨립니다.

3.  하드코딩을 피하는 방법

하드 코딩을 피하려면 간단히 3가지로 생각하면 되는데

  • 상수와 변수 사용: 값이 여러 곳에서 사용된다면, 상수나 전역 변수를 사용합니다.
  • 구성 파일: plist, JSON, 혹은 UserDefaults를 이용해 값을 외부 파일에 저장하여 관리합니다.
  • 환경 변수: 개발, 테스트, 배포 환경에 따라 다른 설정을 사용하는 경우 환경 변수를 활용합니다.

예를 들어서 

이 값이 여러 곳에서 사용되고 변경 가능성이 있다면, URL을 하드코딩하기보다 다음과 같이 상수로 정의하는 것이 좋습니다.

struct APIConstants {
    static let baseURL = "https://example.com/api/"
}
let url = APIConstants.baseURL + "data"

4.  나만의 하드 코딩 페이지 만들기

하드코딩은 위에서 보여주듯 피해야 하지만 모든 Value를 상수와 변수로 쓸 수 없기 때문에 필요한 하드 코딩 부분도 존재한다 그래서

유지보수가 간단하게 할 수 있는 하드 코딩 페이지 컨트롤러를 만들어 관리합니다.

- 메시지 관리 : 하드 코딩을 할수 밖에 없는 메시지 모음

메시지 같은 부분은 여러가지 옵션에 따라 메시지가 고정된 형태 이기 때문에 메시지 관리 Struct을 생성하여 관리한다.

struct ToastMessage {
    
    static let low_os_version = "저사양 스마트폰 사용자를 위한 기능입니다.\n일부 기능이 제한될 수 있습니다."
    static let check_mail = "휴대전화에 등록된 메일 계정이 없습니다.\n[아이폰 설정 > 암호 및 계정]을 확인하십시오."
    
    static let connectionError = "처리 중 오류가 발생했습니다. 잠시 후, 다시 시도해주세요."
    static let trafficError = "접속이 지연되고 있습니다. 잠시 후 다시 시도해주세요."
    static let playerError = "불편을 드려 죄송합니다. 잠시 후 다시 이용해 주시기 바랍니다.\n(국내 외 지역에서는 서비스가 제한 될 수 있습니다.)"
    static let updateMessage = "새로운 기능 추가, 더 빠른 속도, 오류 해결 등이 포함된 최신 버전으로 업데이트 후 이용하실 수 있습니다. 이용자 여러분의 양해 부탁드립니다. (iOS 10 이상)"
    
}

- 고정 사이즈 관리 : 하드 코딩을 할 수밖에 없는 고정 사이즈 모음

struct DefineData {
    
    static let animationSec = 0.3

    static let mainInfoHeight = 40.0
    static let mainTabHeight = 48.0
    static let mainRadioHeight = 48.0

}

- 스키마 키워드 관리 : 하드 코딩을 할수 밖에 없는 스키마 키워드 모음

struct JSKey  {
    static let outlink = "outlink"
    static let inlink = "inlink"
    static let share = "share"
    static let webviewPlaying = "webviewPlaying"
    static let audio = "audio"
    static let replayVod = "replayVod"
    static let menu = "menu"
    static let login = "login"
    static let logout = "logout"

}

이런 식으로 하드코딩이 필요한 부분에서는 한페이에 각각 카테고리에 맞는 Struct 생성해서 관리하여 진행된다. 

사용 시에는 아래와 같이 해당 부분을 

- ToastMessage.playerError

- ToastMessage.confirm

let alertController = UIAlertController.init(title: "", message: ToastMessage.playerError, preferredStyle: .alert)
     alertController.addAction(UIAlertAction.init(title: ToastMessage.confirm, style: .default, handler: { (action) in
                // Completion block
 }))

이렇게 해당 값을 불러서 사용하고 수정사항이 있을 시 하드코딩 매니저 페이지에서 수정을 진행한다.

그리하면 하드코딩이 된 값은 하나의 페이지에 모두 포함됨으로

누구나 저 페이지에서 확인 후 수정이 가능하다.

오늘은 이렇게 하드코딩도 사용해야 하고 필요에 따라 지혜 롭게 사용하는 법을 확인하였다.