본문 바로가기
개발 노트/기초 지식

[java] 문자열 여러개 출력 시 방법

by tokkiC 2022. 5. 3.

가끔 문자열을 연달아서 여러줄 출력할 때가 있다

system.out.println("첫번째 줄이야");
system.out.println("두번째 줄이야");
system.out.println("세번째 줄이야");
system.out.println("네번째 줄이야");

위처럼 출력하면 너무 비효율적이다

그래서 찾아보니 이런 방법이 있었다

system.out.println(
"""
첫번째 줄이야
두번째 줄이야
세번째 줄이야
네번째 줄이야
"""
)

쌍따옴표를 3개 쓰고 사이에 출력할 문자열을 줄바꿈도 적용해서 워드 문서처럼 편하게 쓰고

쌍따옴표 3개로 닫아주면 그 사이에 있는 문자열은 그대로 출력가능하다!

단순 텍스트 반복이라면 위처럼 쓰면 되지만

String str1 = "감자";      //  감자
String str2 = "튀김";      //  튀김
String str3 = str1 + str2    //  감자튀김

문자열은 객체인데 문자열끼리 +를 통해 더하는 것은 객체끼리 더하는 것으로 새 객체를 만들어내게되어 (주소값을 낭비)

새 객체에 메모리를 할당하기에 사용 메모리가 늘어나서 연산 성능을 저하시킨다

이를 극복하기 위해 자바에서 지원하는 StringBuilder 클래스를 사용하여 문자열을 끼리 더할수있다

마치 입력을 위해 Scanner 클래스를 사용하는 것과 같지만 차이점이라면

StringBuilder 클래스의 경우 lang 패키지에 존재하므로 스캐너처럼 따로 import 할 필요가 없다는 점이 있다

사용법은 다음과 같다

StringBuileder 변수명1 = new StringBuilder();        //    사용을 위해 클래스를 가져와 인스턴스화 한다 
변수명1.append("감자");        //    추가할 문자열
변수명1.append("튀김");        //    추가할 문자열
System.out.println(변수명1.toString());        //    출력을 위해서는 인스턴스의 toString() 메소드를 사용하면 된다 

단, 멀티 스레드 환경의 경우 공통 메소드의 동기화가 필요하므로 StringBuffer 를 사용하면 된다

StringBuffer 의 경우 이름만 다르지 StringBuilder 와 사용법이 같다고 보면 된다

스레드 환경에서의 동기화란 간단히 말해 메소드 실행 종료까지 다른 메소드에 번호표 뽑고 순서를 기다리게 하는걸 말한다)

(스레드 환경의 동기화는 추후 다시 정리하겠다)

여기서 동기화를 설명하자니 길어

댓글