문자열 (String)

초코칩·2024년 2월 26일
0

Java

목록 보기
4/14
post-thumbnail

문자와 문자열

문자열(String)은 자바 프로그램이 실행되는 동안 가장 많이 생성되는 객체이다. 문자열은 객체이지만 각각의 문자의 나열로 구성된다.

char capitalA =A; 			// 문자
String a = “abc”; 				// 문자열 == 문자의 배열
String b = new String(“abc”);   // 이와 같이 구현하지 마라.

String class

String 클래스는 다음과 같이 선언되어 있다.

public final class String extends Object
	implements Serializable, Comparable<String>, CharSequence

String class에 final이 붙었기 때문에 다른 클래스에서 확장이 불가능하다.

String으로 아이디, 패스워드를 다루기 때문에 자식 클래스에서 문자열에 접근하면 안되기 때문이다.

세 가지 인터페이스를 구현받는다.

  • Serializable: 객체를 파일로 저장하거나 다른 서버에 전송 가능한 상태가 된다.
  • Comparable<String>: 매개 변수로 넘어가는 객체와 현재 객체가 같은지를 비교할 수 있게 한다.
  • CharSequence: 해당 클래스가 문자열을 다루기 위한 클래스라는 것을 명시한다.

new String() 구현시 차이

구현 코드

public void testString() throws Exception {
    String a = "abc";
}

public void testNewString() throws Exception {
    String b = new String("abc");
}

컴파일된 class 코드

 public void testString() throws java.lang.Exception;
    Code:
       0: ldc           #89                 // String abc
       2: astore_1
       3: return

  public void testNewString() throws java.lang.Exception;
    Code:
       0: new           #33                 // class java/lang/String
       3: dup
       4: ldc           #89                 // String abc
       6: invokespecial #93   // Method java/lang/String."<init>":(Ljava/lang/String;)V
       9: astore_1
      10: return

문자열(String)은 자바 프로그램이 실행되는 동안 가장 많이 생성되는 객체이다.

문자열은 객체이지만 각각의 문자의 시퀀스로 구성된다.

StringBuilder, StringBuffer

String + String vs StringBuilder

String은 불변하기(immutable)이기 때문에 String과 String을 더하면 새로운 String 객체를 생성한다. 따라서 String과 String을 더하는 시점에 메모리 할당과 메모리 해제가 계속 발생한다.

StringBuilder는 String과 다르게 기존 데이터에 새로운 데이터를 더하는 방식을 취하기 때문에 속도가 더 빠르다. 따라서 긴 문자열을 더하는 상황이 발생하는 경우 StringBuilder를 활용해 구현한다.

immutable

  • Immutable(불변)이란 객체를 생성한 후 상태를 변경할 수 없는 것을 의미한다.
  • String 객체는 문자열의 상태 값을 변경할 수 없기 때문에 immutable 객체라 한다.

StringBuilder VS StringBuffer

StringBuilder가 더 효율적이다. StringBuffer는 Thread safe하고, StringBuilder는 그렇지 않다. Thread safe를 보장하기 위해 매번 synchronized 키워드를 사용하기 때문이다.

profile
초코칩처럼 달콤한 코드를 짜자

0개의 댓글