EveryDay.DevUp

[Unity] C# 최적화 - Part1 본문

C#

[Unity] C# 최적화 - Part1

EveryDay.DevUp 2023. 10. 2. 15:37

* 단축 평가

- 조건식에서 논리 연산자를 사용할 때, 단축 평가가 되는 경우가 있음

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

 

19회차_GC의 Collect, WaitForFullGCComplete, finalize 메서드(소멸자)

http://blog.naver.com/sam_sist/220991901842 위의 GC(가비지 컬렉션) 포스팅의 추가 보충 설명으로 Co...

blog.naver.com

* 형변환 연산자 오버로드

- 형변환 연산자를 사용할 경우, 암시적은 오버로드는 지양하고, 명시적 형변환만 오버로드 할 수 있도록 함

: 암시적인 형변환으로 인한 실수를 방지하기 위함

[참고]

- 시작하세요 9.0 프로그래밍

* 콜백 구현

- 콜백 구현 시 delegate 와 interface를 사용할 수 있음

: delegate는 메서드를 여러개 담을 수 있기 때문에 다중 호출이 필요한 경우에 사용

: 일반적인 경우 interface를 통해 구현

[참고]

- 시작하세요 9.0 프로그래밍

 

책 구매 링크

시작하세요! C# 9.0 프로그래밍

시작하세요! C# 9.0 프로그래밍

정성태

이 책의 목표는 확실하다. 여러분이 프로그램을 만들고자 할 때 사용하게 될 C# 프로그래밍 언어의 기초를 단단하게 다질 수 있게 하는 것이다. 이 책에서는 C# 언어의 최신 버전인 C# 9.0의 문법까지 설명하고 있으며, 단순히 언어의 문법을 습득하는 데 그치지 않고 실제로 프로그램을 제작할 수 있는 단계까지 학습할 수...