
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 타입이나 인터페이스 타입으로 변경하는 코드는 가능한 한 작성하지 말아야한다.