728x90

Language/C# 18

[C#] Func / Action / 익명 형식

1. Func - 내부 처리 완료 후 반환되는 결과값이 있다. - 특정 조건으로 필터링하고 그 결과를 반환하는 Where 같은 메소드를 구현할 때 유용 2. Action - 내부 처리를 완료 후 반환되는 결과값이 없다. - 어떤 처리 진행을 보여주는 UI 업데이트 같은 처리를 할 때 유용 using System; using System.Collections; using System.Collections.Generic; namespace TestPro { class Program { private static List FilterOfInts(int[] source, Func filter) { List result = new List(); foreach (int i in source) { if (filter..

Language/C# 2020.12.26

[C#] 델리게이트 / 무명 메소드 / 이벤트

1. 델리게이트(Delegate) - 메소드가 처리해야 할 것을 델리게이트에 위임 한다. - 델리게이트만 호출을 하게 되면 델리게이트가 위임 받은 메소드들이 실행된다. - 델리게이트는 위임을 받을 메소드의 파라미터, 리턴 값의 시그니처만을 정의한다. 그러므로 공용모듈을 설계할 때 특정 메소드가 아닌 비슷한 기능을 하는 다양한 메소드 실행이 가능하다. - 델리게이트는 이벤트와 함께 많이 사용된다. using System; namespace TestPro { class Program { // delegate delegate int Calculate(int num1, int num2); private static int Add(int num1, int num2) { return num1 + num2; } pr..

Language/C# 2020.12.26

[C#] 확장 메소드(Extension Method)

- 이미 존재하는 클래스의 멤버에 유틸리티 성격의 메소드를 추가하고 싶을 경우 사용. - FCL 및 3rd 파티의 많은 라이브러리를 사용하게 되므로 이전까지는 어쩔 수 없이 별도의 클래스를 만들어 사용하였다. - 하지만 C# 3.0 부터 확장 메소드를 사용하면 새로운 클래스를 선언하지 않고 기존 클래스에 메소드를 추가할 수 있다. * 확장 메소드로 선언을 하려면 반드시 정적 메소드로 선언을 하여야 한다. (확장 메소드는 정적 메소드로만 선언이 가능하므로, 클래스도 정적 클래스를 선언하여 정리하면 편하다.) - e.g using System; namespace TestPro { // Extension Method public static class ExtensionMethod { public static ..

Language/C# 2020.12.26

[C#] ref / out / params

1. ref - 파라미터를 참조형식으로 사용하는 것으로 연산하는 메소드에서 파라미터가 변경되면 원본의 값도 같이 변경된다. 2. out - ref 와 마찬가지로 참조 형식의 파라미터이지만 출력 전용으로 호출하는 입장에서는 초기화할 필요가 없으며, 반드시 연산하는 곳에서 초기화해야 한다. 3. params - 파라미터가 고정된 형태가 아니라 가변적인 것으로 전달할 수 있다. - 배열과 다른 점은 파라미터를 배열로 선언하면 배열 그 자체지만, params 는 동일한 형식의 파라미터 개수가 하나 이상으로 선언할 수 있다. using System; namespace SqlerCSharp.Ch15_01 { class Program { //ref public static void PassByRef(ref int n..

Language/C# 2020.12.26

[C#] 프로퍼티(Property) / 인덱서(Indexer)

- 프로퍼티는 필드와는 달리 Validation을 할 수 있고, 읽기/쓰기 전용과 같은 제한을 할 수 있다. - 객체 지향 관점에서는 불필요한 정보를 숨길 수 있는 정보 은닉의 효과도 가져온다. 1. 프로퍼티 선언 - 프로퍼티는 get/set 구문을 사용하여 선언한다. - get/set 구문에는 public, private와 같은 접근 제한자 설정이 가능하다. public class Employee { private int birthYear; private string name; public int BirthYear { get { return this.birthYear; } set { // validation if(value < 1900) { throw new ArgumentException("Error..

Language/C# 2020.12.26

[C#] 클래스

1. 필드 - 클래스 레벨에서 정의되는 변수, 상수 등 2. 메소드 - 다양한 기능을 처리. - 처리 결과를 반환하거나, 반환 없이 연산. 3. 프로퍼티 - 멤버 변수와 비슷하지만, 멤버 변수는 값을 설정할 때 Validation을 처리할 수 없다. - 하지만 프로퍼티는 get/set을 통하여 입/출력 관리를 할 수 있으며 값 설정 전에 다양한 처리가 가능. 4. 생성자 - 클래스의 인스턴스를 생성하기 위해 여러 가지 초기화 작업을 수행하는 코드. - 객체 생성시 반드시 호출 되는 특수 메소드. 5. 인덱서 - 배열과 비슷한 개념으로 클래스의 객체를 배열과 같은 형태로 정의해서 사용가능. - 다양한 컬랙션, 객체 등에 사용된다. 6. 이벤트 - 버튼 클리고가 같은 컨트롤 혹은 다양한 클래스들의 이벤트를 ..

Language/C# 2020.12.26

[C#] 문자열 다루기 - StringBuilder

1. StringBuilder - string은 값이 계속해서 변하는 빈도가 많을 경우 성능에 좋지 않은 영향을 미칠 수 있다. - StringBuilder 는 값 복사 없이 버퍼의 크기만큼 동적으로 값 변경을 처리할 수 있다. - StringBuilder 는 System 네임스페이스가 아닌 System.Text 네임스페이스에 존재하며 미리 using으로 선언해야 한다. - StringBuilder 를 사용할 경우 다음의 사항을 고려한다. 1) 문자열의 변경 처리가 많이 일어나지 않을 경우에는 string과의 성능 차이가 미미하다. 2) 적은 변경을 StringBuilder 로 선언할 경우 코드의 가독성이 좋지 않다. 3) 문자열의 변화가 클 경우 StringBuilder 의 생성자에 사이즈를 미리 정해..

Language/C# 2020.12.23

[C#] 문자열 다루기 - string, 문자열 포맷

1. String - 내부적으로 처리된 결과를 사용자 화면에 출력을 하거나 이기종간의 통신을 위한 XML의 기본 자료형이 되기도 함. - .NET Framework 에서 string은 유니코드 기반 문자의 집합으로 영어권과 비영어권 문자의 구분 없이 2 byte. - string은 한 번 생성된 객체는 read-only 이다. 아래의 예제에서 str1 은 다른 객체이다. 변수의 명이 같아도 내부적으로 새로운 객체를 생성해 값을 복사한다. string str1 = "string"; str1 += " Hello!"; - 따라서 값을 반복적으로 자주 변경 할 경우 string 으로 처리하기 보다는 StringBuilder 를 사용할 것을 권고하고 있다. 2. String의 메소드와 프로퍼티 멤버 유형 설명 L..

Language/C# 2020.12.23

[C#] 배열 정렬

- Array.Sort()를 이용해 배열을 정렬할 수 있다. - Array.Reverse()를 이용해 오름차순 -> 내림차순으로 변경할 수 있지만 더 간단하게 Array.Sort(src, compare()) 을 이용해 내림차순으로 바로 정렬할 수 있다. using System; namespace SqlerCSharp.Ch08_02 { class Program { static void Main(string[] args) { int[] array = new int[] { 3, 7, 6, 2, 8, 9, 5, 1, 4 }; Console.WriteLine("==정렬 전=="); foreach (var item in array) { Console.WriteLine("{0} ", item); } Console.W..

Language/C# 2020.12.23

[C#] 배열 복사

- 배열의 복사는 Array 클래스의 정적 메소드인 Copy를 이용하거나 - Buffer.BlockCopy 를 이용할 수 있다. - 아래 코드에서는 Buffer.BlockCopy가 좀 더 좋은 성능을 보여준다. using System; using System.Diagnostics; namespace SqlerCSharp.Ch08_02 { class Program { static void Main(string[] args) { // BlockCopy Stopwatch sw1 = Stopwatch.StartNew(); for(int i = 0; i < 10000000; i++) { int[] source = new int[100]; int[] target = new int[100]; Buffer.BlockC..

Language/C# 2020.12.23
반응형