본문 바로가기

effectivec#10

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.