CS 25

[C#] 생성자와 소멸자

객체를 생성하고 만드는 과정에서 사용되는 생성자와, 언젠간 객체도 사용되지 않는다면 소멸하므로 소멸할 때 사용하는 소멸자에 대해서 알아보겠습니다. # 생성자 이름 그대로 생성할 때 호출되는 녀석입니다. 생성자의 임무는 클래스의 객체를 생성하는 것이며, 동시에 스페셜하게 readonly도 초기화가 가능합니다. class Name { public int a; public int b; public Name() { // 디폴트 생성자 } public Name(int a, int b) { // 매개변수를 입력받아 원하는 값으로 초기화 this.a = a; this.b = b; } } 클래스를 선언할 때 명시적으로 생성자를 구현하지 않아도 객체가 생성이 됩니다. 그 이유는 컴파일러에게 디폴트 생성자를 만들어주기 때..

CS/C# 2021.12.11

[C#] 클래스

프로그래머는 추상주의 예술가라고 합니다. 세상에 존재하거나 존재하지 않는 것을 코드로 나타내야 하며 컴퓨터 세계에서 실체화합니다. 객체로 표현하는 방법이 객체지향 프로그래밍입니다. # 객체 객체란 것은 세상의 모든 것을 지칭하는 단어입니다. 자동차, 연필, 붕어빵 등등 객체의 주요 특징은 속성과 기능이 있습니다. 속성(property) : 데이터 기능(function) : 행동 예를 들어 사람이라는 객체는 속성은 나이, 주민번호, 몸무게, 키가 될 수 있고, 기능은 걷기, 뛰기, 달리기, 먹기와 같이 나열할 수 있습니다. 이러한 객체를 어떻게 만들 수 있을까요? 바로 클래스를 이용해서 만들 수 있습니다. # 클래스 클래스는 객체를 만들기 위한 청사진(틀)입니다. 붕어빵이라는 객체를 만들기 위해서는 붕어빵..

CS/C# 2021.12.11

[C#] 문자열 찾기 함수들

항상 문자열의 함수는 자주 사용하지 않거나 경험이 적으면 까먹는 경우가 종종 있습니다. 매번 서치 해서 보는 것도 좋지만.. 따로 정리를 해두면 어떨까 해서 자료들을 모아 정리해보겠습니다. C#에서는 string에 대해서 여러 가지 다양한 문자열 찾기 함수를 지원하고 있습니다. # IndexOf() : 현재 문자열에서 찾고자 하는 지정된 문자 혹은 문자열의 위치를 앞에서부터 찾아서 반환합니다. 해당하는 부분이 없으면(존재하지 않으면) -1을 리턴합니다. 중요한 점은 맨 처음 발견되는(시작되는) 인덱스를 보고한다는 점입니다. string str = "Hello, World!"; int a = str.IndexOf('W'); // 7 int b = str.IndexOf("rld!"); // 9 int c =..

CS/C# 2021.12.10

[C#] var

[ var ] var에 대해서 정리해봅시다! C++에서도 'auto'라는 키워드가 있었는데, C#에서도 'auto'와 비슷한 기능을 하는 'var'가 존재합니다. var a = 3; var b = "string"; var를 사용해서 변수를 선언하면 컴파일러가 자동으로 해당 변수의 형식을 지정해줍니다. 이러한 키워드는 왜 사용하는지 항상 의문이 들었는데, 변수의 형식이 긴 경우에 간단하게 해 준다는 장점이 있습니다. C++에서는 iterator 같은 형식을 지정할 때 생각보다 길게 되는데 이러한 형식을 줄여주는 것처럼 말이죠. vector v; vector::iterator iter = v.begin(); // 간단해진 타입명 auto iter = v.begin(); vector v2; for(auto i..

CS/C# 2021.12.10

[C#] foreach

이번에는 foreach문에 대해서 공부해보겠습니다. foreach 문이 왜 등장했을까요? 기존에 for, while, do~while 문으로 대체가 가능한데.. 그러다가 어떤 한 블로그의 말을 듣고 납득이 되었습니다. 그 말은 foreach문은 index범위를 벗어나는 위험성이 없다는 것입니다. 무슨말이냐면, 배열이나 컬렉션의 끝에 도달하면 자동으로 반복이 종료하게 되는데요. 만약에 foreach문을 사용하지 않고 기존에 알고 있었던 for문을 이용해서 구현했더라면 프로그래머의 실수로 인해 할당되지 않은 영역을 참조하는 경우가 발생할 수 있습니다. 이러한 경우가 바로 IndexOutOfRangeException 입니다. 정확히는 해당 범위 외부에 있는 인덱스를 사용해서 배열 또는 컬렉션의 요소에 액세스하..

CS/C# 2021.12.05

[C#] null 병합 연산자, ??

null 병합 연산자란? null 병합 연산자는 ?? 입니다. ?? 는 null 조건부 연산자처럼 객체나 변수의 null 검사를 간결하게 해 줍니다. 두 개의 피연산자를 받아들이고 왼쪽 피연산자가 null이라면 오른쪽 피연산자를 반환합니다. 왼쪽 피연산자가 null이 아니라면 왼쪽 피연산자를 반환합니다. 이번에 C#을 공부하면서 느낀 건 null과 관련된 형식에는? 기호가 들어갑니다. Nullable, ?. , ?[]도?로 시작합니다. C, C++에서는 경험하지 못한 새로운 문법입니다. 말보다는 한 번 보는 것이 이해가 잘 된다고 생각합니다. int? num = null; Console.WriteLine($"{num ?? 0}"); // num이 null이기 때문에 0이 출력됩니다. string str ..

CS/C# 2021.12.05

[C#] IsNullOrEmpty

IsNullOrEmpty String 이 null 이거나 empty 이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 함수 형태는 다음과 같습니다. public static bool IsNullOrEmpty([NotNullWhen(false)] String? value); 매개변수 value String 반환 Boolean null 인지 empty 인지 일일이 체크하려고 하면 조건문이 많이 생기게 되어서 생각보다 프로그램이 커질 때 복잡해질 수 있는데, String 클래스의 IsNullOrEmpty 메서드를 사용하면 간단하게 한 번에 체크가 가능합니다. 사용법은 String 클래스에서 static 메서드인 IsNullOrEmpty를 호출하면 됩니다. String 은 총 3가지 형태로 존재..

CS/C# 2021.11.19

[C++] priority_queue

이번에는 우선순위 큐에 대해서 알아보자. 최근 코딩 테스트도 그렇고 가끔 잊을만하면 나오는 개념이다. 기본적으로 학부생 때 알고리즘 시간에 Heap 구현을 해본 적이 있어서 생각보다 쉽게 받아들여진 것 같다. 우선순위 큐 priority_queue 이름 그대로 우선순위로 정렬된 큐를 의미한다. 어떤 원소를 삽입하거나 삭제할 때 그 내부에서는 우선순위에 따라서 자동으로 정렬되어 보존된다. 내부적으로 Heap을 사용해서 정렬하기 때문에 삽입과 삭제에 대한 연산은 O(logN)에 이루어진다. 운영체제 시간에 선점하는 프로세스 스케줄링의 경우, 우선순위가 기존 ready큐에서 있던 다른 프로세스의 우선순위보다 높은 프로세스가 들어오면 그것부터 cpu를 할당하는 우선순위 스케줄링 알고리즘에서도 나온다. 사용법 #..

CS/Data Structure 2021.08.04