일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Q 클래스
- 인텔리제이
- 스프링 부트 기능
- 최종 프로젝트
- spring서버
- JoinColumn
- 빈생성안됨
- ERD 작성
- @IdClass
- REST란
- Filter
- 복합키
- 스프링부트오류
- jpa에러
- jpa회원가입
- jwt메서드
- 1차캐시
- Error creating bean with name
- 스프링 부트 공식 문서
- queryDSL
- json
- JPA주의사항
- json gson 차이
- github
- uncheck Exception
- Spring Spring boot 차이
- REST API 규칙
- git
- JPA
- Unsatisfied dependency
- Today
- Total
Everyday Dev System
문자열 합치기 본문
요약
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
'have to > 자바 알고리즘' 카테고리의 다른 글
분수의 덧셈 문제 - 개선 (0) | 2023.10.24 |
---|---|
문자열 겹쳐쓰기 문제 - 개선 (1) | 2023.10.24 |
배열 비교하기 (0) | 2023.10.18 |
배열에서 문자열 대소문자 변환하기 (0) | 2023.10.18 |
프로그래머스 - 배열 만들기 1 (0) | 2023.10.18 |