Programming/C# 15

C# 6.0 변경점

- C# 6.0에 대응되는 .NET Framework는 4.6 버전이다. 하지만 더 이상 .NET Framework에 종속적이지 않게 바뀌어서 독자적인 컴파일러 업그레이드가 가능하게 바뀌었으므로, C# 6.0 이상의 컴파일러를 .NET Framework 4.6 이하 환경에 설치해 실습하는 것이 가능하다. - 주요한 변경점은 "간편 표기법"을 제공하는 정도이다. [ 1. C# 3.0에 구현된 자동 구현 속성(Auto-implemented Properties)의 초기화 구문 추가 ] - 자동 구현 속성을 사용한 경우 초기값을 부여하려면 별도로 생성자 등의 메서드를 이용해 코드를 추가해야만 했다. 이렇게 구현할 경우, 설정자(set) 메서드를 반드시 구현해야하는 강제성을 수반하므로, 이를 원치 않는 경우에는 ..

Programming/C# 2019.06.29

C# 5.0 변경점 - 호출자 정보, 비동기 호출

- C# 5.0에 대응되는 닷넷 프레임워크는 4.5이고 주요 개발환경은 Visual Studio 2012, 2013이다. 닷넷 4.5는 윈도우 XP, 서버 2003을 지원하지 않는다는 점에 유의하자. 만약 개발한 프로그램이 XP/서버 2003에서 실행되어야 한다면 닷넷 4.0용 응용프로그램을 만들어야 한다. - 닷넷 프레임워크 4.5, 4.6, 4.7의 특징으로, 이것이 닷넷 4.0의 교체판이라는 점이다. 기존의 닷넷 프레임워크는 컴퓨터에 설치하면 "%windir%\Microsoft.NET\Framework" 폴더 아래에 각 버전 번호에 해당하는 폴더가 생성되는 식으로 설치 되었으나, 닷넷 4.5 ~ 4.7은 닷넷 4.0이 설치되어 있다면 덮어써버리고, 4.0이 설치되지 않았다면 새롭게 4.0 폴더에 설..

Programming/C# 2019.04.24

C# 4.0 변경점 - 선택적 매개변수/명명된 인자, dynamic 예약어

