방프리

20.05.11 Chapter2. .Net 리소스 관리 (Item 15) 본문

C#/Effective C#

20.05.11 Chapter2. .Net 리소스 관리 (Item 15)

방프리 2020. 5. 11. 14:56

Item 15: 불필요한 객체를 만들지 마라

 

새로운 객체를 만드는 것은 굉장히 오랜 시간을 필요로 한다. 때문에 자주 사용하는 객체는 Pool이라는 개념을 사용하여

미리 생성한 후 재사용하는 방식을 많이 채택하게 되는데 이번 항목의 주제와 비슷하다.

Pool 개념을 가지고 다음의 코드를 보면 어떤 점이 문제점인지 바로 인지할 수 있다.

기본적으로 Paint라는 이름이 들어가는 함수들은 매 프레임마다 호출해주어야 하는 자주 사용되는 함수다.

가끔 사용되는 함수일 경우엔 몰라도 계속 출력되어야 하는 함수에 객체를 저렇게 생성해준다면?

유지보수가 지속될수록 퍼포먼스가 굉장히 떨어질 것이다. 이럴 경우엔 저자는 다음과 같이 수정을 권한다.

자주 사용되는 객체라면 차라리 지역변수가 아닌 멤버변수로 바꾸어 재사용하는 방법이다. 

하지만 이 방법은 자주!!! 쓰이는 함수의 경우이다. 

C# 내부적으로도 최소한의 객체 생성을 방향으로 디자인 했기 때문에 개발자들도 이에 맞추어 구조를

디자인 하는 것이 좋다고 한다.

하지만 이럴 경우 생성된 객체가 필요 이상으로 오랫동안 남는 단점, Dispose() 메소드의 호출 시점을 결정할

수 없다는 단점 등이 존재하기 때문에 구조 설계 전에 한 번쯤 생각해보아야 한다.

다른 방법으로는 변경 불가능한 타입인데 대표적으로 System.String이 있다.

string 타입의 경우 + 연산자를 통해 서로 다른 문자열을 이어 붙일 수 있는데 이는 원본의 객체를 

수정하는 것이 아닌 새로운 객체를 생성해 수정된 값을 넣어주는 것이다. 왜냐하면 string은 수정할 수 

없는 객체이기 때문이다. 

예를 들어 

이 코드는 컴파일은 다음과 같이 인식한다.

그러므로 string 문자열을 변환할 경우에는 앞서 포스팅한 보간 문자열이나 StringBuilder를 사용해

최소한의 객체생성을 방지해야 한다.

Comments