Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
Java Series [Part17]: 자바의 String, StringBuilder 클래스
language
java

Java Series [Part17]: 자바의 String, StringBuilder 클래스

Jay Kim
Jay Kim 10 Mar 2025
Java Series [Part16]: 자바의 Object 클래스 Java Series [Part18]: 자바의 Wrapper 클래스

Table of Contents

  • 자바의 String과 StringBuilder
    • 1. 개요
    • 2. String 클래스
      • 2.1 String의 특징
      • 2.2 String 사용 예제
      • 2.3 String의 불변성 문제
    • 3. StringBuilder 클래스
      • 3.1 StringBuilder의 특징
      • 3.2 StringBuilder 사용 예제
      • 3.3 주요 메서드
    • 4. String vs StringBuilder 성능 비교
      • 실행 결과 (예시)
    • 5. 결론

자바의 String과 StringBuilder

1. 개요

자바에서 문자열을 다루는 대표적인 클래스는 String과 StringBuilder입니다. 두 클래스는 문자열을 처리하는 방식이 다르며, 이에 따라 성능과 사용 방법에도 차이가 있습니다.

2. String 클래스

2.1 String의 특징

  • String은 불변(Immutable) 객체입니다.
  • 문자열 연산(추가, 변경 등)을 수행하면 새로운 String 객체가 생성됩니다.
  • String 객체는 리터럴 풀(String Pool)을 사용하여 메모리 효율을 높입니다.

2.2 String 사용 예제

public class StringExample {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "Hello";
        String str3 = new String("Hello");

        System.out.println(str1 == str2); // true (같은 String Pool 참조)
        System.out.println(str1 == str3); // false (Heap 메모리에 별도 객체 생성)
    }
}

2.3 String의 불변성 문제

문자열을 자주 변경해야 할 경우, String을 사용하면 매번 새로운 객체가 생성되어 메모리 낭비와 성능 저하가 발생할 수 있습니다.

String str = "Java";
str += " is";
str += " awesome!";
System.out.println(str);
// 매번 새로운 String 객체가 생성됨

3. StringBuilder 클래스

3.1 StringBuilder의 특징

  • StringBuilder는 가변(Mutable) 객체로 문자열을 직접 수정할 수 있습니다.
  • String과 달리 새로운 객체를 생성하지 않고 내부 버퍼를 사용하여 문자열을 변경합니다.
  • 성능이 중요한 경우(+ 연산을 많이 사용하는 경우) StringBuilder를 추천합니다.

3.2 StringBuilder 사용 예제

public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Java");
        sb.append(" is");
        sb.append(" awesome!");
        System.out.println(sb.toString());
        // 내부 버퍼를 사용하여 성능 향상
    }
}

3.3 주요 메서드

메서드 설명
append(String s) 문자열 추가
insert(int offset, String s) 특정 위치에 문자열 삽입
replace(int start, int end, String s) 문자열 교체
delete(int start, int end) 특정 구간의 문자열 삭제
reverse() 문자열 뒤집기

4. String vs StringBuilder 성능 비교

public class PerformanceTest {
    public static void main(String[] args) {
        long startTime, endTime;

        // String 성능 테스트
        startTime = System.nanoTime();
        String str = "";
        for (int i = 0; i < 10000; i++) {
            str += i;
        }
        endTime = System.nanoTime();
        System.out.println("String Time: " + (endTime - startTime) + " ns");

        // StringBuilder 성능 테스트
        startTime = System.nanoTime();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10000; i++) {
            sb.append(i);
        }
        endTime = System.nanoTime();
        System.out.println("StringBuilder Time: " + (endTime - startTime) + " ns");
    }
}

실행 결과 (예시)

String Time: 123456789 ns
StringBuilder Time: 1234567 ns

StringBuilder가 String보다 훨씬 빠르게 동작함을 확인할 수 있습니다.

5. 결론

특징 String StringBuilder
가변성 불변(Immutable) 가변(Mutable)
속도 느림 (새로운 객체 생성) 빠름 (내부 버퍼 사용)
멀티스레드 환경 안전 (불변 객체) 안전하지 않음 (synchronized 없음)
메모리 사용 상대적으로 많음 상대적으로 적음
  • 문자열 변경이 적을 경우 → String 사용
  • 문자열 변경이 많을 경우 → StringBuilder 사용 (멀티스레드 환경에서는 StringBuffer 고려)

이제 String과 StringBuilder의 차이를 이해하고, 적절한 상황에서 선택하여 사용해보세요! 🚀

Java Series [Part16]: 자바의 Object 클래스 Java Series [Part18]: 자바의 Wrapper 클래스

You may also like

See all java
25 Mar 2025 Java OOP Series [Part3]: 디자인 패턴
language
java

Java OOP Series [Part3]: 디자인 패턴

20 Mar 2025 Java OOP Series [Part2]: 객체지향
language
java

Java OOP Series [Part2]: 객체지향

15 Mar 2025 Java OOP Series [Part1]: 클래스와 인스턴스
language
java

Java OOP Series [Part1]: 클래스와 인스턴스

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.