Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

게임공장

[Effective C#] 1. 지역변수를 선언할 때는 var를 사용하는 것이 낫다 본문

C#

[Effective C#] 1. 지역변수를 선언할 때는 var를 사용하는 것이 낫다

짱승_ 2021. 4. 17. 10:24

[Effective C#] 1. 지역변수를 선언할 때는 var를 사용하는 것이 낫다

 

 

  • 정확한 반환 타입을 알지 못한 채 올바르지 않은 타입을 명시적으로 지정하게 되면 득보다 실이 많다
    • ex) IQueryable 을 IEnumerable 로 명시했을 경우 성능적으로 저하된다
  • var를 사용하여 암시적으로 변수를 선언한 코드가 더 잘 읽힌다
    • 변수의 의미에 좀 더 집중할 수 있다
  • 개발자가 코드를 읽을 때 변수의 타입을 쉽사리 짐작할 수 없는 경우에는 명시적으로 타입을 기술하는 편이 낫다
  • 내장 숫자 타입(int, float, double 등)을 선언할 때는 명시적으로 선언하는 편이 낫다.
  • 가독성 문제를 유발할 수 있다
var result = someObject.DoSomeWork(anotherParameter);
  • 위 코드에서 result 가 어떤 타입인지 추론하기 힘들다
  • 개발자가 짐작한 타입과 컴파일러가 실제로 추론한 타입이 달라 문제가 발생할 수 있다
var f = GetMagicNumber();
var total = 100 * f / 6;
  • total 의 타입은 GetMagicNumber 가 반환하는 타입에 따라 달라진다
  • total 계산에 사용되는 수들은 모두 리터럴이므로 f 변수와 동일한 타입으로 변환시킨다
  • var 와 내장된 숫자 타입을 같이 사용하는 것은 주의해야 한다

 

  • 모르는 개념
    • 동적 타이핑과 정적 타이핑
    • 확장 메서드
      • 미리 정의된 형식에 사용자 정의 함수를 추가시키는 작업
      • ex) string 에 Print 라는 함수를 추가하려면 mscorlib 프로젝트를 수정 후 빌드하여야 하는데 확장 메서드를 사용하여 내 코드에서 함수를 추가할 수 있다
      • 정의는 정적으로, 사용은 인스턴스 메서드처럼 사용
      • 정적 클래스에서만 정의 가능
static class ExtensionMethods {
    public static void Print(this string s) {
        Console.WriteLine(s);
    }
}

class ExampleClass {
    public static void Main(string[] args) {
        string text = "Hello from ExtensionMethods";
        
        // 아래의 두 코드는 동일한 결과가 나옵니다.
        "Hello from ExtensionMethods".Print();
        text.Print();
    }
}

 

  • 궁금한 점 / 나의 생각
    • 타입 추론이고 뭐고 일단 var는 편리하다
    • 하지만 주의해야할 사항들도 잊지말자

 

반응형