일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Framework
- 이미지 폰트
- Dynamic Font
- unity
- jumping ball
- 커스텀 패키지
- ui
- 2D Camera
- 다이나믹 폰트
- AES
- Custom Package
- adfit
- Tween
- RSA
- Dots
- C#
- job
- DotsTween
- 샘플
- 최적화
- sha
- 프레임워크
- 텍스트 메시 프로
- Unity Editor
- 가이드
- base64
- 단말기 해상도
- TextMeshPro
- Job 시스템
- 암호화
- Today
- Total
EveryDay.DevUp
C# 2.0 본문
주요 변경 사항
- Generic / ?? (널병합 연산자) / default 예약어 / yield return, break / partial / 값 형식? Nullable / Anonymous method / static class
Generic
- C# 1.0에서 기본 타입으로 컬랙션 객체를 생성할 경우 박싱/언박싱 문제가 발생
: ArrayList<object> 형식으로 구현되었기 때문에 int <-> object로 박싱/언박싱이 발생
: 박싱 -> 스택 메모리에 값이 힙메모리에 복사되는 것 // 언박싱 -> 힙 메모리에 값이 스택메모리에 복사 되는 것
- Generic을 사용할 경우 CLR은 JIT 컴파일 시에 타입에 따라 확장된 기계어 코드를 생성
- 클래스와 메서드에 사용할 수 있음
- 제네릭을 사용함으로써 박싱/언박싱의 문제와 중복된 코드 문제를 해결할 수 있음
- 제네릭은 형식 매개 변수 제약 조건을 통해 형식 매개 변수에 사용할 수 있는 타입을 지정할 수 있음
: class, struct, new, 상속받은 클래스 (인터페이스 등)
?? (널 병합 연산자)
- 피연산자1 ?? 피연산자2
: 참조형식의 피연산자1이 null 이 아니라면 피연산자1을 null 이라면 피연산자2를 반환
default 예약어
- 초기화 되지 않은 값 형식의 초기 값은 0, 참조 형식의 초기 값은 null로 초기화 됨
: struct의 default는 구조체를 생성하여 내부의 선언된 변수를 값 형식 또는 참조 형식에 따라 초기 값을 설정함
public struct A
{
public int value;
}
public struct B
{
public A aStruct;
}
public class DefaultKeyword : IExample
{
public void Run()
{
var bStruct = default(B);
Console.WriteLine(bStruct.aStruct.value);
}
}
// 결과 0
yield return / break
- IEnumerable, IEnumerator 인터페이스를 이용해 한 열거 기능을 쉽게 구현할 수 있음
- yield return이 실행된 코드의 위치를 기억했다가 다음에 다시 한번 메서드가 이후 코드부터 실행을 재개하는 개념
: 컴파일러는 yield 문이 사용된 메서드를 IEnumerable, IEnumerator 를 구현한 코드로 치환
Partial
- 클래스의 소스코드를 2개 이상으로 나눌 수 있도록 구현 가능
- 컴파일러는 빌드 시에 같은 프로젝트에 있는 partial 클래스를 단일 클래스로 빌드
Nullable
- System.Nullable<T> 구조체를 의미
- 일반적인 값 형식은 초기 값이 0으로 할당되는데, 초기 값이 0인지, 0이라는 숫자를 넣은 것인지 상태를 구분할 수 없는 단점이 있음
- 값 형식에 ? 문자를 함께 붙일 경우 컴파일러가 자동으로 Nullable<T> 로 변경함
Anonymous Method
- 이름이 없는 메서드로, 델리게이트에 전달되는 메서드가 일회성으로 필요할 때 사용
- 익명 메서드가 사용되면 빌드 시점에 특별한 문자열을 하나 생성해서 메서드를 구현함
Static classes
- 클래스의 정의에도 static 예약어를 사용할 수 있게 되었고, 정적 클랙스에는 정적 멤버만을 내부에 포함할 수 있음
'C#' 카테고리의 다른 글
[C#] var 키워드 (0) | 2023.11.09 |
---|---|
[Unity] C# 최적화 - Part1 (0) | 2023.10.02 |
[Unity] 특성 ( Attribute Class ) - 1 (0) | 2022.07.07 |
[Unity] .Net 디컴파일 ( JetBrain DotPeek ) (0) | 2021.12.30 |
[Unity] 메서드 매개 변수 ( 값 형식, 참조 형식, in, out, ref, params ) (0) | 2021.12.28 |