총 삽질들 514

#068_닷넷(.NET)_.Net Framework 기본 - Software Component

안녕하세요 삽잡이입니다. 이번 시간에는 닷넷에서 제공하는 어셈블리에 대해서 알아보려고합니다.그 전에, 어셈블리를 이해하기 위한 Component라는 개념에 대해서 알아보겠습니다. 여러분은 객체지향에서의 재사용이라고 하면 어떤 생각이 먼저 나십니까? 이 재사용도 맞습니다.하지만, 제가 언급하고자하는 재사용은 다른 것입니다. 바로, '코드 재사용'과 '바이너리 재사용'입니다. 코드 재사용은 '소스코드 수준'에서 상속, 포함등을 통해코드를 재사용할 수 있다는 의미의 재사용입니다. 그리고 바이너리 재사용은 코드를 컴파일하여 생성된 '바이너리'수준에서 재사용할 수 있다는 의미의 재사용입니다. 이번시간에는 바로 바이너리 수준에서의 재사용을 알아보고자합니다. 우선, 바이너리 재사용의 개념은 기존의 '컴포넌트'개념으로..

#067_닷넷(.NET)_.Net Framework 기본 - LINQ 내부 표현 방식

안녕하세요 삽잡이입니다. 이번 시간에는 LINQ 내부 표현 방식에 대해서 알아보려고합니다. LINQ는 내부적으로 어떻게 동작하고 있는 것일까요? 사실 이와 같이 코드를 구현하게 되더라도,모두 컴파일러가 함수를 호출해주게 됩니다. 이처럼 자동으로 호출해주는 기능들 가운데서Func와 Action이라는 대리자에 대해서 알아보고자합니다. Func, Action 대리자는 모두 delegate입니다. 당연한 소리를...함수를 가리키고 함수처럼 동작하는 객체로써,함수를 호출하려고 사용하지요. 대리자를 범용적으로 사용하는 방법에는 두가지가 있습니다.Func는 return 타입을 갖고, 인수가 없는 놈부터 시작하여서 여러개인 놈들을 미리 만들어 놓습니다.그리고 Action은 return 타입이 void이며, 인수가 없는..

#066_닷넷(.NET)_.Net Framework 기본 - LINQ의 역할 (사용자 정의형)

안녕하세요 삽잡이입니다. 이번 시간에는 사용자 정의형에 대한 LINQ에 대해서 좀 알아보려고합니다. 사용자 정의 타입 또한 LINQ가 가능합니다.또한, where 즉, 조건 절에서 결과치가 bool 형식이라면 몇 개의 조건을 줘도 상관없습니다. 제네릭 컬렉션의 경우 모두 IEnumerable 형식을 상속받습니다.따라서, LINQ의 동작에 대해서 걱정할 것이 없습니다.하지만, 기본적으로 IEumerable 형식을 지원하는 LINQ에서비 제네릭 컬렉션의 경우 제네릭 이전에 나온 인터페이스로써 꼼수(?)를 써야 LINQ를 사용할 수 있게 됩니다. 그 꼼수는 바로 OfType() 이라는 호환 가능한 확장 메서드를 사용하는 것입니다. 내부적으로 ArrayList는 모두 다 저장할 수 있는 object 타입입니다...

#065_닷넷(.NET)_.Net Framework 기본 - LINQ의 역할 (기본형) 2

안녕하세요 삽잡이입니다. 이번 시간에는 LINQ 쿼리를 가지고 놀 때기본형식으로 가지고 노는 경우에 대해서 지난시간에 이어 설명해보려고합니다. LINQ에도 확장 메서드가 사용되고 있다는 사실을 아십니까?사실, 확장 메서드는 IEnumerable 형식의 인터페이스에 만들어져 있습니다. 따라서, LINQ를 동작시키는 모든 형식은 IEnumerable의 수 많은 기능을 사용할 수 있습니다.즉, IEnumerable를 구현한 녀석이라면 모두 다 확장 메서드를 사용할 수 있다 이겁니다. 어마어마하죠? 아무튼... LINQ는 두가지로 실행할 수 있다는 사실을 아십니까?바로, '즉시 실행'과 '지연 실행'입니다.즉시 실행의 경우 LINQ 쿼리를 때렸을 경우 '지금' 동작이 수행되는 것이고, 지연 실행은 LINQ 쿼리..

#064_닷넷(.NET)_.Net Framework 기본 - LINQ의 역할 (기본형) 1

안녕하세요 삽잡이입니다. 이번 시간에는 LINQ의 기본적인 문법들에 대해서 알아보려고합니다.LINQ 중에서도 LINQ to Object에 대해서 알아보도록 하지요..즉, 객체 대상으로 LINQ를 때릴 때를 살펴보자 이겁니다. LINQ는 모든 데이터 타입을 다룰 수 있는 기능을 제공해줍니다.쿼리를 날릴 대상(Target)만이 달라질 뿐이지 문법이 어디 달라지겠습니까?즉, 누구를 타겟으로 질의를 던질 수 있느냐로 종류만 나뉠 뿐이라는 것입니다.그 종류에는 Object, XML, DataSet, Entities, 병렬 LINQ로 나뉩니다. DataBase를 대상으로도 LINQ를 던질 수 있는 종류도 있습니다.DataSet과 Entities인데요... 이 들이 바로 데이터베이스와 관련된 내용입니다.LINQ는 어..

