분류 전체보기 212

[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($"입력 된 첫 번째 문자 :..

[C#] 코딩의기술(실전편) - 2.14 테스트와 목(mock)

Mock 단위 테스트를 작성할 때 실제 클래스를 호출하기가 어려울 때가 있습니다. ex> 호출에 의해 특정 리소스가 변경되거나, 호출 시 불러오는 값이 고정되지 않은 경우. 이때는 고정값을 반환하는 객체인 목(mock)을 사용해서 테스트하는 것이 수월합니다. Mock의 특징 목 객체를 활용한 테스트는 직접 개발자가 목 객체를 만들어야 합니다. 목을 사용하면 코딩의 양도 늘고, 실행 시간도 늘어나서 목에 의존하지 않는 메서드를 설계해야합니다. 목을 사용해야만 테스트가 가능한 메서드가 있습니다. 이미 만들어져 있는 목 프레임워크를 활용하여 쉽게 목 객체 활용이 가능합니다. 해당 라이브러리만 세팅하면 쉽게 목 객체를 활용 가능합니다. 테스트 가능한 코드를 설계하면서 코드의 품질을 향상시키는 데 도움이 됩니다...