본문 바로가기
Baeldung번역&공부/Java-string

스트링 객체 초기화방법(String Initialization in Java)

by ms727 2025. 1. 20.

원본: https://www.baeldung.com/java-string-initialization

 

자바 String 객체 초기화에 관한 글입니다.

생성하는 방식은 크게 2가지 방식이 있습니다.

  1. New 키워드를 이용한 객체생성
  2. `Literal` 방식을 이용한 객채생성

 

## 1. 생성방식

 

```JAVA

@Test
void String_생성방법() {
    String usingNew = new String("minseok");
    String usingLiteral = "minseok";
}

```

 

두 방식이 같지는 않습니다. 그 이유는 간단하게 밑에서 설명하겠습니다.

 

만약 초기화 값을 명시하지 않으면 어떻게 될지도 살펴보겠습니다.

 

 

## 2. 초기화값이 없을때

 

```JAVA

public class StringBasicInitTest {

    String fieldString;

    @Test
    void 지역변수와_멤버변수차이() {
        //given
        String localVarString;

        //when
        // System.out.println(localVarString); <- Compile error

        //then
        assertNull(fieldString);
    }
}

```

 

Class를 만들고 지역변수와 멤버변수를 출력하려고하는 코드입니다.

 

지역변수는 컴파일 에러를 발생시키고 멤버변수는 Null이 출력될 것입니다. 또한 초기화되지 않은 멤버변수는 `Null`값을 가집니다.

 

```Java

@Test
void 지역변수_null초기화시_멤버변수_초기값과같아야한다() {
    //given
    String localVarString = null;

    //when

    //then
    assertEquals(localVarString, fieldString);
}

```

 

 

## 3. 리터럴방식과 new의 차이

 

동일성, 동등성에 대한 개념이 나오는데 이 부분은 설명하지 않겠습니다. 다른 좋을글들을 통해 학습하는게 좋습니다.

 

```JAVA

@Test
void Literals_로선언시_동일성을지닌다() {
    //given
    String literalOne = "Minseok";
    String literalTwo = "Minseok";

    //then
    assertTrue(literalOne == literalTwo);
}

```

 

```JAVA

@Test
void new_로선언시_동일성을지니지않는다() {
    //given
    String literalOne = new String("Minseok");
    String literalTwo = new String("Minseok");

    //then
    assertFalse(literalOne == literalTwo);
}

```

 

리터럴방식으로 생성하는 경우와, `New`연산자를 통해 생성하는 방식의 차이는 위 코드를 보면 알 수 있습니다.

 

동일성에 대한 차이가 있어서 이 부분을 고려하여 스트링 객체 생성을 하면 됩니다.

 

## 4. 빈 문자열 

 

빈 문자열을 생성하는 방식에는 크게 3가지가 있습니다. ""를 이용하여 리터럴방식으로 생성하거나 `new`를 통해 생성하는 2가지 방식이 있습니다.

 

그리고 이렇게 생성했을 경우 각각의 경우가 동일성, 동등성을 다르게 지니는데 테스트 코드를 확인해보면 됩니다.

 

```Java

@Test
void 빈_문자열_선언방법_및_동일성_동등성_확인() {
    //given
    String emptyLiteral = "";
    String emptyNewString = new String("");
    String emptyString = new String();

    //then
    assertFalse(emptyLiteral == emptyNewString);
    assertFalse(emptyLiteral == emptyString);
    assertFalse(emptyNewString == emptyString);
    assertEquals(emptyLiteral, emptyNewString);
    assertEquals(emptyLiteral, emptyString);
}

```

 

## 5. Null에 대하여

 

마지막으로 `Null`값을 console에 출력해보면 "null"이라고 찍힙니다. 왜그런걸까요. `Null`값이 문자열 "null"값을 지닌걸까요

 

먼저 간단하게 말하면 이는 `System.out.println()` 메소드의 구현방식에서 답을 알 수 있습니다.

 

이를 확인하기위해 해당 메서드의 구현방식을 확인해보겠습니다.

 

 

 

println()의 구현체를 보면 PrintStream.class인지 확인하고 맞으면 `String.valueOf(x)`의 값을 `writeln()`에 넘겨줍니다.

여기서 `writeln()`의 구현은 보지 않아도 되므로, `String.valueOf()` 메서드의 구현을 확인해보면

 

 

이렇듯 넘겨온값이 `Null`인 경우 "null"값을 반환하게 설정되어있습니다.

 

때문에 `Null`값을 출력시 "null"이 호출되는것을 알 수 있습니다.

 

 

모든 코드는 제 깃허브인 https://github.com/kkminseok/baeldung-test/tree/main/Java-String  에서 확인가능합니다.