[CS] 문자열 클래스

박상민·2023년 3월 8일
0

Computer Science

목록 보기
9/29

📌 String의 특징

💡 문자열 연산이 적고, 조회가 많은 멀티쓰래드 환경에서 좋다.

  • 불변성을 가지고 있다.
  • new 연산을 통해 생성된 인스턴스의 메모리 공간은 변하지 않는다. ( = Immutable)
  • Garbage Collector로 제거되어야 한다.
  • 객체가 불변하므로 문자열 연산시 새로 객체를 만드는 Overhead가 발생한다.
  • 객체가 불변하므로 Multithread에서 동기화를 신경쓸 필요가 없다.

📌 StringBuffer

💡 Thread-safe : 멀티쓰래드 프로그래밍에서 어떤 변수에 동시 접근이 이루어져도 프로그램 실행에 전혀 문제가 없다는 것을 의미한다.

  • new 연산을 통해 클래스를 한번만 생성한다. ( = Mutable)
  • 문자열 연산시 추가 메모리 생성 없이 기존 문자열이 확장되는 클래스이다.
  • 멀티쓰래드 환경에서 문자열의 안전한 변경을 보장(thread-safe)하는 특징이 있다.
  • String과는 다르게 문자열이 빈번하게 변경될 때 사용하면 성능이 좋다.
class Main{
	public static void main(String[] args) throws Exception{
    	StringBuffer sb = new StringBuffer("test");
        System.out.println(sb + " " + System.identityHashCode(sb));
        
        sb.append("2");
        sb.append("3");
        System.out.println(sb + " " + System.identityHashCode(sb));
    }
}

📌 StringBuilder

  • new 연산을 통해 클래스를 한번만 생성한다. ( = Mutable)
  • 문자열 연산시 추가 메모리 생성 없이 기존 문자열이 확장되는 클래스이다.
  • 멀티쓰래드 환경에서 문자열의 안전한 변경을 보장해주지 않는(not thread-safe) 특징이 있다.
  • String과는 다르게 문자열이 빈번하게 변경될 때 사용하면 성능이 좋다.
class Main{
	public static void main(String[] args) throws Exception
	{		
		StringBuilder sb = new StringBuilder("test");
		System.out.println(sb + " " + System.identityHashCode(sb)); 
        
		sb.append("2");
		sb.append("3"); //문자열 추가 
		System.out.println(sb + " " + System.identityHashCode(sb));//문자열과 메모리 주소 출력
	}
}

📌 StringBuffer와 StringBuilder의 특징

  • 공통점
    • new 연산으로 클래스를 한번만 생성한다.
    • 문자열 연산시 새로 객체를 만들지 않고, 크기를 변경시킨다.
    • StringBuffer와 StringBuilder 클래스의 메서드가 동일하다.
  • 차이점
    • StringBuffer는 Thread-Safe 하지만 StringBuilder는 Not Thread-Safe 이다.

💡 StringBuffer : 문자열 연산이 많은 Muti-Thread 환경
💡 StringBuilder : 문자열 연산이 많은 Single-Thread 또는 Thread 신경 안쓰는 환경

profile
💡 클린코드를 지향하는 Backend Developer

0개의 댓글