[Effective C#] 박싱과 언박싱을 최소화 하라

WH_NAM·2024년 2월 16일

Effective C#

목록 보기
9/23
post-thumbnail

Effective C# Item 9

박싱
값 타입의 객체를 타입이 정해져 있지 않은 임의의 참조 타입 내부에 포함시키는 방법

int temp = 10;
object box = temp;

언박싱
박싱되어 있는 참조 타입의 객체로부터 값 타입 객체의 복사본을 가져오는 방법

object box = 10;
int temp = (int)box;

박싱과 언박싱은 성능에 좋지 않은 영향을 미친다.
수행하는 과정에서 임시 객체가 생성되곧 하는데, 간혹 이로 인해 예상치 못한 버그가 발생하기도 한다.
따라서 박싱과 언박싱은 가능한 한 피하는 것이 좋다.
제네릭 클래스와 제네릭 메서드를 사용하면 박싱과 언박싱을 피할 수 있다.

참조 타입을 요구하는 곳에 값 타입의 객체를 사용하면 컴파일러는 자동으로 박싱과 언박싱을 수행한다.

Console.WriteLine($"A few numbers : {firstNumber}, {secondNumber}");

정숫값은 값 타입이므로 값을 문자열로 변환하기 위한 함수를 호출할려면 반드시 박싱을 수행해야 한다.

Console.WriteLine($"A few numbers : {firstNumber.ToString()}, {secondNumber.ToString()}");

이와 같이 코드를 작성하면 값 타입인 정수 타입 객체를 System.Object 타입으로 변경하는 것을 피할 수 있다.

결론
제네릭이 아닌 컬렉션 내에 값 타입의 객체를 저장하거나 System.Object 내에 정의된 메서드를 호출하기 위해서 System.Object 타입으로 형변환을 수행하는 것과 같이 값 타입을 System.Object 타입이나 인터페이스 타입으로 변경하는 코드는 가능한 한 작성하지 말아야한다.

profile
안녕하세요

0개의 댓글