String
불변의 정의를 기본으로 하고 있음
만약 변경된다면 다른 메모리를 할당하여 수정값을 넣은다음 그 메모리를 사용한다.
변경이 빈번하다면 메모리 사용이 비효율적이다
StringBuffer vs StringBuilder
가변의 정의를 기본으로 하고 있음.
변경 된다면 동일한 메모리에 값을 추가하거나 삭제한다.
차이점은 StringBuffer는 동기화를 하여 멀티스레드에 사용하면 좋고 StringBuilder는 동기화하지 않아 단일스레드에서 사용하면 좋다
※ 여러 스레드가 한 자원을 사용하려고 할 때 다른 스레드의 접근을 막는 것을 동기화라 한다.