분류 전체보기 269

클러스터형 인덱스 / 보조 인덱스

클러스터형 인덱스 데이터 베이스에 저장된 테이블에서 특정 행 데이터를 빠르게 검색하기 위해 사용한다. B-Tree 자료구조를 이용하여 기준이 되는 컬럼값을 정렬하여 사용한다. 페이지를 단위로 노드가 만들어지며 각 노드는 기준값으로 정렬된 행 데이터로 구성된다. 전체 자료구조는 루트 페이지에서 부터 리프 페이지로 나뉘며 계층 구조를 가지는 트리 형태이다. 각 페이지에 행 데이터가 직접 저장된다. 클러스터형 인덱스의 특징 트리 자료구조로 인덱스를 기준으로 검색이 매우 빠르다. MYSQL에서 PRIMARY KEY로 설정된 컬럼은 자동으로 인덱스가 생성되며 기본적으로 인덱스 컬럼을 기준으로 정렬된 테이블이 출력된다. 삽입, 삭제시 B-Tree 자료구조의 특성 때문에 페이지 병합과 분할이 일어난다. 테이블당 하나..

DB/이론 2021.11.29

[Effective C#] 5장 예외 처리

아이템 45. 메서드가 실패했음을 알리기 위해서 예외를 이용하라 어떤 메서드가 실패했음을 알리기위해 반환값으로 오류코드를 사용하기도한다. 반면 예외의 발생은 콜 스택을 통해 적절한 catch문을 만날 때까지 콜스택을 통해 전파된다. 코드 작성자는 에러를 발생시키는 위치와 처리하는 부분을 분리시켜 개발할 수 있다. 특정 메서드는 예상치 못한 상황에 대해 예외를 발생시키도록 설계할 수 도 있고 그러한 상황을 정상적으로 처리할 수 있는 것으로 설계할 수도 있다. ex) File.Open()는 파일이 없을 때 예외를 발생시킬 수 있다. 있어야하는 파일이 없기 때문이고 더 이상 프로그램을 진행할 수 없기 때문이다. 반면, File.Exists()는 파일이 있는 지만 체크하고 있든 없든 그에 따른 프로그램을 작성할..

C#/Advanced C# 2021.11.27

