하기 사이트에서 참조함.

http://www.sysnet.pe.kr/Default.aspx?detail=1&mode=3&pageno=4&sub=1&wid=16

object objTest;

위의 변수가 있다고 가정을 합니다.
실은 objTest에 string올지, int가 올지, null올지 모르는 상황입니다.

위의 오브젝트 변수를 문자열로 취득하기 위해서는 변환해서 취득해야 할텐데요.
여기서 궁금한게 있는데요.

① string strTest = Convert.ToString(objTest);
② string strTest = (string)objTest;
③ string strTest = objTest.ToStriing();

위의 세가지 방법을 사용 가능한걸로 알고 있습니다만,
이 세가지 방법의 차이점을 알고 싶습니다.

예를 들어서 objTest값이 null이라면
①의 경우는 strTest에는 공백문자("")이 들어오고,
②의 경우는 strTest에 null이 그대로 들어오고,
③의 경우는 예외가 발생하는걸로 알고 있습니다...
만, 단지 위의 세가지 이유만 있는것인지요.

그리고 또 한가지 궁금한게 있는데요.

string strA = "a";
string strB = "b";
의 두개의 string 변수가 있을 때 위의 값을 비교 하기 위해서

strA.Equals(strB)를 사용하는것과,
strA == strB 를 사용하는것과 무슨 차이가 있는지 궁금합니다.

Equals 메소드를 보면 object와 string와의 비교시에는 박싱,언박싱이 일어나는것은 예상 가능합니다만,
위의 예처럼 둘 다 string일 경우에도 박싱, 언박싱이 발생하는지
, 아니면 오버로드에 의해 박싱,언박싱이 발생하지 않는지 궁금합니다.

기본적인것 같지만, 도저히 궁금해서요...
고수분들의 손길을 기다리겠습니다.
감사합니다.

========================================================================================

우선, 1번 질문.

첫번째 방식: Convert.ToString 으로 인한 변환은 사실 Object.ToString() 변환과 기본적으로 같습니다.
단지 해당 개체가 IConvertible 인터페이스를 구현하고 있다면, 먼저 IConvertible.ToString 메서드를 호출해 주도록 합니다.
따라서, 해당 객체가 IConvertible 인터페이스를 구현하고 있지 않다면, Object.ToString() 과 다를 바가 없는 것입니다.
또한, 만약 인자로 넘어온 값이 null 인 경우에는 string.Empty 를 반환하도록 되어 있을 뿐입니다.

두번째 방식: 말 그대로 형변환일 뿐이죠. null 이나 string 형이었으니 다행이었겠지만, 만약 형이 다른 경우였다면 예외가 발생했을 것입니다.

세번째 방식: null 이 아닌 한 정상적으로 문자열을 반환할 것입니다. object.ToString 메서드를 재정의해주면 그 값들이 반환되게 되어 있습니다.


-----
2번 질문.

== 비교연산자는 결국, string.Equals 메서드를 호출하므로 차이는 아무것도 없습니다.
그리고, object 와 string 의 비교시에 박싱,언박싱은 발생하지 않습니다.

우선, 대상 object 에 대해서 string 으로의 형변환이 가능한지 알아보고 (이것은 ToString()을 호출한다는 것이 아닙니다.) 가능한 경우에만 string 으로 형변환을 시킨 후 두개의 문자열 값을 비교하게 됩니다.

--------
참고로, boxing/unboxing 은 참조형식과 값형식간의 변환이므로, 애당초 참조형인 string 이거나 그 외의 class 형인 데이터에 대해서는 boxing/unboxing 은 전혀 발생하지 않습니다.

'프로그래밍 > .Net' 카테고리의 다른 글

Savefiledialog 구현하기  (0) 2014.01.17
datagridview에서 keydown 처리  (0) 2014.01.17
enum 타입 Flags 사용 [Flags, FlagsAttribute]  (0) 2014.01.17
LINQ to XML 맛보기  (0) 2014.01.17
Arraylist 사용  (0) 2014.01.17

+ Recent posts