hyeonga_code

Java_60_API_스트링 버퍼, 스트링 빌더_StringBuffer, String Builder 본문

Java

Java_60_API_스트링 버퍼, 스트링 빌더_StringBuffer, String Builder

hyeonga 2023. 10. 24. 07:59
반응형

 


 - StringBuffer
    - 기존 객체의 공간이 부족한 경우 기존 버퍼 크기를 늘려 저장합니다.
    - 각 메서드별로 멀티스레드 환경에서도 동기화를 지원
    - 스레드에 안전한 프로그램이 필요할 때 사용합니다.
    - 개발중인 시스템의 부분이 스레드에 안전한지 모를 경우 사용합니다. 
    - 16개를 저장할 수 있습니다.
        StirngBuffer(CharSequence "abc") : abc를 제외한 16개 문자 저장 가능
    - 문자형 배열을 내부적으로 가지고 있습니다. = String
    - 내용을 변경할 수 있습니다._mutable != String
    - thread-safe를 지원합니다.
    - 동시에 수정하는 경우 안전성을 보장합니다.
        - 순차적으로 처리할 수 있습니다.
    - 인스턴스를 생성할 때 버퍼의 크기를 충분히 지정해야 합니다.
    - equals()를 오버라이딩하지 않습니다.

 - StringBuilder
    - 단일 스레드 환경
    - 동기화를 지원하지 앖습니다.
    - 스레드에 안전한지 여부가 관계 없는 프로그램을 개발할 때 사용합니다.
    - thread-safe를 지원하지 않습니다.
        - 속도가 빠릅니다.
    - default 값으로 적용됩니다.
        - 내부에서 처리할 수 있습니다.
    - 장문을 저장할 경우 명시적으로 선언하는 것을 권장합니다.


=====

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package adv.baseclass;
 
public class StringEx {
 
    public static void main(String[] args) {
        
        // 문자열 비교
        String word1 = "Java";
        String word2 = new String("Java");
        
        System.out.println("word1 == word2 : " + (word1==word2));
        System.out.println("word1.equals(word2) : " + word1.equals(word2));
            /*
                word1 == word2 : false
                    - String 값의 주소를 비교합니다.
                word1.equals(word2) : true
                    - String 값을 비교합니다.
             */
        
        // 문자열 연산
        String word3 = " Word";
        System.out.println("word1 + word3 : " + (word1 + word3));
        System.out.println("word2 + word3 : " + (word2 + word3));
            /*
                word1 + word3 : Java Word
                    - String Pool에 등록되어 Java, Word, Java Word 단어가 등록됩니다.
                word2 + word3 : Java Word
                    - Heap 공간에 저장되어 있는 값이 Java Word로 수정됩니다.
                - 문자열 연산에는 메모리를 고려해야 합니다.
                    - Heap 공간에 바로 작성하기 위해 String bupffer를 사용합니다.
             */
        
        // StringBuilder : 
        StringBuilder sb = new StringBuilder("Java");
            // new 연산자를 반드시 작성합니다.
        sb.append("String");
        System.out.println("sb.toString() : " + sb.toString());
            /*
                sb.toString() : JavaString
                - sb.append('추가할 문자열') 
                    - 기존의 sb 주소에 접근하여 기본 문자열 뒤에 문자열을 추가합니다.
             */
        
        // StringBuffer : 스레드 세이프를 지원합니다.
        StringBuffer sbf = new StringBuffer("Java");
            // new 연산자를 반드시 작성합니다.
        sbf.append("String");
        System.out.println("sb.toString() : " + sbf.toString());
            /*
                sbf.toString() : JavaString
                - sbf.append('추가할 문자열') 
                    - 기존의 sbf 주소에 접근하여 기본 문자열 뒤에 문자열을 추가합니다.
             */
    }
}



    - 주요 메소드
=====

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package adv.baseclass;
 
public class StringEx {
 
    public static void main(String[] args) {
        
        // 문자열 비교
        String word1 = "Java";
        String word2 = new String("Java");
        
        System.out.println("word1 == word2 : " + (word1==word2));
        System.out.println("word1.equals(word2) : " + word1.equals(word2));
            /*
                word1 == word2 : false
                    - String 값의 주소를 비교합니다.
                word1.equals(word2) : true
                    - String 값을 비교합니다.
             */
        
        // 문자열 연산
        String word3 = " Word";
        System.out.println("word1 + word3 : " + (word1 + word3));
        System.out.println("word2 + word3 : " + (word2 + word3));
            /*
                word1 + word3 : Java Word
                    - String Pool에 등록되어 Java, Word, Java Word 단어가 등록됩니다.
                word2 + word3 : Java Word
                    - Heap 공간에 저장되어 있는 값이 Java Word로 수정됩니다.
                - 문자열 연산에는 메모리를 고려해야 합니다.
                    - Heap 공간에 바로 작성하기 위해 String bupffer를 사용합니다.
             */
        
        // StringBuilder : 
        StringBuilder sb = new StringBuilder("Java");
            // new 연산자를 반드시 작성합니다.
        sb.append("String");
        System.out.println("sb.toString() : " + sb.toString());
            /*
                sb.toString() : JavaString
                - sb.append('추가할 문자열') 
                    - 기존의 sb 주소에 접근하여 기본 문자열 뒤에 문자열을 추가합니다.
             */
        
        // StringBuffer : 스레드 세이프를 지원합니다.
        StringBuffer sbf = new StringBuffer("Java");
            // new 연산자를 반드시 작성합니다.
        sbf.append("String");
        System.out.println("sb.toString() : " + sbf.toString());
            /*
                sbf.toString() : JavaString
                - sbf.append('추가할 문자열') 
                    - 기존의 sbf 주소에 접근하여 기본 문자열 뒤에 문자열을 추가합니다.
             */
        
        // 주요 메소드
        String str = "abcd1234";
        System.out.println(str.length());
        System.out.println(str.charAt(2));
        System.out.println(str.substring(1,3));
        System.out.println(str.replaceAll("d""e"));
            /*
                8
                c    : str[2]부터 출력합니다.
                bc    : 1 부터 (3-1)까지 출력합니다.
                abce1234    : 일치하는 문자를 변경합니다.
             */
        
        String str1 = "A, B, C, D";
        String[] strs = str1.split(",");    // ","로 구분하여 저장합니다.
        
        for(String s : strs) {
            System.out.print(s);
        }
        System.out.println();
            /*    A B C D  */
        
        for(String s : strs) {
            System.out.print(s.trim());        // 띄어쓰기를 제거합니다.
        }
            /*    ABCD  */
    }
}

 

반응형