본문 바로가기

C#

(39)
LINQ의 지연 실행과 즉시 실행 아래의 LINQ를 사용한 코드를 살펴보자. IEnumerable query = names.Where(s=>s.Length s.Length
LINQ to Objects의 기초 LINQ Language Integrated Query 람다식과 마찬가지로 C# 3.0부터 도입된 기능 LINQ를 사용하면 객체, 데이터, XML과 같은 다양한 데이터를 표준화된 방법으로 처리할 수 있다. LINQ to Objects, 여러 객체를 입력데이터로 취급 LINQ to Objects의 간단한 예 LINQ를 사용하려면 먼저 using 지시자를 사용해 System.Linq 네임스페이스를 지정해야한다. IEnumerable results = names.Where(s=>s.Length s.Length s.Length s.Length s.ToLower()); 이처럼 메서드를 연결한는 것을 메서드 체인이라고 한다. Select 메서드는 각 요소에 대해 람다식에서 지정한 변환 처리를 수행한다. Select..
List<T> 클래스와 람다식의 조합 Exists 메서드 인수로 지정한 조건에 일치하는 요소가 존재하는지를 조사하고 true나 false를 반환한다. var exists = list.Exists(s=>s[0] == 'E'); Find 메서드 인수로 지정한 조건과 일치하는 요소를 검색하고 처음 발견된 요소를 반환. var name = list.Find(s=>s.Length == 5); FindIndex 메서드 발견된 요소의 인덱스를 반환. int index = list.FindIndex(s=>s == "Seoul"); FindAll 메서드 인수로 지정한 조건과 일치하는 모든 요소를 찾는다. var names = list.FindAll(s=>s.Length s.Contains("eo")); ForEach 메서드 인수로 지정한 처리 내용을 리스트..
람다식의 기초 메서드를 인수로 넘겨준다. public int Count(int[] numbers, Predicate judge) { int count = 0; foreach(var n in numbers) { if(judge(n) == true) count++; } return count; } 위와 같이 숫자를 세는 메서드를 만든다고 할 때 '짝수를 센다' 또는 '홀수를 센다' 등 다른 조건으로 숫자를 세도록 할 경우 --> if문 안에서 조건을 판단하는 메서드를 넘겨 받아서 여러 조건중 원하는 조건을 선택하면 편리할 것이다. 람다식은 이렇게 메서드를 인수로 넘겨받아 작성하는 코드를 간결하게 작성하도록 해준다. 위에서 정의한 Count 메서드를 호출하여 람다식을 적용, 짝수의 개수를 구하는 방법 var count = ..
구체적인 클래스가 아니고 인터페이스에 대해 프로그래밍하자. 메서드의 반환값이나 인수를 인터페이스로 지정하면 좋은 점 --> 프로그램을 수정하기 좋아진다. 예를 들어 구체적으로 리스트를 받아들이도록 구현했는데 추후 배열로도 받아들일 수 있도록 수정이 필요할 경우. 처음 프로그래밍할 때 인터페이스를 활용하여 IEnumerable를 받도록 구현했다면 배열도 IEnumerable를 구현한 것이기 때문에 따로 수정할 필요가 없다. 구체적인 형이 아니라 인터페이스를 대상으로 코드를 작성했다면 아무것도 수정하지 않아도 된다. 인터페이스는 공산품의 규격이다. A 클래스가 I 인터페이스를 구현했다면 A 객체는 I 형 변수에 대입될 수 있다. I 형 변수는 I 인터페이스가 정의하는 속성과 메서드를 사용할 수 있다. 속성이나 메서드가 실행할 수 있는 구체적인 동작은 I 인터페이스가..
형식적으로 인스턴스를 생성하는 것은 낭비이다. 클래스(참조형, Reference Type)를 선언함과 동시에 인스턴스를 new로 받을 수 있다. 이후 메서드에서 반환한 인스턴스를 참조변수에 대입한다. MyClass mc = new MyClass(); //여기서 생성한 인스턴스는 사용하지 않게 된다. mc = GetMyClass(); //반환값이 MyClass인 메서드 이렇게 될경우 처음 선언과 동시에 생성한 인스턴스는 프로그램 동작도중 한번도 사용하지 않아 메모리 낭비의 원인이 된다. 클래스를 이용하려면 new를 사용해야 한다는 표면적인 지식밖에 없다면 비효율적인 코드를 작성하기 쉽다. 문법적으로 틀리지 않았기 때문에 컴파일할 때 오류가 발생하지 않고 실제로 프로그램을 동작시켜도 의도한 대로 동작하기 때문에 수정이 필요한 코드라는 사실을 알기 힘들다..
C# 응용프로그램에서 상수를 정의할 때 static readonly를 사용하자 상수를 정의할 때 public으로 지정해서 다른 클래스가 접근할 수 있게 한 경우에는 const 대신 static readonly를 사용 (응용 프로그램을 개발할 때 버전 수정을 통해 변경될 가능성이 없는 고정값 숫자는 실제로 거의 없기 때문에 실질적으로는 const대신 전부 static readonly를 사용하는 것이 추천된다.) const 키워드로 상수를 정의해서 고정 숫자값을 한 곳에서 정의할 수 있다. const는 매우 편리한 기능이지만 주의해야 할 점이 있다. const로 지정한 상수는 public으로 지정하지 않는 것이 좋다는 것이다. private으로 지정했을 경우에는 문제가 없지만 public으로 지정해서 다른 클래스가 참조할 수 있게 했을 경우에는 버전 관리에 관한 문제가 발생할 위험이 ..