
표준 입출력 C#에 대한 공부를 시작하였는데 어떤 프로그래밍 언어를 배울 때 가장 먼저 시작하는 것은 역시 입출력 방법이라고 생각한다.
클래스 C#에서 클래스를 사용하는 방법은 C++과 살짝 다르다. 아래 코드는 Derived 클래스가 Base 클래스를 상속받는 간단한 구조를 나타낸 코드다. C#의 클래스는 다음과 같은 특징을 가지고 있다. 각 필드, 메소드마다 접근지정자(public, private, protected)를 지정할 수 있다. 지정하지 않을 경우 기본적으로 private로...

인터페이스 인터페이스는 '클래스들이 제공하는 메소드들을 미리 정의해놓은 규약'이라고 할 수 있다. 즉, 특정 인터페이스를 구현하는 클래스는 해당 인터페이스가 정의하는 메소드들을 구현해야 한다. > 인터페이스와 클래스간에는 '구현'이, 인터페이스간에는 '상속'이라는 표
var C++에는 변수를 선언하고 초기화를 하지 않으면 쓰레기 값이 들어간다고 하지만 C#에서는 초기화 하지 않고 Read를 하면 컴파일 에러가 발생한다. 아래와 같이 코드를 작성하면 에러가 발생할 것이다. 아래 예제와 같이 a, b라는 2개의 변수가 있고 b는 초기화 될 때 a의 값으로 초기화 된다고 하자. a, b의 자료형은 int로 동일하지만 만약...
System.Object C#의 가장 중요한 특성 중 하나는 '모든 Type은 System.Obejct를 상속받는 것'이다. 다시말하면, C#언어의 모든 타입은 System.Object가 제공하는 메소드를 가지고 있다는 것이다. System.Obejct에는 4개의 instance method와 2개의 static method가 존재한다. public vi...

Struct와 Class 1. C++에서의 Struct와 Class C++에서 구조체나 클래스를 사용할 때 어느 메모리 영역에 할당될까? 아래 예제는 간단한 구조체를 정의하고 메모리 영역에 생성하는 예제이다. Point 구조체를 생성하는 부분 중 1)에 해당하는 부분을 그림으로 나타내난 아래 그림과 같다. pt1이 생성되고 pt2가 생성되면 pt1값이 ...
Equality 참조 타입과 값 타입의 동등성 비교는 비교할 때 ==를 사용하는지 Equals를 사용하는지에 따라 다르다. 값 타입의 비교는 어느정도 예상할 수 있겠지만 참조 타입의 경우 실제 내부 값을 비교하는지 객체의 주소값을 비교하는지 굉장히 헷갈릴 수 있다고 생각한다. 1. Reference type 아래 코드는 Point 클래스를 정의하고 서로다...
Nullable 참조 타입의 경우 값이 없을 때 null을 이용해 값이 없음을 나타낼 수 있지만 값 타입은 null을 사용할 수 없다. 아래 코드와 같이 어떤 함수 내에 특정 조건에 있을때에는 null을 사용할 수 없기 때문에 INF에 해당하는 특정 숫자를 사용해야 한
접합/조건부 연산자 1. 조건부 연산자 null이 가능한 참조값에 특정 필드나 메소드에 접근한다면 Exception이 발생하기 때문에 참조타입에 null 체크하는 것이 중요하다. 아래 예제에서 Car 클래스를 생성하는 CreateCar 함수는 null을 반환할 수 있기 때문에 바로 Car.Go()를 하기 보다 Car 객체가 null인지 확인해야한다. ...
Casting 각 자료형은 서로 변환하는 것이 가능하다. 형변환의 방법으로 암시적 형변환과 명시적 형변환이 있다. 암시적 형변환은 int -> double처럼 크기가 작은 자료형에서 큰 자료형으로 변환되는 것과 같이 컴파일러가 암시적으로 간주할 수 있는 형변환 방식이다. 반면, 이와 반대로 크기가 큰 자료형에서 작은 자료형으로 변환될 때 데이터 손실을 방...
Boxing / Unboxing Boxing과 Unboxing을 설명하기 전에 값타입과 참조타입간의 Casting과정에서 각 변수가 어느 메모리 위치에 저장되는지를 살펴보자. 아래 예제는 값타입인 int형 변수와 참조타입인 object형 변수간의 Casting을 나타낸 예제이다. int에서 object로, object에서 int로 Casting되는 부분...

Boxing / Unboxing 1. 동등 비교 C#에서 모든 객체는 object를 상속받고 obejct내에 정의되어 있는 기본 함수들을 사용할 수 있다. 이 중 Equals 함수에서 불필요한 Boxing/Unboxing이 발생할 수 있다. 아래 예제는 Point 클래스에서 Equals 함수를 재정의를 하고 이를 사용하는 예제이다. CompareTo와...
식 본문 메소드 메소드 구현이 간단할 때 => 뒤에 반환값을 표시하는 방식으로 구현하는 방법으로 아래와 같이 사용할 수 있다.
어떤 클래스의 필드를 외부에서 Read / Write하는 방법에는 여러가지가 있다. 가장 쉬운 방법은 아래 코드와 같이 해당 필드를 public으로 설정하는 것이다.
C#에는 C++의 template와 같이 자료형을 실제 사용할 때 지정할 수 있는 기능이 있는데 Generic(제네릭)이라고 한다.
C#에서는 함수를 변수처럼 다루기 위해 Delegate라는 기능을 제공하는데 함수의 반환형과 매개변수 형식을 하나의 타입으로 저장할 수 있다.
C#에서는 delegate를 사용하는 과정에서 독립성을 제공하기 위해 event라는 기능을 제공한다. event를 사용하면 delegate를 대입 연산자로 초기화할 수 없고 +=이나 -=으로만 메소드를 등록할 수 있게 해준다.
C#에서는 동일한 타입의 객체를 여러개 보관하는 방법으로 Collection이라는 클래스를 제공하는데 Linked List* / Tree / Hash Table 이 주요 클래스이다.
C#의 Collection에는 여러 함수들이 존재하는데 특정 원소의 위치를 찾는다거나, 정렬하는 기능들이 존재한다.

C참조 타입의 객체를 생성하면 메모리가 0으로 초기화되고 생성자를 호출한다.멤버 변수가 0, null로 초기화 된다.정의된 생성자가 없으면 매개변수가 없는 기본 생성자를 제공한다abstract class는 protected 수준의 생성자를 제공한다.
생성자가 없어도 객체를 생성할 수 있다. 인자가 없는 생성자를 직접 만들수는 없다. C#에만 적용되는 제약 C# 10.0 버전이후로는 가능하다고 한다.

C아래 코드를 보면 ^1과 같이 인덱스 숫자 앞에 ^가 붙은 것이 Index 객체이고 ^가 붙은 것은 '뒤에서부터 인덱스 참조를 한다.'는 것을 의미한다.^가 붙은 인덱싱은 0부터 시작하는 것이 아니라 1부터 시작하기 때문에 ^1이 제일 뒤에 있는 것을 가져온다.