반응형

IT 야놀자/C # 11

LINQ (링크) 2 - group by, join

1. 여러개의 데이터 범위 지정하기 잘 알다시피 LINQ 쿼리식의 from 절은 검색할 데이터의 범위를 지정하는 역할을 한다. 그럼 만약에 지정한 데이터 범위 내에서 한번 더 데이터 범위를 지정하려면 어떻게 해야할까? 그때에는 from 절을 중첩해서 사용하면 된다. Student[] StudentList = { new Student() { name="아라", score = new int[] {88, 73, 66, 91} }, new Student() { name="민희", score = new int[] {78, 95, 89, 52} }, new Student() { name="현아", score = new int[] {88, 71, 100, 91} } }; var Students = from stude..

IT 야놀자/C # 2019.11.12

LINQ (링크) 1 - from, where, orderby, select

1. LINQ 란? LINQ(링크)는 Language Integrated Qurey의 약어로, 직역하면 '질의로 통합된 언어' 이다. 말이 참 난해하다.;; 그냥 쉽게 말해 '데이터에 대해 질문하는 언어' 라고 볼 수 있다. C#에서는 데이터에 대해 질문하는 LINQ(링크)라는 기능을 제공한다. LINQ의 역할은 데이터에 대해 질문하고, 그 답에 해당하는 데이터를 찾는 것이다. 이러한 LINQ의 질의 기능은 프로그램에서 데이터 검색을 겁나 편리하게 해준다. 예를 들어 결혼정보업체에서 한국의 모든 사람에 대한 데이터를 가지고 있는데 그 중에 여자이면서 20세 이상 성인들의 데이터를 어린 나이 순으로 찾는다고 치자. 그럼 데이터를 하나하나 검색하면서 이런 질문을 던질 수 있을것이다. 첫번째. 여자인가? 두번..

IT 야놀자/C # 2019.11.10

Func & Action 델리게이트

1. Func? Action? 프로그램을 작성하던 중에 갑자기 무명 메소드가 필요해졌다고 생각해 보자. 무명 메소드를 사용하기 위해서는 이를 참조할 수 있는 델리게이트 변수가 있어야 하며 또한 델리게이트 변수를 생성하기에 앞서 델리게이트 타입을 선언해야 한다. 그러면 각기 다른 타입의 무명 메소드를 여러개 만들 때는 어떻게 해야할까? 당연히 무명 메소드마다 그 타입에 맞는 델리게이트 타입과 변수를 따로 따로 선언해야 할 것이다. 이는 매우 비효율적인 작업이기 때문에 C#에서는 Func과 Action이라는 델리게이트를 제공한다. Func와 Action은 미리 선언된 델리게이트 변수로써 별도의 선언없이 사용가능하다. Func는 반환값이 있는 메소드를 참조하는 델리게이트 변수이고 Action은 반환값이 없는 ..

IT 야놀자/C # 2019.11.10

람다식 (Lamda Expression)

