New()를 종종 사용하시나요?

C# 9에서부터 사용할 수 있는 new()는 목록 구조를 생성할 때 특히 유용합니다.

        public static Model CreateMockModel1()
        {
            return new()
            {
                Uuid = Guid.NewGuid(),
                Name = "MockModel1",
                Description = "MockModel1 Description",
                IsUntitled = true,
                Entities = new()
                {
                    new()
                    {
                        Uuid = Guid.NewGuid(),
                        LogicalName = "엔티티1",
                        PhygicalName = "Entity1",
                        Description = "Entity1 Description",
                        Attributes = new()
                        {
                            new OwnerEntityAttribute
                            {
                                Uuid = Guid.NewGuid(),
                                LogicalName = "아이디",
                                PhygicalName = "Id",
                                Description = "엔티티 아이디",
                                IsKey = true,
                                LogicalType = new() { Type = AttributeTypeKind.Number },
                                PhygicalType = new() { Type = AttributeTypeKind.Number }
                            }
                        }
                    }
                }
            };
        }
3개의 좋아요

.NET 5 하고 부턴 new()를 주로 사용하는데 저는 스스로의 룰이있어서 var 쓰던 시절에도 한줄 한줄마다 타입을 명시적으로 드러내자는 기준이 있어서 return 할 때는 타입을 명시하고 있습니다 ㅎㅎ

2개의 좋아요

예제로 보통 Type some = new(); 이렇게 설명한 곳이 많은데 이런 유형은 제가 좋아하지 않다보니 쓰지 않고 있었습니다.

그런데 예시로 들어준 상황은 이번에 새롭게 알게됐는데 꽤 유용할 것 같아요!
좋은 예시 소개 감사합니다 :slight_smile:

2개의 좋아요

@dimohy 비슷하게 저도 적극 사용중입니다 :smile:
그리고 생성자 길이가 보통 길기때문에 코드도 깔끔해지고 좋은 것 같아요!

1개의 좋아요

네 이것말고도 record도 적절히 사용하면 코드가 깔끔해지는데요, C#10 에서는 record struct도 추가될 예정이니 record 사용도 좀 더 적극적으로 높아지리라 기대됩니다.

2개의 좋아요

저는 new() 키워드를 그리 선호하지 않는 편입니다. 코드만 읽어도 코드의 동작을 이해할 수 있어야 한다는 점에서, 변수에 new() 키워드를 사용하면 타입이 무엇인지 짐작하기가 어렵습니다. 해당 클래스에 익숙하지 않으면, 해당 변수의 타입을 IDE 에서 마우스를 올려 타입을 확인해야 합니다. 타입의 이름만으로도 코드에 대한 정보를 얻을 수 있기 때문에 new 키워드로 타입명을 숨기는게, 코드의 이해를 방해하는건 아닐지 의문이 듭니다.

예를 들어, @dimohy 님의 코드를 pull request 로 마주쳤고 코드를 리뷰해야 된다면 IDE 의 도움을 받을 수 없으므로, Model 클래스의 Entities 속성의 타입을 저로서는 IList 인지 ObservableCollection 인지 추측만 가능합니다.

반면 new() 키워드가 유용할 때는 다른 방법으로 타입을 명확하게 판단이 가능한 경우입니다.
예를 들어, 아래와 같은 경우는 코드만으로 타입을 확인할 수 있기 때문에 굳이 타입을 두번 입력할 필요가 없어 new 키워드가 유용하다고 생각합니다.

private static CustomClass _instance = new(parameter1, parameter2);
4개의 좋아요

네. 김예건 님의 의견에 동의합니다. 협업을 고려했을 때는 좀 더 보수적으로 사용해야 하고, 생산성 측면의 경우 특히 목록으루만들어야 하루경우에는 저는 긍정적인 편입니다.

3개의 좋아요

그리고 긍정적인 면에서 보면
이로인해 기존과는 다른 새로운 코드 스타일이 생기는 것도 좋은 시도라 생각해요. :smile:

source.Forech(x=>x.Command = new RelayCommand(MenuSelected));

아직 주위에 보면 Linq도 여러가지 이유로 사용하지 않는 곳이 종종 보이더라고요.

여러가지 환경적인 상황을 고려해서 발전시켜 나가면 좋을 것 같습니다!

2개의 좋아요

또 이럴 때 좀 부담이었는데 좋지 않나요? :smile:

public Dictionary<string, object> Dictionaries { get; set; } = new();
5개의 좋아요

제가 쓰는 기준이 바로 이런식으로 한줄 안에 해당 타입이 명시적일 경우입니다. 이렇게만 써도 꽤 자주 쓰게되더라구요. 같은 맥락으로 var도 이런식으로 사용합니다.

4개의 좋아요

이렇게 쓰는것도 재미있네요. :smile:

private ObservableCollection<UserModel> GetUsers()
{
    try
    {
        return new(source);
    }
    catch
    {
        return new();
    }
}
1개의 좋아요

네. 프로그래머들 마다 new() 를 어디다 어떻게 사용할지에 대한 이견은 있는것 같은데요, 최소한의 지침 가령, IntelliSense를 이용하지 않더라도 코드 가독성에 문제가 없는가? 정도만 준수하면, 코딩 리듬?에 큰 도움이 된다고 전 생각합니다.

가령, var 사용도 new() 못지않게 초기 말들이 있었는데요, 아마도 프로그래머가 상세하게 알아야하는 면추상적으로 알아도 되는 면을 모두 가져야 하는 포지션이여서가 아닐까 생각해보네요

2개의 좋아요