Everyday Dev System

문자열 합치기 본문

have to/자바 알고리즘

문자열 합치기

chaeyoung- 2023. 10. 24. 11:39
요약

concat() 메서드는 새로운 인스턴스를 생성하기 때문에 성능, 속도 면에서 떨어지므로,
간단한 문자열 추가의 경우에는 '+' 연산자를 사용하는 것이 좋다.

복잡하거나 반복적인 문자열 수정 시 StringBuilder 혹은 StringBuffer를 사용하는 것이 좋다.
그러나, 멀티스레드를 이용하여 하나의 문자열을 수정할 필요가 있다면 StringBuffer 클래스를,
그렇지 않다면 StringBuilder 클래스를 사용하여 동작 속도를 빠르게 하는 것이 좋다.

 

1. concat()

String 클래스에서 제공하는 기본 메서드.

합친 문자열을 String으로 생성한다.

concat() 메서드를 활용하면 새로운 인스턴스를 생성하기 때문에 성능, 속도 면에서 떨어진다.

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String b = sc.next();
        
        System.out.print(a.concat(b));
    }
}

 

 

 

2. + 연산자

 

문자열을 붙일 때 가장 직관적으로 떠올릴 수 있는 방법이다. jdk 1.5 이전에는 concat() 메서드처럼 문자열을 추가할 때마다 새로운 인스턴스를 생성했지만 이후에 StringBuilder로 변환해서 처리하는 것으로 변경되었다. 문자열을 먼저 StringBuilder로 변환시킨 뒤, Append로 문자열을 더하고 다시 toString함수로 문자열로 반환해주는 방식이다.
그래서 일반적으로 간단한 문자열 추가의 경우에는 '+' 연산자를 사용하는 것이 좋다.

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String b = sc.next();
        
        System.out.print(a+b);
    }
}

 

 

3. StringBuilder

String은 수정하기 위해서 다른 값을 가진 String을 다시 대입해야 하나,
StringBuilder는 append()를 통해 문자열을 합칠 수 있다.
복잡하거나 반복적인 문자열 수정 시 사용하는 것이 좋다.

예를 들면, for 문이나 while 문 같은 반복문 안에서 문자열을 계속 추가해야 하는 경우에는

'+' 연산자보다는 StringBuilder를 사용하는 것이 좋다.

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String b = sc.next();
        
        StringBuilder result = new StringBuilder();
        result.append(a);
        result.append(b);
        
        System.out.print(result);
    }
}

 

 

 

4. StringBuffer

StringBuffer는 StringBuilder와 호환 가능하기 때문에 사용법은 동일하다. StringBuffer와 StringBuilder의 차이점은  StringBuffer은 thread-safethread-safe 하다는 점이다. StringBuilder는 동기화를 보장하지 않는다. StringBuffer 클래스는 동시에 이 객체에 접근했을 때, 동시성을 제어해주는 기능이 존재하고, StringBuilder 클래스는 동시성 제어 기능을 제외하여 상대적으로 동작 속도가 빠르다. 결국 쓰임 세는 동일하나,

멀티스레드를 이용하여 하나의 문자열을 수정할 필요가 있다면 StringBuffer 클래스를 사용하는 것이 바람직할 것이고, 그렇지 않다면 StringBuilder 클래스를 사용하여 동작속도를 빠르게 하는 것이 좋을 것이다.

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String b = sc.next();
        
        StringBuffer result = new StringBuffer();
        result.append(a);
        result.append(b);
        
        System.out.print(result);
    }
}

 

 

 

 

references : https://school.programmers.co.kr/learn/courses/30/lessons/181946

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

https://junghn.tistory.com/entry/JAVA-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B6%99%EC%9D%B4%EB%8A%94-%EB%B0%A9%EB%B2%95concat-StringBuilder-StringBuffer

 

[JAVA] 문자열 붙이는 방법 총정리(concat, StringBuilder, StringBuffer, + )

자바에서 문자열을 붙이는 4가지 방법에 대해 정리해 보고, 또 각각의 차이점은 무엇인가에 대해서 알아보겠습니다. Concat concat은 String 클래스에서 제공하는 기본 메서드이며 동작 방법은 합친

junghn.tistory.com