반응형 프로그래밍/Effective C#15 Effective C# Item 2 : const보다는 readonly가 좋다 const보다는 readonly가 좋다C#은 컴파일타임 상수와 런타임 상수 두 유형의 상수를 지원한다. 이 둘은 서로 다르게 동작하기 때문에 적절하지 않은 상수 타입을 사용하면 상응하는 대가가 따른다. 컴파일타임 상수보다는 런타임 상수를 사용하라. 컴파일타임 상수가 약간 더 빠르긴 하지만 런타임 상수에 비해 유연성이 상당히 떨어진다. 컴파일타임 상수는 성능이 매우 중요하고 상수의 값이 절대로 바뀌지 않는 경우에만 제한적으로 사용하는 것이 좋다. 런타임 상수는 readonly 키워드를 사용하여 선언하고, 컴파일타임 상수는 const 키워드를 사용한다. // 컴파일 타임 상수public const int Millenium = 2000;// 런타임 상수public static readonly int ThisY.. 2023. 10. 24. Effective C# Item 4 : string.Format()을 보간 문자열로 대체하라 string.Format()을 보간 문자열로 대체하라 컴퓨터 프로그램을 최초로 작성하기 시작한 시절부터 개발자들은 컴퓨터에 저장된 정보를 사람이 읽을 수 있는 형태로 변경하는 코드를 꾸준히 개발해 왔다. C#에도 C에서 널리 사용되던 API를 그대로 수용하여 동일한 방법으로 문자열을 만들 수 있었다. 이제는 이러한 방법에서 벗어나 C# 6.0에 새롭게 도입된 문자열 보간 기능을 사용해 보자. 고전적인 문자열 포매팅 방식 대비 보간 문자열의 장점 코드 가독성이 대폭 향상되었다. 컴파일러 입장에서는 정적 타입 검사를 수행할 수 있기 때문에 실수를 미연에 방지할 수 있다. 기존 방식에 비해 문자열을 생성하기 위한 표현식이 더 풍부해졌다. 기존에 널리 사용되던 string.Format() 또한 문자열 변환 과정.. 2023. 10. 23. Effective C# Item 12 : 할당 구문보다 멤버 초기화 구문이 좋다 할당 구문보다 멤버 초기화 구문이 좋다 클래스를 만들다 보면 종종 둘 이상의 생성자를 작성해야 하는 경우가 있다. 그런데 생성자 내에서 멤버 변수들의 값을 초기화하도록 코드를 작성하다 보면 모든 생성자 내에서 멤버 변수들을 초기화해야 함에도 불구하고 자칫 초기화 코드를 누락하는 경우가 생긴다. 이러한 오류를 범하지 않으려면 생성자의 본문에서 멤버 변수에 값을 할당하기보다 멤버 초기화 구문(Member Initializer)을 사용하는 것이 좋다. 정적 변수와 인스턴스 변수 어느 쪽이라도 가능한 한 멤버 초기화 구문을 사용하는 것이 좋다. 멤버 변수를 선언할 때 객체를 함께 생성하는 것은 C#에서 매우 자연스러운 구문이므로 멤버 변수를 선언할 때는 항상 초기화 구문을 사용하자. public class My.. 2023. 10. 20. Effective C# Item 37 : 쿼리를 사용할 때는 즉시 평가보다 지연 평가가 낫다 쿼리를 사용할 때는 즉시 평가보다 지연 평가가 낫다 쿼리를 정의한다고 해서 결과 데이터나 시퀀스를 즉각적으로 얻어오는 것은 아니다. 실제로는 쿼리를 정의하는 작업은 수행 시에 어떤 과정으로 작업을 수행할지에 대한 절차만을 정의하는 것에 지나지 않는다. 일반적으로 이러한 방식이 더 효과적이며 실제로 쿼리의 결과를 이용하여 순회를 수행해야만 결과가 생성된다. 이를 지연 평가(lazy evaluation)라고 한다. 하지만 가끔은 이러한 동작 방식이 적절하지 않은 경우도 있다. 마치 일반 변수를 사용하는 것처럼 즉각적으로 그 값을 얻어와야 할 때도 있다. 이를 즉시 평가(eager evaluation)라고 한다. 지연 평가 (lazy evaluation) 즉시 평가 (eager evaluation) 쿼리를 작.. 2023. 10. 11. Effective C# Item 38 : 메서드보다 람다 표현식이 낫다 메서드보다 람다 표현식이 낫다 람다 표현식을 이용하여 코드를 작성하다보면 동일한 코드를 반복하는 경우가 자주 발생한다. 다음의 코드도 바로 그러한 예다. var allEmployees = FindAllEmployees(); // 20년 이상 근속자 var earlyFolks = from e in allEmployees where e.Classification == EmployeeType.Salary where e.YearsOfService >= 20 where e.MonthlySalary < 4000 select e; // 20년 미만 근속자 var newest = from e in allEmployees where e.Classification == EmployeeType.Salary where e.Y.. 2023. 10. 11. Effective C# Item 34 : 함수를 매개변수로 사용하여 결합도를 낮추라 함수를 매개변수로 사용하여 결합도를 낮추라 클래스 내의 메서드를 정의하기 위해서 베이스 클래스(Base class)나 인터페이스(Interface)를 정의하고 이렇게 정의된 내용을 기반으로 코딩을 한다. 혹은 함수를 매개변수로 취하는 방식을 활용한다면 기존의 컴포넌트나 라이브러리와 함께 사용해야 하는 코드를 개발할 때 상당히 큰 도움이 된다. 함수를 매개변수로 취한다는 것은 개발자가 더 이상 구상 타입(concreate type)을 작성할 필요가 없으며, 오히려 추상화된 정의를 통해 종속성을 다루는 것을 의미한다. 인터페이스와 클래스를 구분하는 것에는 반드시 익숙해져야 한다. 하지만 때로는 인터페이스를 정의하고 구현하는 것조차 성가신 경우가 있으며 전통적인 객체지향 기법과는 다른 기법을 사용하여 API를.. 2023. 9. 27. 이전 1 2 3 다음