블로그 이미지
'무른모'란 부드럽다라는 뜻을 가진 '무르다'라는 말과 도구, 연장을 뜻하는 '연모'라는 순 우리말의 합성어로 소프트웨어를 말합니다. seanhigher

카테고리

분류 전체보기 (161)
Blog srart (16)
Dev Center (94)
Real Life (13)
Mac life (21)
Naver life (17)
Total657,251
Today60
Yesterday89

'2010/08/14'에 해당되는 글 1건

  1. 2010.08.14 변하지 않는 String.
String 은 자바에서 빼놓을 수 없는 클래스 타입의 자료형이다. 아마 String 이 없었다면, 수많은 사람들이 자바 프로그래머의 길을 포기해야 했을지도 모른다. String 에는 한가지 중요한 비밀이 숨겨져 있다.


String 데이터를 생성하는 방법.

String str1 = "문자열";
String str2 = "문자열";
String str3 = new String("문자열");

위에 있는 세개의 데이터의 차이는 무엇일까? 정답은 어느것은 같은 것이고 어느것은 다르다는 것이다. 분명히 세개의 자료형에 똑같이 "문자열"이란 데이터를 넣었는데 같은것과 다른것이 있다니... 하지만 분명 차이는 있다. String 은 클래스형의 데이터 타입이라고 했다. 그것은 그 변수가 데이터를 갖고 있는 것이 아니라, 데이터가 있는 주소값을 가지고 있다는 것이다. 또 String 은 데이터를 만들기전에 자신과 똑같은 데이터가 있는지 검사를 한뒤 똑같은 데이터가 있다면 새로운 데이터를 생성하지 않고 똑같은 데이터가 있는 그 위치를 가리키게 된다. str1의 주소값과, str2의 주소값은 동일한 것이되고, 가리키는 데이터도 같은 값인 것이다. 하지만, new 연산자를 사용할 경우에는 똑같은 데이터가 있는지 검사하지 않고 무조건 새로운 String 데이터를 만들게 된다. 가지고 있는 주소값은 다른 것이지만, 그곳에 있는 데이터를 비교하게 되면 똑같은 데이터값을 갖고 있는 것이다.


String 데이터를 비교하는 방법
일반적으로 기본형 데이터를 비교하기 위해서는 '==' 연산자를 사용해서 비교하는 것이 가능하다. 하지만, 문자열을 'str1 == str2' 와 같은 방법으로 비교할 경우에는 '문자열' 과 '문자열'이 같은지를 비교하는 것이 아니라, str1이 가지고 있는 주소값과 str2가 가지고 있는 주소값을 비교하게 된다. 물론 위의 경우에 str1 과 str2는 같은 값을 갖는다는 결과를 내겠지만, str1 == str3 의 경우에는 다르다는 결과를 낼 것이다. 그렇다면 포함되어 있는 문자열을 그대로 비교하고 싶다면?? String 클래스에 구현되어 있는 equals() 메소드를 사용하여 비교하는 것이 가능하다. str1.equals(str3) 과 같은 방법으로 비교를 하게 되면 각 데이터가 가지고 있는 실제값을 비교하여 같다는 결과 값을 반환할 것이다.


String 은 변하지 않는다.
String 클래스에는 문자열을 조작하기 위한 다양한 메소드들이 준비되어 있다. concat() 란 메소드는 원래의 스트링에 인자값으로 전달받은 스트링을 더하는 역할을 한다.

String str1 = "첫번째";
String str2 = "두번째";
str1.concat(str2);

위의 소스를 실행하면 str1 에는 어떠한 데이터가 들어 있을까? '첫번째 두번째' 라는 데이터를 생각했겠지만, str1 에는 원래의 '첫번째' 라는 데이터만 들어 있다. 그 이유는 스트링 클래스의 메소드를 통해 문자열 조작을 하게될 경우 변형된 스트링을 반환하지만, 그 값까지 변하지는 않는다는 것이다. 만일 위의 소스에서 맨 마지막 줄을

str1 = str1.concat(str2);

와 같은 방법으로 사용한다면 str1에는 변형된 데이터가 다시 대입되는 형태를 띄기 때문에 str1에는 우리가 예상했던 '첫번째 두번째' 가 저장되어 있을 것이다.

Posted by seanhigher

댓글을 달아 주세요

최근에 달린 댓글

글 보관함