Java String에 관한 몇 가지 팁 Java

Java 문자열(String)과 관련한 두 가지 팁을 소개합니다.

Tip#1. 상수 문자열과 null 문자열 비교

아래 코드는 문자열 상수와 null 참조변수를 서로 비교하는 isEqualString 메서드를 테스트하고 있습니다.
isEqualString 메서드는 두 문자를 비교할때 equals()를 통해 구현했습니다.

실행 결과는 NullPointerException 이겠네요. @^^@

<Code>
public class StringTest {
    private final static String aConstant = "testValue";
 
    public static boolean isEqualString(String parameter) {
        return
parameter.equals(aConstant);
    }
    public static void main(String[] args) {
        String myString = null;
        System.out.println(isEqualString(myString));
        System.exit(0);
    }
}

</Code>

이 경우, 예외처리를 하거나 인자 값이 null인지 먼저 확인 한 후 메서드로 전달하는 방식으로 해결할 수 있겠습니다.
그러나 간단한 방법으로 Exception 발생을 피해 갈 수 있는 방법이 있습니다.

<Code>
    public static boolean isEqualString(String parameter) {
        return
aConstant.equals(parameter);
    }
</Code>

위 코드는 단지 equals() 메서드를 호출하는 주체를 parameter에서 aConstant로 바꿨을 뿐입니다. 이 경우 parameter가 null이라 하더라도 aConstant는 항상 존재하는 객체를 참조하기 때문에 NullPointerException이 발생할 일은 없습니다. parameter가 null이라면 false를 반환하겠네요.

Tip#2. StringBuffer를 이용한 문자열 결합

Java의 문자열(ex. "Hello")은 모두 Immutable 객체입니다. 즉, 한 번 생성된 문자열 객체의 내용은 수정할 수 없다는 뜻입니다. 즉, "Hello" 문자열 객체를 "Halla"로 바꿀 수 없다는 말입니다.

<Code>
public class StringConcat {
    public static void main(String[] args) {
        String aString = "";                     //(1)
        aString = aString + "first";         //(2)
        aString = aString + "second";    //(3)
  
        System.out.println(aString);
        System.exit(0);
    }
}

</Code>

위 코드에서 aString 참조변수는 "" 문자열 객체를 가리키고 있습니다. 메모리상에 "" 객체가 생성되어 있겠네요.
(2)에서 aString은 aString이 참조하고 있던 문자열과 "first" 문자열을 결합한 문자열 객체를 새롭게 참조하고 있습니다.

문자열 결합은 기존의 객체 ""를 변경하지 않고 "" + "first"의 결과인 "first"라는 새로운 문자열 객체를 생성하고 그 공간을 aString이 참조하게 만듭니다. 즉, "", "first" 두 문자열 객체가 메모리상에 존재하고 있다는 의미입니다. 마지막 문자열 결합 연산은 "first" + "second" 문자열의 결합인 "firstsecond"이란 새로운 문자열 객체를 만들고 그 공간을 다시 aString이 참조하게 했습니다.

따라서, 문자열 결합을 하는 동안 만들어진 모든 문자열 객체("", "first", "second", "firstsecond")는 모두 독립적인 메모리 공간에 존재하게 됩니다. 참조변수 aString은 단지 새롭게 생성된 문자열 객체가 어디있는지에 대한 정보만 가지고 있게됩니다.

StringBuffer 클래스를 사용하면 문자열 결합시 문자열을 매번 다시 만드는 부담을 줄일 수 있습니다.

<Code>
public class StringConcat {
   public static void main(String[] args) {
      StringBuffer buffer = new StringBuffer();
      buffer.append("first");
      buffer.append("second");
  
      System.out.println(buffer.toString());
      System.exit(0);
   }
}

</Code>

StringBuffer 클래스는 byte 배열을 만들어 놓고 이후에 추가(append)되는 문자열을 기존 배열의 뒤에 추가합니다. 따라서 문자열 결합시 새롭게 문자열을 생성하는 부담을 없앨 수 있습니다.


트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://snowmaker.egloos.com/tb/2786548 [도움말]

덧글

댓글 입력 영역


통계 위젯 (블랙)

02
0
2050