문자열클래스

Byeonghyeon Kim·2021년 6월 24일
0

알고리즘문제

목록 보기
85/93
post-thumbnail

문자열클래스

  • 문자열을 다루는 String 클래스와 이를 보완한 StringBuffer, String Builder에 대해 알아보자

String 객체와 메모리

  • 문자열을 다루는 String 클래스(객체)는 데이터가 변화면 메모리상의 변화가 많아 속도가 느림
  • 예시
    • String str = 'JAVA'; 이렇게 만들면
    • str이라는 레퍼런스는 'JAVA'가 입력된 곳의 주소값을 갖게 됨
    • 이때 만약 str = str + "PYTHON" 이런식으로 str에 문자열을 더하면
    • 기존에 있던 'JAVA'라는 메모리 공간의 뒤에 붙는 것이 아니라
    • 'JAVAPYTHON' 이라는 객체가 메모리에 새로 생성되고 str은 새로운 값의 주소를 갖게 됨
      • 즉, 기존의 객체를 버리게 되고 기존 객체는 GC에 의해서 메모리 회수됨
      • 따라서 메모리의 효율성이 감소

StringBuffer, StringBuilder

  • String 클래스의 단점을 보완한 클래스

  • 데이터가 변경되면 메모리에서 기존 객체를 재활용

  • 예시

    • StringBuffer sf = new StringBuffer("JAVA");
    • 메모리에 'JAVA'라는 객체 생성, sf라는 레퍼런스에 주소값 갖게됨
    • sf.append("PYTHON");
    • append 메서드로 문자열을 추가
    • 기존 'JAVA'라는 객체를 재활용, 즉 같은 메모리 주소값을 갖게 된다
    • 속도는 StringBuilder가 조금 빠름
    • 데이터 안정성은 StringBuffer가 조금 더 좋다.
      • 메모리에 데이터가 들어가고 빠질 때 싱크로나이즈 기법 사용
      • 데이터가 순차적으로 들어올 때 하나씩 메모리를 받음
      • 따라서 데이터의 누락, 손실등이 발생하지 않음
  • 메서드

    • .length
    • .append
    • .insert(인덱스, "삽입할 내용")
    • .delete(인덱스(이상), 인덱스(미만))
  • StringBuilder도 똑같이 사용하면 됨

profile
자기 주도 개발전 (개발, 발전)

0개의 댓글