목록프로그래밍 언어/C# (24)
나의 지식 보관소
SQL 서버에 접근하는 법 1 2 3 4 5 6 SqlConnection sqlCon = new SqlConnection(); sqlCon.ConnectionString = @"Data Source=[서버]\[인스턴스명];Initial Catalog=[DB명];User ID=[계정명];Password=[비밀번호]" sqlCon.Open(); // 작업하고 sqlCon.Close(); 쿼리 명령어 실행하는 법 1 2 3 4 SqlCommand cmd = new SqlCommand(); cmd.Connection = sqlCon; cmd.CommandText = "INSERT INTO [테이블명] ([칼럼명], ...) VALUES ([값], ...)" cmd.ExcuteNonQuery(); 위 코드처럼 C..
async 한정자는 메서드, 이벤트 처리기, 태스크, 람다식 등을 수식함으로써 C# 컴파일러가 이들을 호출하는 코드를 만날 대 호출 결과를 기다리지 않고 바로 다음 코드로 이동하도록 실행 코드를 생성하게 한다. 단 async로 한정하는 메서드는 반환 형식이 Task나 Task또는 void이여야만 한다. void 메서드는 async 수식 하나만으로 완전한 비동기 코드가 된다. 하지만 Task나 Task형식의 메서드는 async로 한정한것만으로는 동기코드와 다름 없이 동작한다. C#컴파일러는 Task나 Task형식의 메서드를 async로 한정한 경우 await연산자가 해당 메서드 내부의 어디에 위치하는지 찾아서, 그곳에서 호출자에게 제어를 돌려주도록 한다. 또한 await 키워드는 awaitable 클래스 ..
병렬처리는 하나의 작업을 여러 작업자가 나눠서 수행한뒤 다시 하나의 결과로 만드는 것을 뜻한다. 비동기 처리는 A 작업을 시작한후 A의 결과가 나올 때까지 대기하는 대신 다른 작업을 수행하다가 A작업이 끝나면 그때 결과를 받아내는 방식을 뜻 한다. System.Threading.Tasks.Task 클래스 Task 클래스는 인스턴스를 생성할 때 Action 대리자를 넘겨받는다. 즉 반환형을 갖지 않는 메서드와 익명메서드, 무명 함수등을 넘겨 받는다. 그후 Start()메서드를 호출하여 넘겨받은 Action 대리자를 비동기로 실행시킬수있다. 1 2 3 4 5 6 7 8 Task myTask = new Task( () => { Thread.Sleep(1000); Console.WriteLine("Hello")..
익명 메서드 익명 메서드는 이름이 없는 메서드이다. 이름이 없기때문에 기본적으로 대리자에 참조시키기 위한 용도로 자주 쓰인다. 만일 아래와 같은 대리자가 있다면, 1 delegate int Calculate (int a, int b); 대리자는 delagate 키워드를 이용해서 선언한다. 대입할 대리자의 형식과 동일한 형식으로 선언되어야한다. 1 2 3 4 Calculate cal = delegate (int a, int b) { return a+b; } 위 코드처럼 사용하고, 이후 cal(1,2);를 호출하면 3이 반환된다. 람다식 람다식은 익명메서드를 만드는 하나의 방법이다. 다만 람다식으로 만드는 익명 메서드는 무명함수라는 이름으로 불린다. 기본적인 람다식(식 형식)을 선언하는 형식은 다음과 같다...
이벤트는 대리자를 event 한정자로 수식해서 만드는 것으로써 대리자와 큰차이가 나지않는다. 따라서 다른점을 알아볼것이다. 이벤트와 대리자의 가장 큰 차이는 이벤트는 외부에서 직접 사용할 수 없다는 점이다. 이벤트는 public으로 선언 되어있더라도 자신이 선언되어있는 클래스 외부에서는 호출할 수 없다.
대리자는 메서드에 대한 참조이다. 즉 대리자에 메서드의 주소를 할당한 후 호출하면 이 대리자가 메서드를 호출하여 준다. 대리자는 다음과 같이 delegate 키워드를 이용해서 선언한다. 1 한정자 delegate 반환형식 대리자이름 ( 매개변수목록 ) 단, 대리자는 참조할 메서드의 매개변수와 반환형식이 같아야한다. 제네릭 대리자 1 delegate int Compare(T a, T b); 다음과 같이 선언한다. 대리자 체인 대리자는 하나의 메서드 뿐만 아니라 여러 메서드를 동시에 참조할 수 있다. 메서드를 대리자에 += 연산자를 통해 결합할 수 있다. 1 2 3 delegate1 += method1 delegate1 += method2 delegate1 += method3 대리자에서 메서드를 끊어 낼때에..
프로세스: 실행 파일이 실행되어 메모리에 적재된 인스턴스, 하나 이상의 스레드로 구성된다. 스레드: 운영체제가 CPU시간을 할당하는 기본 단위. 여러개가 있으면 멀티스레드로 불린다. 멀티스레드의 장점: 1. 사용자 대화형 프로그램에서 응답률을 높힐 수 있다. 2. 멀티프로세스에 비해 자원 공유가 쉽다. 3. 경제성이 높다. 멀티스레드의 단점: 1. 멀티스레드 프로그램의 구현이 어렵다. 2. 자식스레드에 문제가 생기면 전체 프로세스가 영향을 받는다. 3. 스레드가 너무 많이 사용되면 성능이 저하된다. 스레드 시작하기 .NET 프레임워크는 스레드를 나타내는 클래스로 System.Threading.Thread를 제공하므로 이것을 사용하면 된다. 1 2 3 4 5 Thread t1 = new Thread(new..
제네릭은 내부에서 사용할 데이터 형식을 외부에서 결정하도록 하는 기법이다. 이런 방식을 사용하면 같은 역할을 하지만 값의 형식이 달라서 여러 개로 만들어야만 했던 클래스나 메서드들을 하나로 일반화할 수 있다. 제네릭 메서드 제네릭 메서드는 메서드내에서 사용할 데이터 형식을 외부에서 결정하도록 한 메서드이고, 아래와 같이 선언한다. 1 2 3 4 한정자 반환형식 메서드이름 ( 매개 변수 목록 ) { //... } 호출할땐 아래와 같이 사용하면 된다. 1 메서드이름 ( 넘겨줄 인자들 ); 즉 아래와 같이 선언하고 사용할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Program { static void Main() { TestClass.test(1); } } clas..