
var를 사용하면 개발자 입장에서는 변수의 타입과 같이 지엽적인 부분보다 변수의 의미 파악에 더 집중할 수 있다.
컴파일러 관점에서 살펴본다면 개발자가 특정 객체의 타입을 명시적으로 지정하지 않더라도 객체 생성에 문제가 있을 경우 오류를 보고할 수 있다.
- var은 할당 연산자 오른쪽의 타입을 확인하여 왼쪽 변수의 타입을 결정하게 된다.
private void method() { var i = 0; // int var f = 0.0f // float }
- 개발자가 올바른 반환타입을 알지 못해 올바르지 못한 타입을 명시적으로 지정하여 사용되는 경우를 방지한다.
public IEnumerable<string> FindCustomersStartingWith1(string start) { IEnumerable<string> q = from c in db.Customers select c.ContactName; var q2 = q.Where(s => s.StartsWith(start)); return q2; }위 코드는 데이터베이스에서 쿼리가 수행되는 경우 LINQ 쿼리는 실제로 IQueryable<string> 타입을 반환하지만 IEnumerable<string>으로 선언해 버렸기 때문에 IQueryable<string>과 관련된 장점을 모두 잃게 된다.
- 숫자타입(int, float, double ...) 사용시 var은 주의해야 한다.
var f = GetMagicNumber(); var total = 100 * f / 6;total의 정확한 타입은 GetMagicNumber() 메서드의 반환타입에 의해 결정 된다. 이는 정밀도와 관련된 혼돈스러운 문제를 유발할 가능성이 있다.
- var를 사용할때 변수명을 통해 그 역할이 정확히 유추될 수 있도록 구현해야 한다.
var result = someObject.DoSomeWork(anotehrParameter); var HighestSellingProduct = someObject.DoSomeWork(anotherParameter);변수이름을 통해 Product타입임을 미루어 짐작할 수 있다.
타입을 명시적으로 드러내야 하는 경우가 아니라면 var를 사용하는 것이 좋다.
항상 그렇게 해야 한다는 것이 아니라 더 나을수 있다 정도로 이해해야 한다.
내장 숫자 타입(int, float, double 등)을 선언 할 때는 명시적으로 타입을 선언하는 편이 낫다.
올바르지 않게 타입을 명시하게 되면 컴파일러의 도움을 얻어 충분히 피해갈 수 있는 문제를 강제로 일으키는 꼴이 된다.