컴퓨터공학 💻 도서관📚
Part2. 4-3 String, StringBuilder, StringBuffer 클래스, text block 본문
✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습
Part2. 4-3 String, StringBuilder, StringBuffer 클래스, text block
들판속초록풀 2025. 6. 19. 10:34String 클래스
* String 선언하기
String str1 = new String("abc");
String str2 = "abc";
* (1)힙 메모리에 인스턴스로 생성되는 경우와 (2)상수 풀(constant pool)에 있는 주소를 참조하는 두 가지 방법
new 해서 쓰면 힙에 메모리가 생성되고, 2번째는 상수풀에 abc라는 String이 있고 그 String의 주소만 가리키는 것이다.
* 힙 메모리는 생성될 때마다 다른 주소 값을 가지지만, 상수 풀의 문자열은 모두 같은 주소 값을 가짐
public class StringTest {
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1 == str2); // 출력 결과 : false , 힙 메모리
String str3 = "abc";
String str4 = "abc";
System.out.println(str3 == str4); // 출력 결과 : true , 상수 풀
}
}
* 한 번 생성된 String은 불변(immutable) (String 소스 안을 보면 final로 선언되어 있다.)
* String 여러 개를 연결하면 기존의 String에 연결되는 것이 아닌 새로운 문자열이 생성됨 ( 메모리 낭비가 발생할 수도 )
우리가 String을 계속 연결해서 쓸 때, 이런 식으로 쓰면 나중에 메모리 가비지가 굉장히 많이 생긴다 (오버헤드가 많이 생긴다)
그래서 제안하는 게 StringBuilder, StringBuffer 시용이다. 이걸로 하면 기존에 있는 문자열에 추가할 수 있다.
public class StringTest2 {
public static void main(String[] args) {
String java = new String("java");
String android = new String("android");
System.out.println(System.identityHashCode(java));
java = java.concat(android);
System.out.println(java);
System.out.println(System.identityHashCode(java));
}
}
StringBuilder, StringBuffer 활용하기
- 내부적으로 가변적인 char[]를 멤버 변수로 가짐
- 문자열을 여러번 연결하거나 변경할 때 사용하면 유용함
- 새로운 인스턴스를 생성하지 않고 char[] 를 변경함
- 2개의 차이점은, 2개 모두 똑같이 문자 버퍼를 안에 갖고 있는데
StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화(synchronization)가 제공이 된다
이 말은, 2개 이상의 스레드가 서로 같은 메모리를 접근할 때 순서가 정해진다는 말이다. - 단인 쓰레드 프로그램에서는 StringBuilder 사용을 권장
- 나중에 String 인자로 사용할 때는 toString() 메서드로 String을 반환해주면 된다
public class StringBuilderTest {
public static void main(String[] args) {
String java = new String("java");
String android = new String("android");
StringBuilder buffer = new StringBuilder(java); // java 변수 대입
System.out.println(System.identityHashCode(buffer)); // 2개의 해시 코드 값은 같다
buffer.append("android"); // java 변수 뒤에 "android" 추가
System.out.println(System.identityHashCode(buffer)); // 2개의 해시 코드 값은 같다
java = buffer.toString();
}
}
text block 사용하기 ( java 13 )
- 자바 13 이하 버전이면 StringBuilder, StringBuffer 활용하기
- 문자열을 """ """ 사이에 이어서 만들 수 있음
java13 전에는 ++ 나 StringBuilder , StringBuffer 를 이용해서 해야 했다 - html, json 문자열을 만드는데 유용하게 사용할 수 있음
public class StringTextBlock {
public static void main(String[] args) {
String strBlock = """
This
is
text
block
test.""";
System.out.println(strBlock);
System.out.println(getBlockOfHtml());
}
public static String getBlockOfHtml() { // html 화면 출력
return """
<html>
<body>
<span>example text</span>
</body>
</html>""";
}
}
'✅🌲강의 복습 노트 > 패캠 JavaSpring 강의,코드 복습' 카테고리의 다른 글
Part2. 4-4 Class 클래스 사용하기 (0) | 2025.06.19 |
---|---|
Part2. 4-2 Object 클래스의 메서드 활용 (0) | 2025.06.17 |
Part2. 4-1 Object 클래스 - 모든 클래스의 최상위 클래스 (0) | 2025.06.17 |
Part2. 3-16 객체 코딩으로 복습하기 2 (0) | 2025.06.16 |
Part2. 3-16 객체 코딩으로 복습하기 1 (0) | 2025.06.16 |
Comments