Java ‐ 예외 처리와 고급 자바 기법 - thought-corner/Backend-PlayGround GitHub Wiki

예외 처리 방법

  • try~catch : 예외 발생 시 특정 코드를 실행시켜 프로그램이 정상 흐름으로 복귀하도록 처리
  • throws : 메서드에서 예외가 발생할 가능성이 있음을 호출부 측에 알림
  • throw : 직접 예외를 발생시킬 때 사용

String vs StringBuffer vs StringBuilder 비교

1. String : 불변성(Immutability)

String은 한 번 생성되면 그 값이 절대 변하지 않는다.

  • 동작 방식 : str = str + string을 하면 기존 str뒤에 붙는 것이 아니라 완전히 새로운 String 객체를 Heap에 만들고 참조 주소를 바꾼다.
  • 문자열 풀 : JVM은 메모리를 아끼고자 동일한 리터럴을 풀에서 공유한다. static 변수와 같이 프로그램 전체에서 재사용된다.
  • 장점 : 불변성을 보장하므로 멀티쓰레드에서 안전하고 캐싱이 가능해서 보안이나 해시맵의 키로 적합하다.
  • 단점 : 루프 안에서 문자열을 계속 더하면 객체들이 Heap에 가득 차서 비효율적인 메모리 사용이 야기될 수 있다.

2. StringBuffer vs StringBuilder

두 클래스는 내부적으로 char[] 배열을 가지고 있고, 공간이 부족하면 알아서 늘린다. 새로운 객체를 만들지 않고 기존 배열의 값을 직접 바꾼다.

  • StringBuffer : 메서드마다 동기화 키워드가 붙어 있어 여러 쓰레드가 동시에 하나의 문자열에 접근해서 수정해야 할 때는 안전하다. 다만 동기화 처리를 위한 락을 거는 과정이 수반되어 StringBuilder보다 느리다.
  • StringBuilder : 문자열 조립은 메서드 내부에서 일어나고 메서드 내부 변수는 쓰레드 간 공유되지 않는 스택 영역에 있기 때문에 동기화가 필요없어 가장 빠르다.