C# Study/C# 기초 맨텀 2021. 4. 10. 18:38
Value 튜플 - 여러 필드를 담을 수 있는 구조체. (Tuple과 ValueTuple은 다르다!) - System.ValueTuple 구조체를 기반으로 만들어짐. - 명명되지 않은 튜플과 명명된 튜플끼리는 필드의 수와 형식이 같다면 할당이 가능함. var tuple = (Name: "테스트", Age : 15); // 명명된 튜플 var tuple2 = ("테스트", 15); // 명명되지않은 튜플 var tuple = (Name: "테스트", Age: 15); var (name, age) = tuple; Console.WriteLine(name); var (name2, _) = tuple; // 특정 필드를 무시할 수 있음 Console.WriteLine(name2); Tuple과 ValueTupl..
C# Study/C# 기초 맨텀 2021. 4. 10. 17:59
인터페이스 (interface) - 클래스와 비슷하지만 메서드, 이벤트, 인덱서, 프로퍼티만을 가질 수 있다. - 구현을 가질 수 없다. - 인터페이스는 접근 제한 한정자를 사용할 수 없고 모든 것이 public으로 선언된다. - 인터페이스를 상속하는 인터페이스도 만들 수 있다. - C#에서는 클래스의 다중상속을 허용하지 않지만, 인터페이스의 다중상속은 허용한다. 다중상속은 불가능하지만, 포함(Containment) 기법을 통해 기능을 클래스로 만들어서 필드로 선언하는 방법도 있다. 추상 클래스 (abstract class) - 인터페이스와 달리 구현을 가질 수 있다. - 한정자는 명시하지 않으면 private로 선언된다. ( 일반 클래스와 동일 ) - 추상 메소드를 가질 수 있다. - 추상 클래스를 상..
C# Study/C# 기초 맨텀 2021. 4. 9. 21:31
종료자 - 클래스 이름 앞에 ~붙이는 형태로 구현 가능 (C++과 동일) - 그러나 구현하지 않는 편이 좋음. 1) 명시적으로 구현되어 있으면 GC가 object로부터 상속받은 Finalize() 메서드를 클래스의 족보를 타고 올라가며 호출하여 성능의 저하를 가져올 확률이 높음 2) 언제 GC가 수거해갈지 예측할 수 없음 class MyClass() { public MyClass() { // 생성자 } public ~MyClass() { // 종료자 } } 얕은 복사 - 참조형식으로 복사한 것. 같은 힙 공간을 가리키고 있다. 깊은 복사 - 별도의 힙 공간에 객체를 복사한 것. - 보통은 별도로 프로그래머가 구현한다. this() 생성자 - 생성자를 오버 로딩하여 구현할 때, this()를 사용하여 코드..
C# Study/C# 기초 맨텀 2021. 4. 9. 20:58
값에 의한 전달 - 매개변수는 메서드 외부에서 메서드 내부로 데이터를 전달하는 매개체일 뿐이다. - 그 데이터가 값이든 참조든 상관없이 데이터가 복사된다! public static void Main() { int a = 0; int b = 1; int sum = Plus(a, b); } public int Plus(int x, int y) { } - 위와 같은 상황에서는, a에는 0, b에는 1이 할당되어있다가 Plus를 선언하는 순간 int x = a; 와 int y = b; 로 값이 복사된다. (값에 의한 전달) 참조에 의한 전달 - ref 키워드를 이용하여 public static void Main() { int a = 0; int b = 1; Plus(ref a, ref b); } public v..
C# Study/C# 기초 맨텀 2021. 4. 9. 20:30
기본형 for문 int[] temps = new int[] { 1, 2, 4 }; for (int i = 0; i = 0; i--) { Console.Write(temps[i]); }
C# Study/C# 기초 맨텀 2021. 4. 9. 18:01
Null 병합 연산자 (??) - 왼쪽 피연산자가 null이 아니면 -> 왼쪽 항을 반환 - 왼쪽 피연산자가 null -> 오른쪽 항을 반환 int a = 1; int? b = null; Debug.Log(${a ?? 0}); // null이 아니라 1이 출력됨. Debug.Log(${b ?? 3}); // null이라 3이 출력됨. 연산자의 우선순위 우선순위 종류 연산자 1 증가/감소 연산자 및 Null 조건부 연산자 후위 ++/--연산자, ?., ?[] 2 증가/감소 연산자 전위 ++/-- 연산자 3 산술 연산자 * / % 4 산술 연산자 + - 5 시프트 연산자 > 6 관계 연산자 = is as 7 관계 연산자 == != 8 비트 논리 연산자 & 9 비트 논리 연산자 ^ 10 비트 논리 연산..