CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL

SOLID BASICS

[JAVA] StringBufffer, StringBuilder 사용법 & 차이점이 뭘까?
공부 STUDY/JAVA

[JAVA] StringBufffer, StringBuilder 사용법 & 차이점이 뭘까?

2023. 1. 15. 12:51

자바에서 문자열을 다루는 대표적인 클래스로 String, StringBuffer 그리고 StringBuilder가 있다.

비교적 간단한 연산을 수행할 시 어떤 클래스를 사용해도 OK 그렇지만 그 반대의 경우 (+ 멀티쓰레드) 에는 각 클래스의 특징을 이해하고 

상황에 맞게 사용하는 것이 좋다.

 

String

 

- 불변의 속성

String str = "Hello";
str += "world";

문자열 + 문자열이 가능한데 웬 불변? 이라고 생각이 들 수 있다. 

"Hello" 값이 들어있던 String 클래스의 참조변수 str이 추가된 문자열 "world"가 추가된 "Hello world"의 값으로 새로운 메모리 영역을 가리키게 변경되는 것이다. 그리고 처음에 선언했던 "Hello"로 할당된 메모리 영역은 갈비지 콜렉터에의해 사라지게된다.

 

이제 불변의 의미가 이해되었을 것이다.

 

 즉, 스트링 클래스는 불변하기에 문자열을 수정하는 시점에 새로운 인스턴스가 생성되는 것이다!

 

불변의 속성을 가진  String

        String str1 = "hello world";
        String str2 = str1.substring(5);
        System.out.println(str1);
        System.out.println(str2);
  • 실행결과
    hello world
     world
  • 기존의 str1은 전혀 변화 없다.
  • substring메소드는 5번째 부터 문자열을 잘라서 새로운 문자열을 반환하는 메소드
  • str1자체는 전혀 변화가 없다.

String클래스를 사용할 때 가장 문제가 발생하는 경우는 다음과 같은 코드를 사용할 때 입니다.

    String str3 = str1 + str2;
    System.out.println(str3);
  • 실행결과
    hello world world

문자열과 문자열을 더하게 되면 내부적으로는 다음과 같은 코드가 실행

    String str4 = new StringBuffer().append(str1).append(str2).toString();
    System.out.println(str4);

문자열을 반복문 안에서 더하는 것은 성능상 문제가 생길 수 있으니 반드시 피하도록 하자.

 

이처럼 스트링은 불변의 속성을 가지므로 변하지 않는 문자열을 자주 읽어들이는 경우 사용하면 적합하다.

그러나 문자열의 추가, 수정 그리고 삭제 등의 연산작업이 자주 일어날때 스트링 클래스를 사용하게되면 힙 메모리에 

많은 수의 임시 가비지들이 생성되어 힙 메모리 부족으로 치명적 영향을 미칠 수 있음!

 


 

이러한 문제점을 해결하기위해

가변의 속성을 가지는 StringBuffer/ StringBuild 클래스를 적합하게 사용할 수 있다.

 

아래와 같이 append() 메서드를 사용하여 "  " <- 문자열을 파라미터로 전달하면, 기존에 할당된 메모리 주소 그대로 값을 변경할 수 있다!

        String str2 = new StringBuffer().append("hello").append(" ").append("world").toString();
        System.out.println(str2);
  • 자기 자신의 메소드를 호출하여 자기 자신의 값을 바꿔나가는 것을 메소드체이닝 이라고 한다.
  • StringBuffer클래스는 메소드 체인 방식으로 사용할 수 있도록 만들어져 있다.
  • 앞에서 5줄로 작성했던 코드를 위와 같이 한 줄로 수정할 수 있다.
  • StringBuffer는 append메소드 외에도 길이를 구하거나, 자르거나 등의 다양한 메소드들을 가지고 있다.

그러면 StringBuilder과는 어떤 차이가 있을까?

바로 동기화의 유무이다.

 

 StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 장점을 가진다. (스트링도 동일함)

 

/ StringBuilder은 동기화를 지원하지 않기에 멀티쓰레드 환경에서는 적합하지 않으나 단일쓰레드 환경에서는 

스트링 버퍼보다 우수한 성능을 가진다.

 

 

클래스 별 특징 정리

 

 

'공부 STUDY > JAVA' 카테고리의 다른 글

[JAVA] 제네릭 Generic  (0) 2023.01.15
[JAVA] java.util패키지 | 컬렉션 프레임워크(Collection Framework)  (0) 2023.01.15
[JAVA] java.lang 패키지/오토박싱  (0) 2023.01.15
[JAVA] Object 클래스, 오버라이딩  (0) 2023.01.15
[JAVA] 예외처리( exception handing ) - (3)사용자 정의 exception  (0) 2023.01.15
    '공부 STUDY/JAVA' 카테고리의 다른 글
    • [JAVA] 제네릭 Generic
    • [JAVA] java.util패키지 | 컬렉션 프레임워크(Collection Framework)
    • [JAVA] java.lang 패키지/오토박싱
    • [JAVA] Object 클래스, 오버라이딩
    CHANGEL
    CHANGEL
    NOT GIVING UP | SOLID BASICS

    티스토리툴바