프로그래밍/(도서)C#코딩의기술-실전 23

[C#] 코딩의기술(실전편) - 그 외, 챕터 별 간단 정리

1.8 주석 주석에는 아무거나 작성할 수 있습니다. 컴파일 시 오류가 발생하지 않습니다. 주석은 코드가 의미하는 바를 함축적으로 담고 있는 내용입니다. 코드와 다른 내용의 주석이 존재할 수 있으니 관리를 해야합니다. 2.1 루프 루프에서는 시작 조건과 종료 조건에 버그가 발생하기 쉽습니다. 예제에서 i 값을 0과 1을 잘못 적거나 부등호에 등호(=)를 포함 여부에 따라 버그가 발생할 수 있습니다. 컬렉션을 다루는 경우 foreach문을 사용하거나 컬렉션을 다루는 명령, API를 적극적으로 사용해야 합니다. 예제* for (int i = 0; i < 10; i++) { Console.WriteLine($"{i}"); } 예외 발생 2.4 서식변경 과 중괄호 코드 작성 시 명시적으로 그리고 일관성 있게 코드..

[C#] 코딩의기술(실전편) - 4.1 var VS object VS dynamic

var 어떠한 타입이라도 변수로 선언하여 사용할 수 있습니다. var 형식은 최초 초기화되어 타입이 정해진 이후에는 타입을 변경할 수 없습니다. null로는 초기화 할 수 없습니다. 선언 시점에 특정 타입으로 초기화 되어야 합니다. var 타입은 선언 시점에서 타입을 추정하기 때문에 인텔리센스가 완벽하게 지원 됩니다. var 인텔리센스 데이터형의 속성 확인이 가능합니다. object 어떠한 타입이라도 변수로 선언하여 사용할 수 있습니다. 값 형식 -> 참조형식, 참조형식 -> 값 형식으로 형 변환을 할 경우 박싱(boxing : 값형식 -> 참조형식), 언박싱(unboxing : 참조형식 -> 값형식) 과정이 일어나며, 성능상 영향을 미칠 수 있습니다. object 인텔리센스 데이터형의 속성 확인이 불가..

[C#] 코딩의기술(실전편) - 3.13 열거 데이터의 순서 변경

1. 열거 데이터 삭제 열거 데이터에서 삭제를 하는 경우 예외가 발생합니다. 요소의 개수가 변경이 되는 경우 예외가 발생합니다. static void Main(string[] args) { var list = new List { 1, 2, 3, }; foreach (var item in list.Where(c=>c>1)) { list.Remove(item); } } 2. 열거 데이터 변경 열거 객체가 변하지 않고 객체 안에 있는 내용만 달라지는 것은 상관없습니다. Where 메서드는 내용을 먼저 읽지 않습니다. 중간에 값이 바뀌더라도 예외 발생하지 않습니다. static void Main(string[] args) { int[] array = { 1, 2, 3}; foreach (var item in a..

[C#] 코딩의기술(실전편) - 3.12 First메서드 VS Take메서드

1. First메서드 와 Take메서드 First() : 1번째 요소를 가져오는 메서드 Take(n) : n 번째 요소를 포함한 시퀀스(sequence)를 가져오는 메서드 2.First메서드와 Take메서드 차이점 First메서드는 1번째 값을 가져오므로, 나중에 배열의 값을 변경해도 결과는 그대로입니다. 예제에서 numbers.First()를 호출하는 순간 1번째 값을 가져옵니다. Take메서드는 1번째 값과 시퀀스를 가져옵니다. 예제에서 numbers.Take(1)을 호출하는 순간 1번째 값을 가져올 수 있는 권한과 시퀀스를 가져옵니다. 실제로 값을 가져오는 건 ElementAt() 입니다. ElementAt()호출 전에 배열 값의 변경이 이루어져서 변경된 값이 출력됩니다. 2.1 사용예제 class..

[C#] 코딩의기술(실전편) - 3.7 Cast VS OfType

1. Cast 메서드 컬렉션의 형을 변환해주는 메서드입니다. 하지만 Cast메서드를 사용해도 형이 맞지 않을 때, 예외가 발생합니다. static void Example_Cast() { object[] arr = { 1, 2, 3,"test" }; var q = arr.Cast(); Console.WriteLine($"q의 합계 :{q.Sum()}"); } 1.1 Cast() 사용예제 1.2 실행 결과 배열에 string문자열을 int형으로 변환 하려해서 예외 발생합니다. 2. OfType메서드 컬렉션의 형을 변환해주는 메서드입니다. 변환할 수 없는 요소는 무시하는 LINQ 메서드입니다. 예외 발생하지 않습니다. 2.1 OfType() 사용 예제 static void Example_OfType() { o..

[C#] 코딩의기술(실전편) - 3.5 짧은쿼리 VS 긴 쿼리

1. 긴 쿼리 쿼리의 길이가 길면 코드 가독성이 떨어진다. static void Example_LongQuery() { object[] arr = { 5, 3, 2, 4, 1, "hello" }; var arr2 = arr.OfType().Where(x => x >= 2).OrderBy(x => x).Skip(1).Take(2).Select(x => x.ToString("C")).Reverse().ToArray(); foreach (var item in arr2) { Console.WriteLine(item); } } 1.1 단순 긴 쿼리 예제 2. 긴 쿼리를 자른다 긴 쿼리를 여러 개로 자르는게 좋다. 짧은 쿼리로 작성하면 계산의 중간 결과를 확인할 수 있습니다. 예제와 같이 작성하여 중간 결과를 확인..

[C#] 코딩의기술(실전편) - 3.4 배열 VS IEnumerable<T>

1. 임의 접근 임의 접근 (random access) : 순서에 관계 없이 사용할 수 있다. 갑자기 마지막 데이터를 달라고 요청할 수 있습니다. 순차 접근 (sequential access) : 앞에서부터 차례대로 사용한다. 갑자기 마지막 데이터를 꺼내서 사용할 수 없다. 처음부터 순서대로 나열됩니다. 배열은 임의 접근이 가능합니다. IEnumerable(열거 인터페이스)는 임의 접근 하지 않습니다. 순차 접근만 가능합니다. ElementAt(), ElementAtDefault() 메서드를 사용하면 인덱스 번호를 지정하여 임의 접근할 수 있는것 처럼 보일 수 있지만, 그것은 착각이다. 1.1 사용 예제 예제에서 처리시간만 두고 비교하면 배열의 처리 시간이 더 빠릅니다. 임의 접근을 해야 할 때는 배열을..

[C#] 코딩의기술(실전편) - 3.3 OrderBy VS Sort

Orderby 메서드 시퀀스의 요소를 오름차순으로 정렬합니다. 원래 데이터를 유지하면서 요소를 정렬합니다. Sort 메서드 시퀀스의 요소를 오름차순으로 정렬합니다. 원래 데이터를 제거하고, 정렬 된 새로운 데이터를 넣습니다. 사용예제 class Program { static void Main(string[] args) { int[] sortArray = { 3, 1, 2 }; int[] orderByArray = { 3, 1, 2 }; SortAndOutput(sortArray); PrintArray(sortArray); OrderByAndOutput(orderByArray); PrintArray(orderByArray); Console.ReadKey(); } private static void Prin..

[C#] 코딩의기술(실전편) - 3.2 First VS Single

First메서드 조건에 맞는 첫 번째 요소를 반환합니다. 첫 번째 요소를 발견 한 시점에 값을 반환합니다. 그 뒤에 요소들은 확인하지 않습니다. Single메서드 조건에 맞는 값이 하나만 있는 것을 확인한 다음 그 값을 반환합니다. 조건에 맞는 값을 발견 한 후에도 나머지 요소들도 확인합니다. 모든 요소들을 확인 합니다. First(), Single() 사용예제1 class Program { static void Main(string[] args) { var enumObj = Enumerable.Range(0, 1000000000); var start1 = DateTime.Now; var a = enumObj.First(x => x == 1); Console.WriteLine($"First() TEST ..

[C#] 코딩의기술(실전편) - 3.1 First와 FirstOrDefault

First 메서드 LINQ 메서드의 첫 번째 요소를 가져오는 메서드 첫 번째 요소가 없으면 예외가 발생합니다. 예외 처리가 필요합니다. FirstOrDefault 메서드 LINQ 메서드의 첫 번째 요소를 가져오는 메서드 첫 번째 요소가 없으면 기본값(참조 형식이면 null)을 반환합니다. 별도로 예외 처리가 필요없습니다. First(), FirstOrDefault() 사용 예제 class Program { static void Main(string[] args) { FirstMethod(); FirstOrDefaultMethod(); } static void FirstMethod() { string s1 = Console.ReadLine(); Console.WriteLine($"입력 된 첫 번째 문자 :..