[ C# 4.0 ] - C# 4.0으로 만든 응용프로그램은 닷넷 프레임워크 4.0에서 실행된다. 닷넷 4.0이 기본 설치된 윈도우 운영체제는 없다.(확인 필요) - 닷넷 4.0은 CLR 버전이 올라갔다는데 의미가 있다. 닷넷 4.0은 새롭게 CLR 4.0에서 운영되며 GAC(Global Assembly Cache)도 분리됐다. 이전까지는 닷넷 1.0 ~ 3.5용으로 빌드되는 모든 어셈블리가 GAC에 추가되는 경우 단일하게 "%windir$\assembly"로 등록됐지만 닷넷 4.0 이상을 대상으로 빌드된 어셈블리는 Microsoft.NET 폴더 아래의 assembly 폴더로 바뀌었다. CLR 2.0 GAC 위치 : %windir%\assembly CLR 4.0 GAC 위치 : %windir%\Micros..

Programming/C# 2019.04.15

C# 3.0 변경점(3) - LINQ(Language Integrated Query)

[ LINQ ] - 데이터의 선택/열거 작업을 일관된 방법으로 다루기 위해 기존 문법을 확장시킨 것 - 전형적인 사용 예는 컬렉션을 대상으로 쿼리를 수행하는 것이다. using System; using System.Linq; using System.Collections.Generic; namespace ConsoleApp1 { class Person { public string Name { get; set; } public int Age { get; set; } public string Address { get; set; } public override string ToString() { return string.Format("{0}: {1} in {2}", Name, Age, Address); } } ..

Programming/C# 2019.04.09

C# 3.0 변경점(2) - 람다 식

[ 람다식 ] - 람다 대수의 형식을 C#에서 구현한 문법이다. 코드로서의 람다식(익명 메서드의 간편 표기 용도), 데이터로서의 람다 식(람다 식 자체가 데이터가 되어 구문 분석의 대상이 된다.) 으로 구분된다. [ 코드로서의 람다 식 ] - 익명 메서드의 구문을 더욱 단순화 할 수 있다. using System; using System.Threading; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Thread thread = new Thread( delegate (object obj) { Console.WriteLine("ThreadFunc in anonymous method called!"); }); // Thr..

Programming/C# 2019.04.04

C# 3.0 변경점(1) - var, 자동 구현 속성, 객체/컬렉션 초기화, 익명 타입, 확장 메서드

- C# 3.0으로 개발한 응용 프로그램은 .NET Framework 3.5이상에서 실행된다. [ var 예약어 ] - 타입 추론 기능이 추가되면서 메서드의 지역 변수 선언을 타입에 관계없이 var 예약어로 사용가능 - 컴파일 시점에 결정된다. using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace ConsoleApp1 { class Program { static void Main(string[] args) { List numbers1 = new List(new int[] { 1, 2, 3, 4, 5 }); List numbers2 = new List(new int[] { 6, 7..

Programming/C# 2019.04.03

C# 2.0 변경점(2) - yield return/break, partial class, Nullable, 익명 메서드, 정적 클래스

[ yield return/break ] - "yield return", "yield break" 예약어를 이용하면 기존의 IEnuerable, IEnumerator 인터페이스를 이용해 구현했던 열거 기능을 쉽게 구현할 수 있다. - IEnumerable을 이용해서 아래와 같이 무한 집합을 구현할 수 있다. using System; using System.Collections; using System.Collections.Generic; namespace ConsoleApp1 { // 1부터 자연수를 무한하게 출력(int 범위) public class NaturalNumber : IEnumerable { public IEnumerator GetEnumerator() { return new NaturalN..

Programming/C# 2019.03.31

C# 2.0 변경점(1) - 제네릭스(Generics), ?? 연산자

[ 제네릭스(Generics) ] - 기존 C# 1.0에서는 기본 형식으로 컬렉션 객체를 사용하는 경우 박싱/언박싱 문제가 발생한다. 즉, 값형식들을 참조형식인 object로 바꾸는 과정에서 힙에 object instance를 할당하게 되어 성능 저하 문제가 발생한다. - 이를 보완하기 위해, 제네릭스를 도입하였다. using System; namespace ConsoleApp1 { public class GenericsSample1 { T item; public GenericsSample1(T value) { item = value; } } // 형식 매개 변수의 이름은 아무렇게나 지정가능 public class GenericsSample2 { K item; public GenericsSample2(K..

Programming/C# 2019.03.31

리플렉션(Reflection)

[ 리플렉션 ] - C# 코드가 빌드되어 어셈블리에 포함되는 경우, 그에 대한 모든 정보를 조회할 수 있는 기술을 의미한다. - 리플렉션을 이용하면 현재 AppDomain의 이름과 그 안에 로드된 어셈블리 목록을 구할 수 있다.(AppDomain - CLR이 구현한 내부적인 격리공간. 일반적으로는 1개의 공유 AppDomain과 1개의 기본 AppDomain으로 구성됨) - 닷넷 프로그램이 실행되면 기본적으로 1개의 AppDomain이 있어야 하는데, 이를 "기본 응용프로그램 도메인(default AppDomain)" 이라 한다. using System; using System.Reflection; namespace ConsoleApp1 { class Program { static void Main(st..

Programming/C# 2019.03.12

MSSQL Database 연동(2)

[ 데이터 컨테이너(MSSQL) ] - 데이터 컨테이너 : 데이터를 담고 있는 용도의 타입을 의미 - 실무에서는 데이터베이스 연동을 할 때, 응용프로그램에서 직접 SqlCommand를 이용해 데이터베이스 조작을 하지 않고 테이블 단위로 조작 작업을 담당하는 DAC(Data Access Component) 클래스를 만들어서 간접적으로 연동한다. (응용 프로그램과 데이터베이스 사이에 Layer를 두는 것과 같다.) - 아래는 "MemberInfo" 테이블에 해당하는 데이터 컨테이너를 정의하는 예제이다. using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; u..

Programming/C# 2019.03.11