일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프레임워크
- Dynamic Font
- 가이드
- 텍스트 메시 프로
- AES
- Dots
- 샘플
- DotsTween
- 다이나믹 폰트
- 이미지 폰트
- 2D Camera
- RSA
- base64
- unity
- Tween
- Framework
- job
- Unity Editor
- 최적화
- jumping ball
- ui
- adfit
- Custom Package
- sha
- 커스텀 패키지
- 암호화
- 단말기 해상도
- Job 시스템
- TextMeshPro
- C#
- Today
- Total
EveryDay.DevUp
[Unity] C# 최적화 - Part1 본문
* 단축 평가
- 조건식에서 논리 연산자를 사용할 때, 단축 평가가 되는 경우가 있음
var x = 1;
var y = 2;
// x > 1 이 false 임으로, 뒤의 y <= 2 가 평가되지 않음
if ( x > 1 && y <=2 ) {}
// x >= 1 이 true 임으로, 뒤의 y <=2 가 평가되지 않음
if ( x >= 1 || y <= 2) {}
: 단축 평가를 고려했을 때, 조건 식의 연산이 더 작은 것을 먼저 평가될 수 있도록하면 좋음
[참고] 시작하세요 9.0 프로그래밍
* 프로퍼티
- 클래스 / 구조체에 있는 멤버 변수를 public으로 접근 제한자를 정의하는 대신 프로퍼티를 사용하여 외부에서 접근할 수 있도록함
: 멤버 변수를 직접 접근할 경우, 멤버 변수의 수정이 있을 때 사용하고 있는 코드 전체를 수정해야하는 이슈, 디버깅이 어려울 수 있음
class A
{
public int temp = 0;
}
class B
{
private void Test(A a)
{
Debug.Log(a.temp);
}
}
// temp의 값을 temp + 1로 변경해야하는 경우
// 위의 코드는 a.temp + 1 로 수정해야함
class A
{
public int Temp
{
get
{
return 0;
}
}
}
class B
{
private void Test(A a)
{
Debug.Log(a.Temp);
}
}
// Temp의 값을 +1 하고 싶은 경우 Temp.get return 0 + 1;
// getter에서 값을 수정하는 것만으로도 다른 코드 수정없이 적용이 가능함
[참고] 시작하세요 9.0 프로그래밍
* 종료자 (소멸자)
- class가 메모리에서 해제될 때 호출되는 함수
: ~클래스명() 으로 정의
: 소멸자를 정의한 경우, 소멸자를 정의하지 않았을 때보다 GC 에 대한 부담이 더 발생함
1) 소멸자를 정의한 경우, Runtime 시에 소멸자 호출을 위한 Finalization 큐에 해당 객체가 등록됨
2) 해당 객체가 GC의 대상이 된 경우 Finalization 큐 -> Freachable 큐에 보내짐
3) 별도의 스레드에서 Freachable 큐에 있는 객체의 소멸자를 호출
4) 소멸자가 호출된 객체는 GC에 의해 관리되는 힙에서 해제 됨
- 관리되지 않는 자원을 사용했을 때, 소멸자를 사용
: IDisposable 을 추가해서, Dispose을 개발자가 명시적으로 호출할 수 있도록함
: Dispose를 호출하지 않은 경우를 위해, 소멸자를 정의
: Dispose에서 GC.SuppressFinalize 를 호출해서 Finalization 큐에서 해당 객체를 제거할 수 있도록함
[참고]
- 시작하세요 9.0 프로그래밍
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sam_sist&logNo=221002701762
* 형변환 연산자 오버로드
- 형변환 연산자를 사용할 경우, 암시적은 오버로드는 지양하고, 명시적 형변환만 오버로드 할 수 있도록 함
: 암시적인 형변환으로 인한 실수를 방지하기 위함
[참고]
- 시작하세요 9.0 프로그래밍
* 콜백 구현
- 콜백 구현 시 delegate 와 interface를 사용할 수 있음
: delegate는 메서드를 여러개 담을 수 있기 때문에 다중 호출이 필요한 경우에 사용
: 일반적인 경우 interface를 통해 구현
[참고]
- 시작하세요 9.0 프로그래밍
책 구매 링크
시작하세요! C# 9.0 프로그래밍
정성태 저
이 책의 목표는 확실하다. 여러분이 프로그램을 만들고자 할 때 사용하게 될 C# 프로그래밍 언어의 기초를 단단하게 다질 수 있게 하는 것이다. 이 책에서는 C# 언어의 최신 버전인 C# 9.0의 문법까지 설명하고 있으며, 단순히 언어의 문법을 습득하는 데 그치지 않고 실제로 프로그램을 제작할 수 있는 단계까지 학습할 수...
'C#' 카테고리의 다른 글
[C#] var 키워드 (0) | 2023.11.09 |
---|---|
[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 |
[Unity] 액세스 한정자 ( public, protected, internal, private ) (2) | 2021.12.27 |