[TIL] Magic Number, Hard Coding - day 90

뭉크의 개발·2023년 11월 23일
0

Unity - Camp

목록 보기
58/70
post-thumbnail

🐧 들어가기 앞서

오늘은 매직 넘버 제거와 하드 코딩된 문자열을 보수하는 작업을 진행했다.

코드의 가독성과 유지보수성을 저해하는 요소가 되었다.

진행하고 있는 프로젝트에서 예시를 간단하게 들어보자.

하드 코딩

아래 코드는 UI 경로를 문자열로 하드 코딩했다. 이는 유지보수성과 재사용성을 저해하는 문제가 되었다.

  • 개선 전
public T OpenUI<T>() where T : Component
{
    string path = "UI"; // 하드코딩된 경로
    // ...  ...
}
  • 개선 후
private const string UiPath = "UI"; // UI 경로 상수 정의

public T OpenUI<T>() where T : Component
{
    string prefabName = typeof(T).Name;
    string path = uiDefaultPaths.TryGetValue(typeof(T), out var customPath) ? customPath : UiPath; // 사용자 지정 경로 또는 기본 경로 사용

    // ...  ...
}

UI 경로를 상수로 정의하고, 특정 메소드를 통해 UI 컴포넌트에 대한 사용자 지정 경롤르 설정할 수 있도록 수정했다.

매직 넘버

매직 넘버또한 코드를 제작한 사람 이외에 다른 사람이 코드를 볼 때 이해를 어렵게하는 요소다. 또한 유지보수를 복잡하게 만드는 요인 중 하나다.

아래 코드는 비디오 옵션에서 사용된 코드 중 일부다. 매직 넘버와 하드 코딩으로 인해 이해하기 어려운 점이 보였다.

수직 동기화에서 On/Off 옵션을 1과 0으로 지정해 한눈에 알아보기 힘들고,

FrameRates를 한 메소드 내부에 직접 구현해 숫자의 의미나, 전체적으로 사용할 수 없었다.

  • 개선 전
public void VSyncToggle(bool isOn)
{
    QualitySettings.vSyncCount = isOn ? 1 : 0; // 매직 넘버 사용
}

List<int> frameRates = new List<int> { 240, 144, 120, 60, 30}; // 하드 코딩
  • 개선 후
private const int VSyncOn = 1;
private const int VSyncOff = 0;

private static readonly List<int> FrameRates = new List<int> { 240, 144, 120, 60, 30};

public void VSyncToggle(bool isOn)
{
    QualitySettings.vSyncCount = isOn ? VSyncOn : VSyncOff; // 상수 사용
}

위와 같이 개선하면, 매직 넘버를 상수로 대체함으로써, 코드의 명확성이 높아졌고

유지보수 단계에서 발생할 수 있는 실수를 줄일 수 있게 됐다. 또한 하드코딩된 값을 일기 전용 리스트로 변경했다.

향후 프레임 레이트 값들을 한 곳에서 관리할 수 있게 되었다.


🐧 오늘 배운 것

중요성

  • 코드의 명확성: 하드코딩된 값과 매직 넘버를 제거하고 상수나 구성 파일을 사용하면 좋다. 코드의 의도와 적용 범위를 분명하게 만들어야 한다.

  • 유지보수의 용이성: 코드 수정 시 한 곳에서만 변경하면 전체에 반영되도록 해야한다. 장기적으로 시간과 노력을 크게 절약할 수 있다.

  • 가독성 향상: 코드 내의 숫자나 문자열이 직접적으로 의미를 전달하지 못할 때, 상수나 명명된 구성 요소를 사용해 가독성을 높여야한다.

  • 오류 감소: 일관된 값 관리를 통해 발생 가능한 오류를 줄여야한다.. 이는 특히 대규모 프로젝트나 팀 작업에서 중요하다.

후기

위와 같은 작업은 별거 아닌 것처럼 보일 수 있지만, 프로그래밍에서는 매우 중요하다.

잘 정의된 상수와 구성 요소를 사용함으로써 코드의 품질을 높이고, 유지보수의 복잡성을 줄이며, 장기적으로 프로젝트의 생산성을 높여준다.

위와 같은 유지보수의 질을 향상시킬 수 있는 작업을 중간 중간 진행하면 좋을 것 같다.

0개의 댓글