String객체는 문자형 배열을 매개변수로 받을 수 있다.

bada·2024년 4월 12일

Java

목록 보기
2/4
post-thumbnail

String클래스의 내부에는 private final 로 선언한 byte[](혹은 char[])인 배열타입 변수가 있다.



프로그래머스 문자열 정렬하기(2)를 풀고 있는 중 새로 안 사실.

import java.util.Arrays;

class Solution {
    public String solution(String my_string) {
        char[] c = my_string.toLowerCase().toCharArray();
        Arrays.sort(c);
        return new String(c);
    }
}

🤔 String객체생성 시, 문자형 배열을 매개변수로 받을 수 있었던가?

new String(c)? c는 배열인데? 다들 자연스럽게 받아들이는 분위기에 내 기초의 부실함을 다시한번 반성하며 자바 api 라이브러리 사이트에서 String을 찾아보았다.

String클래스가 불변클래스이기 때문에 어떤 새로운 문자열과 조합을 할 때마다 새 인스턴스가 생성된다. 라는 건 익히 알고 있던 사실이다.
그런데 궁금증을 해소하기 위해 구글링한 덕분에 위 문장의 이유를 보다 자세히 파악한 계기가 되었다.

😃 String은 내부적으로 char[ ] (byte[ ]) 배열을 사용해서 문자열을 저장한다.

(JDK 9 이전에는 char[ ], JDK 9부터는 메모리 효율성을 위해 byte[ ]로 저장하게 되었다고 한다. 문자는 결국 내부적으로 정수값 코드로 저장하기 때문에 정수형인 byte[ ]로 바꾸지 않았을까 하는 추론을 했다.)

자바에서 배열은 생성시 그 크기가 고정되므로 String클래스가 immutable한 성격을 띌 수 밖에 없는 것이었다.

그래서 나는 위의 문장이 시사하는 바를 두가지로 정리했다.

  1. 새로운 문자열과 조합은 새 배열을 생성하는 것.
  2. 그러므로 당연히 문자형 배열을 매개변수로 받아 String 객체를 생성할 수 있다.
profile
하루 세번 목 당기기

0개의 댓글