C++ 쟁이가 C#을 배워보자 - 문자열 string
C# 관련 첫 포스트인 " C++ 쟁이가 C#을 배워보자 - 변수 " 편을 보면 null 값 항목에 다음과 같은 내용이 있다. 기본 타입에서 string을 제외한 타입은 값 타입이기 때문에 반드시 값을 가져야 함. (string은 참조 타입이라 null 가능) C++과 달리 C#에서는 포인터 타입을 직접적으로 다루지 않는다. (물론 unsafe 키워드를 사용하여 다룰수는 있지만 그다지 권장되지는 않는다.)또한 자바와 유사하게 메서드 호출 시 string을 제외한 기본 타입 및 struct 타입은 값(value type) 형태로 넘어가게 되어 메서드 내부에서 변수의 값을 변경해도 메서드 호출부까지는 변경 내용이 전달되지 않는다. void foo(int i) { i++; } int val = 100; foo(val); //foo에서 값을 1 증가 시켰지만 WriteLine으로는 100이 출력됨 System.Console.WriteLine($"{val}"); 위와 같은 코드를 실행하더라도 정수형 변수 val이 Call by Value 형태로 메서드 foo에 전달되었기 때문에 foo 내부에서 변경한 값이 WriteLine 출력시 반영되지 않는다. 즉, foo에서 i++한 내용은 foo 내부에서만 유효하다. 자, 그렇다면 string 타입은 어떤가? 분명히 서두에 string은 참조 타입이라고 기술하였으므로 메서드의 파라미터로 넘길 때 Call by Reference로 넘어가고, 메서드 내부에서 문자열을 조작하면 바뀔 것이라고 추측이 가능하다. void fooString(string str) { str = "Hello 써냉"; } string org = "Hello World"; fooString(org); System.Console.WriteLine(org); 삐빅! 틀렸습니다! 왜 그럴까요? 그렇다면 "Hello World"가 출력되