C#

[C#] var 키워드

EveryDay.DevUp 2023. 11. 9. 00:40

1. var란?

- C# 3.0에서  지역 변수를 선언할 때 컴파일러가 빌드 시점에 타입을 추론할 수 있도록 사용하는 키워드

: 명시적으로 변수의 타입을 정의하지 않아도 var 키워드를 사용해서 해당 변수의 타입을 지정할 수 있음

: 초기화 문의 오른쪽에 있는 식에서 변수의 형식을 유추 

var count = 0;
Debug.Log("count type : " + count.GetType()); // count type : System.Int32
var result = false;
Debug.Log("result type : " + result.GetType()); // result type : System.Boolean

 

2. var 제한 사항

: 지역 변수가 동일한 문에서 선언 및 초기화 된 경우에만 var를 사용할 수 없음

var test1; // 초기화 식 없이 사용할 수 없음
var test2 = null; // null로 초기화할 수 없음
var test3 = () => count; // 람다식, 익명 함수, 메서드 그룹으로 초기화할 수 없음

: 클래스 범위의 필드에서 var 사용할 수 없음 

: var를 사용하여 선언된 변수는 초기화 식에 사용할 수 없음

int num = (num = 1);
var num2 = (num2 = 2); 
// Cannot use local variable 'num2' before it is declared
// Value assigned is not used in any execution path

: 동일한 문에서 여러 개의 암시적 형식 변수 초기화를 할 수 없음

int i, i2, i3;
var num, num2, num3 = 0;
// Implicitly-typed local variables cannot have multiple declarators

 

3. var 를 사용할 때의 장점

- 생성자 호출식에서 객체 인스터화에 형식 이름을 반복하지 않을 수 있음

List<int> candidateList = new List<int>();
// ====================================== 
var candidateList = new List<int>();

- 익명 타입 (anonymous type)을 지원하기 위해서 타입을 암시적으로 선언할 수 있음

var man = new { age = 10 };
Debug.Log("man age " + man.age); // man age 10

 

4. var 를 사용할 때의 단점

- var를 남발할 경우 코드의 가독성이 떨어지게 됨

- 내부적으로 이루어지는 자동 타입 변환 과정으로 인해 발견하기 어려운 버그를 만들 수 있음

var op1 = GetNumber();
var op2 = op1 / 10;
Debug.Log("op2 type : " + op2.GetType());

private float GetNumber() => 10f;
private int GetNumber() => 10;

// GetNumber()의 return type에 따라 op2의 Type이 결정됨
// 코드에서 op2의 type을 직관적으로 알기 어려움
// GetNumber()의 return type이 float이고, int op2 = op1 / 10 를 사용할 경우 에러가 발생
// 명시적으로 type을 사용하는 경우 var 보다 에러를 찾기 쉬움

 

5.  C# 코딩 규칙

- 할당의 오른쪽에서 변수의 형식이 명확한 경우 사용

- var를 사용할 경우, 변수 이름을 사용하여 변수의 타입을 지정하면 안됨

- dynamic 대신 var를 사용하면 안됨. dynamic과 var는 다름

- 루프의 루프 변수에 var를 사용

- LINQ 쿼리의 결과 시퀀스에 사용

 

6.  결론

- 대부분의 var 사용은 개발 편의성에 기초함.

: 익명 타입 예외

- 자료형의 계산이 민감한 경우에는 var보다는 명시적인 타입 선언이 좋음

: int, float, double 등

- C# 코딩 규칙에 따라 사용할 경우 큰 문제는 없음 

 

[참고]

https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed-local-variables

 

암시적 형식 지역 변수 - C# 프로그래밍 가이드 - C#

C#의 var 키워드는 초기화 문의 오른쪽에 있는 식에서 변수의 형식을 유추하도록 컴파일러에 지시합니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/coding-style/coding-conventions#implicitly-typed-local-variables

 

.NET 설명서 C# 코딩 규칙 - C#

C#에서 일반적으로 사용되는 코딩 규칙에 대해 알아봅니다. 코딩 규칙은 코드를 일관되게 표시하고 코드 복사, 변경 및 유지 관리를 용이하게 합니다. 이 문서에는 문서 리포지토리 코딩 지침도

learn.microsoft.com

https://www.yes24.com/Product/Goods/97314203

 

시작하세요! C# 9.0 프로그래밍 - 예스24

이 책의 목표는 확실하다. 여러분이 프로그램을 만들고자 할 때 사용하게 될 C# 프로그래밍 언어의 기초를 단단하게 다질 수 있게 하는 것이다. 이 책에서는 C# 언어의 최신 버전인 C# 9.0의 문법까

www.yes24.com

https://www.yes24.com/Product/Goods/55864866

 

이펙티브 C# - 예스24

더 나은 C# 코드를 작성하는 새로운 방법 50가지 C#은 전통적인 .NET 기반 개발에서 유니티 게임 엔진으로 개발 영역을 확대하면서 더욱 주목받고 있다. 또한 자마린으로 다양한 모바일 플랫폼에

www.yes24.com