1. 람다식 람다식은 무명 메소드를 단순한 계산식으로 표현한 것이다. 메소드는 크게 매개변수와 내부 식 반환값으로 구성되어 있는데 이들만 가지고 메소드를 계산식으로 표현한다. 무명 메소드에 비해 상당히 간결하게 표현되는 것을 확인할 수 있다. 람다식은 매개변수로 전해지는 a, b의 타입까지도 생략이 가능하다. (똑똑한 컴파일러가 좌항의 델리게이트의 타입을 참고해서 타입을 유추하는 것이다.) 그럼 람다식에 대한 다음 예제를 작성해 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class MainApp { delegate int MyDelegate(int a, int b); delegate void MyDelgate2(); static void Main(string[] a..

IT 야놀자/C # 2019.11.07

이벤트 (Event)

1. 이벤트 델리게이트 타입을 선언하면 델리게이트 변수도 생성할 수 있지만 이벤트 변수도 생성할 수 있다. 이벤트 변수는 간단히 event 한정자만 붙여주면 된다. // 델리게이트 타입 선언 delegate void MyDelegate( int a ); // 델리게이트 변수 선언 MyDelegate A; // 이벤트 변수 선언 event MyDelegate B; 이벤트 변수는 델리게이트 변수와 마찬가지로 메소드를 참조하는데 단지 성격이 약간 다르다. 간단히 말해 델리게이트 변수가 public 이라면 이벤트 변수는 private 같은 느낌이랄까? 델리게이트 변수는 자신이 속한 클래스 외부에서도 호출이 가능하지만 이벤트 변수는 외부에서 호출이 불가능하다. 오직 변수가 속한 클래스 내부에서만 사용하도록 제한된..

IT 야놀자/C # 2019.11.06

무명 형식, 무명 메소드

1. 무명 형식 (Anonymous Type) 변수 형식(타입)에는 잘 알다시피 int, float, double, string, class, ... 등등이 있으며 우리는 이 형식이름으로 변수를 선언해서 사용한다. Ex) int A; float B; string C; class D; 그런데 C# 에는 독특하게 이름이 없는 형식(타입)이 존재한다. 이를 무명형식(Anonymous Type)이라 하는데 무명형식은 임시 변수가 필요할 때 아주 유용하다. (임시 변수 : 임시로 생성해서 사용후 재사용되지 않는 변수) 선언하는 방법은 다음과 같다. var temp = new {Age = 11, Name = "십일" }; Console.WriteLine( "{0}, {1}", temp.Age, temp.Name )..

IT 야놀자/C # 2019.11.05

델리게이트 (Delegate) - 콜백, 체인

1. 델리게이트 (Delegate) 해석하면 '대리인' 이라는 뜻의 델리게이트는 메소드를 참조하는 변수이다. C++의 함수 포인터와 비슷하기 때문에 C++을 공부한 사람이라면 어렵지 않게 이해하겠지만 그렇지 않은 사람들을 위해 간단히 개념을 설명해본다. 대리라는 말은 보통 내가 해야할 일을 다른 누군가에 위임하는 것을 말한다. 나를 대리할 사람이 있다면 그로써 우리는 많은 수고를 덜을 수 있다. 부모님의 심부름을 동생에게 시킨다든지 배가 고플때 동생에게 라면을 끓이게 한다든지 물론 현실은 우리의 기대와는 많이 다르다... 어쨋든 프로그래밍에서도 이런 대리인의 역할을 해주는 변수가 존재하는데 그것이 바로 델리게이트(Delegate)이다. 델리게이트는 메소드를 대신해거 호출하는 역할을 한다. (메소드의 대리..

IT 야놀자/C # 2019.11.04

일반화 컬렉션 - List, Queue, Stack, Dictionary

1. 컬렉션의 성능 문제 컬렉션들 (ArrayList, Queue, Stack, Hashtable) 은 성능의 문제가 있다. 컬렉션은 데이터의 어떤 타입도 전부 object 타입으로 저장하기 때문에 데이터에 접근할 때마다 본래 타입으로의 형식변환이 무수하게 일어나며 이는 곧 성능의 저하로 나타난다. 이러한 이유에서 컬렉션보다는 일반화 컬렉션을 사용한다. 일반화 컬렉션은 형식을 지정해서 사용하기 때문에 불필요한 형식 변환을 발생시키지 않으며 잘못된 형식의 객체를 담는 위험을 피할 수 있다. 일반화 컬렉션에는 List, Queue, Stack, Dictionary 등이 있는데 (이들은 ArrayList, Queue, Stack, Hashtable 의 일반화 버전이다.) 일반화 컬렉션은 System.Colle..

IT 야놀자/C # 2019.10.31

일반화 프로그래밍

1. 일반화(Generalization)란? '일반화'는 간단히 말해 서로 다른 개념에서 공통점을 찾는 것이다. 'A' 와 'B', 'C'는 분명 다른 단어이지만 '영어'라는 공통점을 가지며 "ABC"와 "가나다"는 분명 다른 글자이지만 '문자'라는 공통점을 가진다. 이렇듯 어떤 개념을 포괄하는 공통된 개념을 찾아 서러 다른 개념들을 하나로 묶어 줄 수 있다. 이것을 일반화(Generalization)라고 한다. 2. 일반화 메소드 그럼 프로그래밍에서도 이런 일반화가 가능하지 않을까? 코드의 서로 다른 개념들 사이에서 공통적인 개념을 찾아 하나의 코드로 묶어주는 것 말이다. 예를들어 int, float, string 등은 분명 다른 타입이다. 하지만 이들은 '변수'라는 개념으로 묶어줄 수 있다. 이전에는..

IT 야놀자/C # 2019.10.29

컬렉션 (Collection) - ArrayList, Queue, Stack, Hashtable

1. 컬렉션 (Collection) ? 컬렉션(Collection)은 간단히 말해 데이터 모음(자료구조)이다. 즉, 우리가 잘 아는 배열이나 스택, 큐 등을 C#에서 컬렉션이라는 이름으로 제공하는 것이다. C#의 컬렉션을 사용하기 위해서는 우선 컬렉션 네임스페이스 사용을 선언해야 한다. Ex) using System.Collections; 이렇게 컬렉션 네임스페이스 사용을 선언한 후에는 원하는 컬렉션을 생성하여 사용할 수 있다. C#에서 제공하는 대표적인 컬렉션은 ArryList, Queue, Stack, Hashtable 등이 있으며, 간단히 살펴보면 다음과 같다. 2. ArrayList ArrayList는 배열과 비슷한 컬렉션이다. 배열처럼 [] 인덱스로 컬렉션 요소에 접근이 가능하고, 특정 요소를 ..

IT 야놀자/C # 2019.10.28
반응형