안녕하세요.
책에서 IDictionary<string, string> data = new Dictionary<string, string>(); 형태로 인스턴스를 생성하는 이유는 인터페이스를 사용함으로써 코드의 유연성과 확장성을 높이기 위함입니다. 뒤에서 인터페이스를 학습하면 좀 더 이 문장이 쉽게 받아드려집니다.
IDictionary 인터페이스를 사용하면 Dictionary 클래스 외에도 IDictionary를 구현하는 다른 클래스들로 쉽게 교체할 수 있습니다. 따라서 코드를 변경할 때, 다른 구현체를 사용하려면 IDictionary 인터페이스를 사용하는 부분만 수정하면 됩니다.
예를 들어, 나중에 SortedDictionary 또는 ConcurrentDictionary와 같은 다른 클래스를 사용해야 할 때, 인터페이스를 사용한 코드는 다음과 같이 쉽게 변경할 수 있습니다.
IDictionary<string, string> data = new SortedDictionary<string, string>();
반면에 Dictionary<string, string> data = new Dictionary<string, string>(); 형태로 인스턴스를 생성하면, 코드가 특정 클래스에 강하게 결합되어 있어서 나중에 다른 클래스로 교체하기가 어렵습니다.
그러나 책에서 언급한 것처럼, 간단한 경우에는 var 키워드를 사용하여 다음과 같이 인스턴스를 생성할 수 있습니다.
var data = new Dictionary<string, string>();
이렇게 하면 타입 추론에 의해 컴파일러가 자동으로 data 변수의 타입을 Dictionary<string, string>으로 결정합니다. 이 방법은 코드를 간결하게 작성할 수 있지만, IDictionary 인터페이스를 사용하는 것만큼 유연성과 확장성은 떨어집니다. 이렇게 사용하는 것은 특정 클래스와 강하게 결합되어 있는 코드가 문제가 되지 않을 때, 간단한 경우에 적합합니다.
결론적으로 현재 학습 시점에서는 아직 제대로 배우지 않은 인터페이스보다는 직접 클래스와 var 키워드를 사용하는것에 익숙해지시는게 좋고 나중에는 가능하면 인터페이스를 사용하는 게 좋습니다.
감사합니다.
On 2023-05-06 오후 9:47:00, '백동규' wrote:
IDictionary<string, string> data = new Dictionary<string, string>();
Dictionary클래스 인스턴스 생성 부분에서 IDictionary로 하는 이유가 있나요?
이유가 있다면 Dictionary<string, string> data = new Dictionary<string, string>();
이렇게 개체 생성하는거와 다른점이 궁금합니다.