본문 바로가기
프로그래밍/C#

C# 표현식 본체 멤버와 암시적 연산자 함께 사용하기

by bantomak 2024. 12. 6.
반응형

표현식 본체 멤버(Expression-bodied member)

단일 표현식으로 메서드, 속성, 생성자 등을 정의하는 방법이다. => 문법을 사용하여 작성한다.

람다식을 정의하는 것과 동일한 형태로 간결하게 식으로 변환이 가능하다.

예제로 알아보는 표현식 본체 멤버 사용

// 메서드에서 하나의 Point 객체 리턴
public Point Move(int x, int y)
{
    return new Point(X+x, Y+y);
}

public Point Move(int x, int y) => new Point(X+x, Y+y); 

// 메서드에서 void 리턴
public void Print()
{
    Console.WriteLine(data);
}

public void Print() => Console.WriteLine(data);

// 속성에서 get 리턴
public string Name
{
    get 
    {
        return FirstName + " " + LastName;
    }
}

public string Name => FirstName + " " + LastName; 

// 인덱서에서 Customer 객체 리턴
public Customer this[int id]
{
    get
    {
        return db.FindCustomer(id);
    }
}

public Customer this[int id] => db.FindCustomer(id);

// 연산자 메서드 표현
public static Complex operator +(Complex a, Complex b)
{
    return a.Add(b);
}

public static Complex operator +(Complex a, Complex b) => a.Add(b);

암시적 연산자(Implicit Operator)

암시적 연산자는 타입 변환 연산자로서, 한 타입에서 다른 타입으로 변환할 때 명시적인 캐스팅 없이 대입만으로 타입을 변환시켜 준다.

예제로 알아보는 암시적 연산자 사용

// 명시적 변환 string -> MyData
public static MyData MyData1 = new MyData("test1");
// 암시적 변환 오버라이딩으로 문자열 바로 대입가능 string -> MyData
public static MyData MyData2 = "test2";

표현식 본체 멤버를 적용한 암시적 연산자 예제

생성자에도 표현식 본체 멤버를 적용할 수 있기 때문에 적용해서 한 줄짜리 간단한 표현식으로 변환이 가능하다.

public class MyData
{
    private string data;

    public MyData(string data)
    {
        this.data = data;
    }

    public static implicit operator MyData(string data)
    {
        return new MyData(data);
    }

    // 표현식 본문 멤버를 적용한 암시적 연산자
    public static implicit operator MyData(string data) => new MyData(data);
}

헷갈리는 get 프로퍼티에 표현식 본체 멤버와 암시적 연산자 단계별로 적용해 보기

public static class MyStaticData
{
    // get 프로퍼티에 표현식 본체 멤버와 암시적 연산자 단계별로 적용해보기
    public static MyData MyData1
    {
        get
        {
            return new MyData("test1");
        }
    }

    // 암시적 연산자 적용
    public static MyData MyData2
    {
        get
        {
            return "test2";
        }
    }
 
    // 표현식 본체 멤버 적용
    public static MyData MyData3
    {
        get => "test3";
    }

    // 최종적으로 간결해진 코드 모습
    public static MyData MyData4 => "test4";
}

public class MyData
{
    private string data;

    public MyData(string data)
    {
        this.data = data;
    }

    public static implicit operator MyData(string data)
    {
        return new MyData(data);
    }
}

같이 읽으면 좋은 글

 

C# 표현식 본체 멤버(Expression-bodied member)

표현식 본체 멤버(Expression-bodied member)C#의 속성이나 메서드는 보통 여러 문장(statement)들로 구성된 블록을 실행하게 된다. 하지만 속성이나 메서드의 Body 블록이 간단한 경우, 문 블럭(Statement Block)

jettstream.tistory.com

댓글