방프리

22.03.01 Chapter1. 데이터 타입 (Item 5) 본문

C#/More Effective C#

22.03.01 Chapter1. 데이터 타입 (Item 5)

방프리 2022. 3. 1. 17:43

Item 5 : 값 타입에서는 0이 유효한 상태가 되도록 설계하라

 

이 항목에 해당하는건 기본적인 데이터 타입 (int, float, double 등...)이 아닌 사용자가 정의하는 

enum에 초점이 맞춰져있다. 

열거형은 코드의 가독성을 높히는데 가장 큰 공헌을 한다. 그만큼 자주 쓰이는데 

자주 쓰이는만큼 이 타입을 어떻게 초기화할 것인지도 중요하다.

public enum Planet
{
    Murcury = 1,
    Venus = 2,
    Earth = 3,
    Mars = 4,
    Jupiter = 5,
    Saturn = 6,
    Uranus = 7,
    Neptune = 8,
}

Planet sphere = new Planet();
var anotherSphere = default(Planet);

sphere와 anotherSphere 두 변수 모두 0으로 초기화 되지만 Planet이라는 열거형에서는 0으로 선언된 값이 없기 때문에

유효하지 않다. 이는 초기화 시 혼동을 불러 일으킬 수 있기 때문에 기본값인 0은 무조건 포함시켜주는 것이 좋다.

public enum Planet
{
    None = 0,
    Murcury = 1,
    Venus = 2,
    Earth = 3,
    Mars = 4,
    Jupiter = 5,
    Saturn = 6,
    Uranus = 7,
    Neptune = 8,
}

Planet sphere = new Planet();
var anotherSphere = default(Planet);

이는 열거형의 FlagAttribute를 선언할 때에도 마찬가지이다. 0이라는 타입을 추가함으로써 플래그가 아무것도 설정되지

않았음을 쉽게 표기할 수도 있다.

이외에 string 또한 초기화 하기 조금 애매한데(null 또는 빈 문자열을 가질 수 있으므로), 

속성을 사용하여 왠만하면 null을 반환하는 것보단 빈 문자열을 반환하도록 유도한다.

public struct LogMessage
{
    private int ErrLevel;
    private string msg;
    public string Message
    {
        get => msg ?? string.Empty;
        set => msg = value;
    }
}

 

Comments