게임공장
[Effective C#] 1. 지역변수를 선언할 때는 var를 사용하는 것이 낫다 본문
[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 와 내장된 숫자 타입을 같이 사용하는 것은 주의해야 한다
- 모르는 개념
- 동적 타이핑과 정적 타이핑
- 정적 타이핑
- 자료형을 컴파일 당시에 결정
- 컴파일 진행 시 자료형에 맞지 않은 값이 전달되면 컴파일 에러
- C, Java, C++, C#
- 동적 타이핑
- 자료형을 런타임 시 결정
- 런타임 진행 시 예상치 못한 에러가 발생할 수 있고 이를 발견하기 어려움
- Python, Ruby, JavaScript
- 출처: https://m.blog.naver.com/PostView.nhn?blogId=thnam91&logNo=220992328516&proxyReferer=https:%2F%2Fwww.google.com%2F
- 확장 메서드
- 미리 정의된 형식에 사용자 정의 함수를 추가시키는 작업
- 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();
}
}
- 파라미터에 “this <확장시킬 타입> 매개변수_이름"의 형태로 정의한다
- 출처: https://slaner.tistory.com/189
- 궁금한 점 / 나의 생각
- 타입 추론이고 뭐고 일단 var는 편리하다
- 하지만 주의해야할 사항들도 잊지말자
반응형