Skip to content

Commit b4f59b5

Browse files
committed
docs(java): String 클래스 초안
1 parent b39ad85 commit b4f59b5

1 file changed

Lines changed: 61 additions & 0 deletions

File tree

  • content/posts/java-mid1-string-class
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
title: 'String 클래스'
3+
date: '2026-03-17T19:35:33+09:00'
4+
categories: ["Java"]
5+
tags: ["Sring Class", "StringBuilder", "Method Chaining"]
6+
draft: true
7+
---
8+
9+
- 기본
10+
- 비교
11+
- 불변 객체
12+
- 주요 메서드1
13+
- 주요 메서드2
14+
- 가변 String(StringBuilder)
15+
- String 최적화
16+
- 메서드 체이닝(Method Chaining)
17+
18+
## String
19+
20+
- String은 매우 자주 사용하는 자료형이다. 원칙적으로 참조형은 참조값을 보관하고 있기 때문에 문자열을 연결하려면 `concat()` 메서드를 사용해야 한다. 하지만 Java는 개발자의 편의를 위해 `+` 연산을 지원한다.
21+
22+
### 비교
23+
24+
- 리터럴의 동일성(Identity)을 비교할 때 보통 결과를 `false`로 생각한다. 하지만 실제 결과는 `true`다. Java는 문자열 리터럴을 사용할 때 메모리 효율성, 성능 최적화를 위해 문자열 풀을 사용한다. 실행 시점에 문자열 풀에 `String` 인스턴스를 미리 생성해 두기 때문에 결과는 `true`를 반환한다.
25+
- 문자열 비교는 항상 `equals()`를 사용하여 동등성(Equality) 비교를 해야 한다.
26+
27+
### 불변 객체
28+
29+
- `String`은 불변 객체다. 따라서 생성 이후에 절대로 내부 문자열 값을 변경할 수 없다. 따라서 변경이 필요할 때 기존 값을 변경하지 않고, 새로운 결과를 만들어서 반환한다.
30+
- `String`은 문자열 풀을 사용하여 내부 최적화를 진행한다. 만약 불변 객체가 아니라면 내부 값을 변경할 때 동일한 문자를 참조하는 변수의 모든 값도 함께 변경된다. 의도하지 않은 Side Effect가 발생한다. 따라서 Java는 자주 사용하는 `String`을 불변 객체로 제공하여 Side Effect를 방지한다.
31+
32+
### 주요 메서드
33+
34+
- `String.format()` vs. `printf()`
35+
36+
## 가변 String(StringBuilder)
37+
38+
- 불변 `String` 클래스는 문자를 변경할 때마다 새로운 객체를 생성해야 한다. 문자를 자주 변경하는 상황에는 CPU, 메모리 자원을 많이 소모한다.
39+
- 문제를 해결하기 위해 `StringBuilder`, 가변 `String`을 제공한다. 가변은 내부의 값을 바로 변경하기 때문에 새로운 객체를 생성할 필요가 없다. 따라서 성능과 메모리 사용면에서 불변보다 효율적이다.
40+
- 하지만 Side Effect가 발생할 수 있기 때문에 주의해서 사용해야 한다.
41+
42+
### 가변(Mutable) vs. 불변(Immutable)
43+
44+
- 기본으로 제공하는 `String`은 불변하다. 생성 후 값을 변경할 수 없다. 값을 변경하려면 새로운 `String` 객체를 사용하여 메모리와 처리 시간을 더 많이 소모한다.
45+
- `StringBuilder`는 가변하다. 객체 안에서 문자열을 추가, 삭제, 수정할 수 있고 새로운 객체를 생성하지도 않는다. 덕분에 메모리 사용을 줄이고 성능을 향상시킬 수 있다. 하지만 Side Effect를 주의해야 한다.
46+
- 따라서 작업 중에는 `StringBuilder`를 사용할 수 있지만 작업을 마치면 불변한 기본 `String`으로 변환하는 것을 권장한다.
47+
48+
## String 최적화
49+
50+
- Java는 컴파일 시점에 결과를 예측할 수 있으면 최적화를 진행한다. 하지만 런타임에 알 수 있는 결과는 최적화가 이뤄지지 않는다.
51+
- `StringBuilder` vs. `StringBuffer`
52+
53+
## 메서드 체이닝(Method Chaining)
54+
55+
- 메서드 체이닝은 Java 라이브러리와 같은 오픈 소스들에서 자주 사용하는 방법이다. (예시)
56+
57+
## 질문
58+
59+
- 문자열 풀, 쓰레드 풀
60+
61+
## 마치며

0 commit comments

Comments
 (0)