더북(TheBook)

만약 firstName + " " 연산이 먼저 새로운 문자열을 만들고, 그다음 middleName을 더하면서 다시 새 문자열을 만들었다면 이 방식은 좋은 방법이라고 보기 힘들다. 하지만 실제로 컴파일러는 최종 문자열을 위해 String.Concat() 함수를 1번 호출한다. 즉, 최종 문자열의 길이를 구한 후 그에 따른 새 버퍼를 만들고 문자열을 할당하여 최종 결과를 한 번에 반환한다. 따라서 확실히 빠르다. 그러나 여러 문자열을 if 절 혹은 루프로 연결한다면 이것까지는 컴파일러가 최적화할 수 없다. 문자열을 연결해도 될 때와 그렇지 않은 때를 알아야 한다.

즉, 불변성은 절대 깰 수 없고 신성하게 보호해야 하는 것이 아니다. 문자열이나 다른 불변 구조를 그 자리에서 수정하는 방법이 있지만 이는 대부분 안전하지 않으며, 비현실적인 코드와 연관되어 있다. 이러한 문자열은 .NET 런타임에 의해 중복 삭제되고 해시 코드와 같은 일부 속성이 캐시화되기 때문에, 일반적으로 불변 구조를 수정하는 것을 권장하지 않는다. 내부적인 구현은 불변성의 특징에 크게 의존한다.

문자열 함수는 기본적으로 현재 문화권에서 동작한다. 따라서 여러분이 만든 앱이 다른 나라에서는 동작하지 않아 곤란할 수도 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.