[Effective C#] 4장 LINQ 활용 (2)

아이템 36. 쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 이해하라 LINQ는 쿼리 언어와 그 쿼리 언어를 일련의 메서드 집합으로 변환하는 2개의 핵심 구조로 기반한다. 모든 쿼리식은 하나 혹은 여러 개의 메서드로 매핑된다. 클래스 사용자의 관점에서 볼 때 쿼리 표현식은 단순히 메서드 호출 구문의 다른 표현 이다. 예로 where 절은 Where() 메서드를 호출하는 코드로 변환된다. 쿼리 표현식의 예 Where / Select / SelectMany / Join / GroupJoin / OrderBy / OrderByDescending 이러한 메서드는 System.Linq.Enumerable 클래스는 IEnumerable에 대한 확장 메서드로 구현하고 있다. 비슷하게 System.Linq.Que..

C#/Advanced C# 2021.11.24

[Effective C#] 4장 LINQ 활용 (1)

아이템 29. 컬렉션을 반환하기보다 이터레이터를 반환하는 것이 낫다 이터레이터 메서드 - 호출자가 시퀀스를 만들어내기 위해 yield return 을 사용하는 것을 말한다. public static IEnumerable GenerateAlphabet() { var letter = 'a'; while(letter $"{target.LastName, 20}, {target.FirstName, 15}" } } // XmlExtensions.cs namespace XmlExtensions { public static class XmlReport { public static string Format(this Person target) => new XElement("Person", new XElement("Last..

C#/Advanced C# 2021.11.24

C# 공변성과 반공변성 Covariance / Contravariance

C#의 인터페이스와 대리자에 적용되는 제너릭 타입의 형변환에 관한 기준이다. Base 기반 클래스와 Derived 파생 클래스가 있다하자. public class Base {} public class Derived : Base {} Covariance 공변성 일반적인 다형성 참조 형식의 캐스팅에도 사용되는 방식으로 파생 타입의 인스턴스를 기반 타입으로 참조할 수 있다. IEnumerable d = new List(); IEnumerable b = d; Contravariance 반공변성 반대로 기반 타입 인스턴스를 파생 타입으로 참조한다. 일반적인 다형성 참조 형식에는 적용되지 않는다. 대리자의 제너릭 타입에만 적용된다. Action b = (target) => { Console.WriteLine(tar..

[Effective C#] 3장 제너릭 활용

C# 제너릭 타입 .NET 런타임이 제너릭 타입을 JIT 컴파일할 때 타입 매개변수에 값 타입이 지정되면 두 단계를 거친다. 1) 닫힌 제너릭 타입을 표현하기 위한 새로운 IL 클래스를 생성한다. T 인자가 구체 타입으로 대체된다. 2) 대체된 타입을 이용하여 실제 기계어 코드를 만들어낸다. 어셈블리가 로드되는 시점이 아니라 로드된 타입의 특정 메서드가 최초로 호출되는 시점에 호출 메서드에 대해서만 JIT 컴파일이 이루어지고 메서드 IL 코드가 기계어 코드로 대체된다. 아이템 18. 반드시 필요한 제약 조건만 설정하라. 제너릭 타입 T에 대한 조건을 설정하여 타입을 제한할 수 있다. 타입을 제한하지 않은 경우 가장 기본적인 System.Object의 기능만을 사용하게 된다. 타입을 설정하여 해당 제너릭 ..

C#/Advanced C# 2021.11.20

[C#] Task (3) async / await 동작 더 알아보기

async-await 그리고 Task에 대하여는 다음 포스트를 먼저 참고하면 좋습니다. - Overview 2021.10.23 - [C#/Advanced C#] - [C#] Task (1) Async / Await overview - 비동기 프로그래밍 2021.10.23 - [C#/Advanced C#] - [C#] Task (2) 비동기 프로그래밍 Asynchronous Programming Task Asynchronous Programming (TAP)를 위한 async-await를 포함하는 비동기 메서드는 다음과 같이 작성할 수 있다. public async Task AsyncPrint() { await Task.Delay(50).ConfigureAwait(false); // 해당 작업은 작업자 스..

C#/Advanced C# 2021.11.18

IComparable/IComparer/IEquatable : 비교와 관련된 인터페이스

IComparable / IComparable 선후 관계 / 대소 비교 등을 위한 인터페이스를 제공한다. 어떤 클래스의 인스턴스로 이루어진 컬렉션의 정렬을 위해 사용된다. public interface IComparable { int CompareTo([AllowNull] T other); } CompareTo : 해당 메서드는 int 형을 반환하는데 다음의 선후 관계를 의미한다. 0보다 작음 : 해당 인스턴스(Caller)가 other 보다 선의 관계를 가지며 정렬 시 other보다 앞에 배치된다. 0 : other와 동등한 관계이다. 0보다 큼 : 해당 인스턴스가 other 보다 후의 관계를 가지며 정렬 시 other보다 뒤에 배치된다. 예제 public class Temperature : IComp..

ICollection : 컬렉션 인터페이스

ICollection 인터페이스 컬렉션을 구성하는 size, enumerators 그리고 동기화 기법을 정의한다. 기본적으로 IEnumerable을 상속한 인터페이스 public interface ICollection : System.Collections.IEnumerable ICollection 인터페이스는 IEnumerable을 확장하였다. IDictionary와 IList는 ICollection을 확장한 특별한 인터페이스이다. IDictionary는 key/value 쌍을 가지는 컬렉션을 구현한 형태이고, IList는 인덱스로 랜덤 접근이 가능한 컬렉션을 구현한다. Queue나 Stack의 경우 Collection을 바로 구현하여 List와 같이 랜덤 접근이 불가능하다. IDictionary 인터페..

IEnumerable / IEnumerator : 순회 가능한 컬렉션과 순회하는 방법

IEnumerable 인터페이스 Enumerator를 노출시키고 non-generic 컬렉션에 대한 순회를 할 수 있다. IEnumerable는 generic 컬렉션에 대한 순회. IEnumerable 인터페이스 정의 // // 요약: // Exposes an enumerator, which supports a simple iteration over a non-generic collection. public interface IEnumerable { // // 요약: // Returns an enumerator that iterates through a collection. // // 반환 값: // An System.Collections.IEnumerator object that can be used ..