C# 메모. 튜플(Tuple)
C# 메모. 튜플(Tuple)
2019.03.16튜플(Tuple)은 C# 7.0에서 추가된 기능이다. 이제 튜플을 통해서 두 개 이상의 값을 반환하는 메서드를 보다 깔끔하게, 효율적으로 구현할 수 있게 되었다. 기존에는 메소드에서 두 개 이상의 값을 반환하고 싶을 때는 아래와 같은 방법들을 이용했다.(1) out 매개변수 한정자를 통해서 여러 개의 값을 넘겨주는 방법 (비동기 메서드에서는 사용할 수 없음)(2) System.Tuple 형식을 통한 튜플 객체 할당 (튜플 객체를 따로 할당해야 하는 것도 그렇지만 코드가 길게 늘어짐)(3) 두 개 이상의 값을 반환해야 하는 메소드마다 전달을 위한 클래스/구조체를 따로 만들기 (필요 이상으로 코드 오버헤드가 생기게 됨)(4) dynamic 반환형을 통해 익명 타입(Anonymous types)의 객체를 반환..
C# 6.0의 새로운 기능
C# 6.0의 새로운 기능
2019.03.10C# 6.0에서는 어떤 기능들이 추가되었을까? 지금부터 새로 추가된 9가지의 기능들을 함께 살펴보도록 하자. using 정적 지시문(using static)기존에는 정적 메서드를 호출하거나 속성을 가져오기 위해서는 아래와 같이 클래스명과 메서드명 또는 속성명을 같이 적어주어야 했다. double result = Math.Sqrt(a); 그럼 여기에서 아래와 같은 문장을 추가하면 어떻게 될까? using static System.Math; 직접 예제를 보도록 하자. using static System.Math; namespace StaticUsingExample { class Program { static void Main(string[] args) { double a = 4; double result =..
C# 메모. 문자열 보간(String interpolation)
C# 메모. 문자열 보간(String interpolation)
2019.03.09C# 6.0에서 문자열 보간(String interpolation)이라는 기능이 새로 추가되었다. 기존에는 주로 복합 형식 지정(Composite Formatting), 즉 String.Format()와 같은 메서드를 사용하여 형식화된 문자열을 출력할 수 있었으나, 문자열 보간을 사용하면 기존의 방법보다 더 읽기 쉽고 편리하게 형식화된 문자열을 만들 수 있다고 한다. 대체 어떤 녀석일까? 바로 확인해보자. string name = "마크"; var date = DateTime.Now; // 복합 형식 지정(Composite formatting): Console.WriteLine("안녕, {0}! 오늘은 {1}, {2:HH:mm}이야.", name, date.DayOfWeek, date); // 문자열 보..
C# 메모. 널 조건 연산자(Null-conditional operators)
C# 메모. 널 조건 연산자(Null-conditional operators)
2019.03.08C# 6.0에서 소개되었던 널 조건 연산자(Null-conditional operators)란 기능이다. 그전에는 아무런 객체도 참조하지 않을 때 NullReferenceException 예외를 처리해야 했기 때문에 검사 코드를 계속해서 써 내려가야 했지만, 이제는 연산자 하나로 깔끔하게 해결할 수 있게 되었다. 기존에는 아래와 같이 null인지 검사하는 코드가 반복적으로 등장하는 경우가 많았다. 개발자 입장에서는 핵심 코드가 뒤로 밀리거나, 매번 단순한 검사 코드를 계속해서 적어주어야 하는 귀찮음이 있었다.public static string Truncate(string value, int length) { string result = value; if (value != null) // 설명을 위해 빈..
C# 강좌 14편. 확장 메소드, 분할 클래스, 중첩 클래스 [최근 수정 2017.01.11]
C# 강좌 14편. 확장 메소드, 분할 클래스, 중첩 클래스 [최근 수정 2017.01.11]
2018.01.141. 확장 메소드(Extension Method)확장 메소드는 지금까지 우리가 보아왔던 메소드와는 다르게 조금 독특한 메소드라고 할 수 있습니다. 이 확장 메소드는, 기존 클래스의 기능을 확장시켜주는 메소드라고 볼 수 있습니다. 아래는 확장 메소드의 선언 형식입니다. namespace 네임스페이스명 { public static class 클래스명 { public static 반환형식 메소드명(this 확장대상형식 식별자, 매개변수..) { .. } .. } } 선언 형식을 보시면, 정적(static) 클래스를 먼저 정의하고 그 안에 확장 메소드가 정의되었습니다. 확장 메소드 역시 정적(static) 메소드여야 합니다(정적 메소드는 객체를 만들지 않고도 바로 호출이 가능). 그리고 메소드의 첫번째 매개변수..
C# 강좌 13편. 클래스의 상속(Class inheritance) [최근 수정 2017.12.26]
C# 강좌 13편. 클래스의 상속(Class inheritance) [최근 수정 2017.12.26]
2018.01.121. 클래스의 상속(Class inheritance)이번에 배울 건 '클래스의 상속(Class inheritance)'입니다. 어? 상속이란 말을 어디선가 들어본 적이 있는 것 같지 않나요? 짐작하는 그 상속이 맞냐구요? 네 맞습니다. 혹시나 상속이 뭔지 들어보 적 없는 분들을 위해 무엇인지 알려드리려고 합니다. 상속이란 네이버 지식백과를 빌어 다음과 같이 정의되어 있습니다. '일정한 친족적 관계가 있는 사람 사이에 한 쪽이 사망하거나 법률상의 원인이 발생하였을 때 재산적 또는 친족적 권리와 의무를 계승하는 제도'. 즉, 부모님이 돌아가셨다고 할 때 그 유산을 자식이 물려받는 것이라고 할 수 있습니다. 클래스의 상속도 이와 똑같습니다. 객체 지향 프로그래밍에선 부모 클래스와 자식 클래스가 있는데, 부모 ..
12편. 생성자(Constructors)
12편. 생성자(Constructors)
2018.01.12생성자(Constructor) 생성자와 소멸자를 간단히 소개하자면, 생성자는 객체를 생성할 때 호출되는 메서드이며, 소멸자는 객체가 소멸될 때 호출되는 메서드라고 할 수 있습니다. 우선 생성자 부터 알아보고, 이 생성자가 어떻게 사용되는지 아래 예제를 살펴보며 생각해봅시다. 그러기 전에, 생성자의 선언 형식부터 잠깐 보고 들어가보도록 하겠습니다. class 클래스명 { // 여기서 대괄호([])는 선택 사항이라는 의미다. // 따로 제한자를 적지 않으면 기본 접근 제한자인 internal이 사용된다. [접근 제한자] 클래스명(매개변수1, 매개변수2, ...) { // ... } // ... } 생성자의 선언 형식을 살펴보면, 생성자의 이름은 클래스의 이름과 똑같고, 생성자는 메서드와 같이 매개변수를 가질..
C# 강좌 11편. 접근 제한자(Access Modifier), this [최근 수정 2017.12.17]
C# 강좌 11편. 접근 제한자(Access Modifier), this [최근 수정 2017.12.17]
2018.01.121. 접근 제한자(Access Modifier) 오늘은 접근 범위를 결정하게 해주는 접근 제한자에 대해서 알아보려고 합니다. 접근 제한자에는 public, protected, internal, private가 있습니다. 이미 public라는 접근 제한자는 본적이 있죠? 이 네 가지의 접근 제한자에 대해 알아보려고 합니다. 아래는 4개의 접근 제한자를 정리해놓은 표입니다. 접근 제한자 설명 private 클래스 내부에서만 접근이 가능합니다. public 모든 곳에서 해당 멤버로 접근이 가능합니다. internal같은 어셈블리에서만 public으로 접근이 가능합니다. protected클래스 외부에서 접근할 수 없으나 파생 클래스에서는 접근이 가능합니다. protected internal 같은 어셈블리에서만 ..
C# 고급 2편. 링크(LINQ)
C# 고급 2편. 링크(LINQ)
2013.07.15링크(LINQ) LINQ라고 들어보셨나요? 여기서 LINQ는 Language-Integrated Query의 약자로, 이는 통합된 질의 언어를 말합니다. 여기서 질의의 사전적 정의는 "의심나거나 모르는 점을 물음"이며, 이 정의 그대로 질의는 무엇에 대해 물어본다는 것입니다. 좀 더 자세히 말한다면, LINQ를 통해 컬렉션 형태를 띄는 모든 데이터에 질의를 할 수 있으며, 이 강력한 기능을 통해 복잡한 구문을 좀 더 간단하게 필터링하거나 정렬할 수 있다는 등의 특징을 지니고 있습니다. 어디 한번, LINQ가 어떤 강력한 기능을 지니고 있는지 천천히 살펴보도록 합시다. List intList = new List(); int[] numbers = { 1, 3, 4, 6, 5, 9, 8, 12, 15, 18,..