#063_닷넷(.NET)_.Net Framework 기본 - LINQ 소개 및 관련 기능

안녕하세요 삽잡이입니다. 이번 시간에는 LINQ가 무엇인지, 그리고 어떤 기능이 들어가있는지에 대해서간략하게(?) 알아보려고합니다. LINQ는 Language Intergranted Query를 말합니다.즉, 통합 쿼리 언어라고 말 할 수 있지요. LINQ는 데이터 집합 즉, 단일 데이터가 대상이 아닌, 여러 데이터가 모여있는 집합을 대상으로 사용됩니다. 프로그램의 구조를 살펴보도록 하겠습니다. 쿼리 언어의 대표적인 예로는 SQL이라는 언어가 있습니다.Structed Query Language로써, APP과 DB를 관리하는 수 많은 DBMS와 소통을 위한 언어입니다.참고로 DBMS는 DB를 관리하는 어플리케이션 프로그램을 말합니다. 데이터베이스와 이야기하는 표준 언어를 만들었는데이 데이터베이스와 이야기하..

#062_닷넷(.NET)_.Net Framework 기본 - 부분 클래스(partial class)

안녕하세요 삽잡이입니다. 이번 시간에는 부분 클래스에 대해서 알아보려고합니다. parrial이라는 키워드가 들어갑니다.해당 키워드를 통해 부분 클래스를 작성할 수 있습니다.부분 클래스를 사용하게 된다면 하나의 클래스를 여러 코드 파일에 나누어 작성할 수 있습니다.즉, 서로 시그니처가 같다면 나뉘어져 있어도 최종적으로 컴파일러는 하나로 판단한다 이겁니다. 위의 코드인 Point 클래스를 두 개의 partial class 즉, 부분 클래스로 구현할 수 있습니다. 정말 부분입니다.이 둘이 합쳐지면 실제 하나의 코드를 이루게 되는 것입니다. 과연 이 부분 클래스는 어떠한 장점을 가지고 있을까요?다음에 로직, 디자인을 완벽하게 분리하는 경우가 올 때 이 부분 클래스가 큰 힘을 줄 수 있습니다. 뭔 소리냐, 파일에..

#061_닷넷(.NET)_.Net Framework 기본 - 확장 메서드

안녕하세요 삽잡이입니다. 이번 시간에는 확장 메서드에 대해서 알아보려고합니다. 확장 메서드는 중요한 문법입니다.물론, 어느 하나 중요하지 않는 문법이 없겠지만요. 허허... 이 확장 메서드라는 녀석 덕분에 C# 코드의 기능이 더욱 범용화되고 유연해졌습니다.학장 메서드란, 내 것이 아닌 남의 것의 메서드를 내 것처럼 사용하는 것입니다. 예를 들어, 원래 Sap이라는 녀석에는 '삽질'이라는 메서드가 없지만,다른 녀석에게 있는 '삽질'이라는 메서드를 나의 메서드처럼 동작하도록 하는 메서드를 뜻합니다.즉, 남의 메서드를 나의 객체의 메서드인듯 동작하도록 하는 메서드를 확장 메서드라고한다는 것입니다. 이 확장 메서드란 언제 유용할까요?확장 메서드에는 몇 가지의 장점이 있습니다. 원래 처음 개발할 때 먹고, 자고,..

#060_닷넷(.NET)_.Net Framework 기본 - 사용자 정의 타입 변환

안녕하세요 삽잡이입니다. 이번 시간에는 사용자 정의 타입 변환에 대해 알아보는 시간을 가지려고 합니다. 여러분은 형변환에 대해서 들어보신적이 있으십니까?int형에서 double, double에서 intint형에서 string, string에서 int형 이처럼 말입니다. C#에서 제공하는 기능 중우리가 정의를 하지 않아도 되는 변환이 되는 경우는 크게 두 가지입니다. 우선, '수치 형식 간의 변환'은 기본적으로 제공해줍니다.이는 위에서 든 예시와 같이 정수에서 실수 혹은, 실수에서 정수로 변환하는 기능입니다.그리고, '부모 자식간의 형식 변환'도 제공을 해주지요. 그런데, 실생활에서 말이 안되는 변환이 객체지향에서는 정의를 통해 변환이 가능해집니다. 예를 들어 모기를 곰으로 형변환 한다던지...허허... ..

#059_닷넷(.NET)_.Net Framework 기본 - 연산자 오버로딩`

안녕하세요 삽잡이입니다. 이번 시간은 연산자 오버로딩에 대해서 알아보려고합니다.C++을 배우셨던 분들이라면 분명 익숙하게 들릴 만한 주제라고 생각합니다. 연산자 오버로딩을 하는 이유는연산자가 정의되어있지 않은 형식 즉, 사용자 형식(클래스형식)에 대해서내장 되어있는 연산자가 동작하도록 하기 위해서 입니다.그 결과로 더 쉽게 사용할 수 있고, 명확한 코드를 만들 수 있게 되지요. C++과 다르게 C#에서 연산자 중복을 할 때에는 멤버 함수,전역 함수로 오버로딩을 하지 못합니다.왜냐하면 전역함수가 C#에서는 없기 때문입니다. 따라서 static 메서드를 사용하게 됩니다.그래서 이항 연산자 오버로딩을 할 때에는 인자를 기본적으로 두개를 받게됩니다. C#에서는 전역 함수 연산자 중복만을 제공해줍니다.즉, 전역 ..