본문 바로가기
  • 개발공부 및 일상적인 내용을 작성하는 블로그 입니다.
부트캠프/후기 챌린지

[멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.13)

by 방구석 취준생 2026. 1. 22.

* 해당 글은 백엔드 자바 강의이후 회고 글입니다.

https://bootcamp.likelion.net/school/kdt-backendj-21th

 

백엔드 부트캠프 21기: Java : 멋사 부트캠프

실전 스킬 기반 백엔드 개발자 취업 완벽 대비 교육

bootcamp.likelion.net

 

문자열(String) 관련 정리

- 문자열 타입은 final 클래스로서 상속이 불가능하다.

- 문자열 타입은 기본적으로 불변 속성(immutable) 을 가지고 있다. 쉽게말해 같은 문자열 변수에 서로 다른 값을 저장한다면 기존에 저장되어있던 값이 새로 대입하는 값으로 초기화되는 것이 아니라 객체로서 메모리에 공간을 할당받고 새로 생성된다. 그리고 이는 Heap 영역의 String pool 로서 관리된다.

public final class String
    extends Object
    implements Serializable, Comparable<String>, CharSequence

 

- String 클래스가 구현하는 인터페이스 간단 정리

  • Serializable 인터페이스는 객체를 직렬화화여 해당 데이터를 바이트 단위 배열로 외부와 송수신 하는 기능을 가진 인터페이스이다. 주로 파일, 네트워크와 같은 기능을 구현할 때 사용한다.
  • Comparable<String> 인터페이스는 문자열 크기를 비교하여 compareTo 와 같은 메서드로 문자열끼리 사전순으로 정렬할 수 있는 기능을 제공하는 인터페이스이다.
  • CharSequence 인터페이스는 문자열을 문자 시퀀스로 바꾸어 관리하는 기능을 제공한다. 즉, 문자열을 char 형 배열로 관리할 수 있게해준다.

- 자바에서 String 을 불변으로 설정한 이유

  • 캐싱 : String 을 불변하게 함으로서 String pool 에 문자열 값 하나만 저장하여 다시 사용하거나 캐싱에 이용이 가능해지므로 이에따라 JVM 의 Heap 공간을 절약할 수 있다는 장점이 있다.
  • 동기화 : 문자열이 불변함으로서 동시에 실행되는 여러 스레드에서 안정적이게 공유가 가능하다.

StringBuffer / StringBuilder 클래스

StringBuffer / StringBuilder 클래스는 문자열을 연산(추가하거나 변경) 할 때 주로 사용하는 자료형이다.

물론 String 자료형만으로도 + 연산이나 concat() 메서드로 문자열을 이어붙일 수 있다.

그러나 + 연산자를 이용해 String 객체의 문자열을 결합하면 String pool 상에 내용이 합쳐진 새로운 String 인스턴스를 생성하기 때문에 문자열을 많이 결합하면 할 수록 메모리 공간이 낭비되는 동시에 속도 또한 느려지게 되는 단점이 존재한다.

 

이러한 String 클래스의 단점을 보완하기 위해 StringBuffer 클래스와 StringBuilder 클래스를 활용할 수 있다.

- StringBuffer 클래스

public final class StringBuffer
  extends Object
  implements Serializable, CharSequence

 

- StringBuilder 클래스

public final class StringBuilder
 extends Object
 implements Serializable, CharSequence

 

StringBuffer 클래스는 내부적으로 버퍼(buffer) 라고 하는 독립적인 공간을 가지고있는데 이를 통해 문자열에 바로 연산을 수행할 수 있어 메모리상의 공간낭비가 없으며 문자열 연산속도 또한 매우 빠르다.

  • 각종 메서드를 통해 문자열 CRUD 기능을 제공한다.
  • StringBuffer 나 StringBuilder 의 경우 문자열 데이터를 다룬다는 점에서 String 과 같지만 객체의 공간이 부족해지는 경우 버퍼의 크기를 유연하게 늘려주어 가변적(mutable)이라는 차이점이 있다.
  • String 객체는 한번 생성되면 불변적인 특징 때문에 값을 수정하면 매 연산시마다 새로운 문자열을 가진 String 객체가 생성되어 메모리 공간(String pool)을 차지하게 된다.
  • 그러나 StringBuffer, StringBuilder 는 가변적이기 때문에 .append(), .delete() 등의 메서드를 이용하여 동일한 객체내에서 문자열의 크기를 변경하는 것이 가능하다.
  • 따라서 값이 변경될 때마다 새롭게 객체를 만드는 String 보다 훨씬 빠르기 때문에 문자열의 추가, 수정, 삭제가 빈번하게 발생하는 경우라면 String 클래스가 아닌 StringBuffer, StringBuilder 를 사용하는것이 이상적이다.

* StringBuffer / StringBuilder 값 동등 비교

StringBuffer, StringBuilder 클래스는 String 객체와는 달리 equals() 메서드를 오버라이딩 하지 않기 때문에 == 로 비교한것과 같은 결과를 얻게된다.

그렇기 때문에 만약 같은 문자열로 서로 다른 객체를 생성하는 경우 new 키워드로 메모리상에 서로 다른 주소를 할당받게 되기 때문에 == 연산을 하게될 경우 false 를 리턴받게된다.

따라서 StringBuffer, StringBuilder 객체의 데이터 동등연산을 제대로 수행하려면 toString() 메서드로 각 객체를 String 으로 변환해주고 나서 equals() 메서드로 비교를 해주어야 한다.

StringBuffer sb1 = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("hello");

System.out.println(sb1 == sb2); // false
System.out.println(sb2.equals(sb1)); // false

// toString() 으로 String 타입으로 캐스팅 후 equals 비교
String sbStr1 = sb1.toString();
String sbStr2 = sb2.toString();
System.out.println(sbStr1.equals(sbStr2)); // true

 

 

* StringBuffer, StringBuilder 의 차이점

StringBuffer,StringBuilder 두 클래스는 거의 대부분 비슷한 특징을 가지고있으나 한 가지 큰 차이점 또한 존재한다.

  • StringBuffer 클래스는 프로세스에 동기적으로 동작하기 때문에 멀티스레드 상에서 안전하다.(thread safe)
  • StringBuilder 클래스는 프로세스에 비동기적으로 동작하기 때문에 멀티스레드 상에서 안전하지 않다.(thread unsafe)

두 클래스는 동기화(Synchronization) 에서의 지원 유무가 다르다.

StringBuilder 는 동기화를 지원하지 않지만 StringBuffer 는 synchronized  키워드를 사용하여 동기화를 지원하기 때문에 멀티스레드 환경에서도 안전하게 동작할 수 있다.

  • java 에서 synchronized 키워드는 여러개의 스레드가 한 개의 자원에 접근하려고 할 때, 현재 데이터를 사용하고 있는 스레드를 제외하고 나머지 스레드들이 데이터에 접근할 수 없도록 막는 역할을 수행한다.

문자열 자료형 간단 정리

  String StringBuffer StringBuilder
가변 여부 불변 가변 가변
스레드 세이프 O O X
연산 속도 느림 빠름 아주 빠름
사용 시점 1. 문자열 연산이 적은 경우
2. 스레드 세이프 환경인 경우
1. 문자열 연산이 많은 경우
2. 스레드 세이프 환경인 경우
1. 문자열 연산이 많고 빠른 연산이 필요한 경우
2.단일 스레드 환경인 경우

 

 

문자열 관련 참고 자료 : https://inpa.tistory.com/entry/JAVA-%E2%98%95-String-StringBuffer-StringBuilder-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90

 

☕ 자바 String / StringBuffer / StringBuilder 차이점 & 성능 비교

자바에서는 대표적으로 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder 라는 3가지 자료형을 지원한다. 위 3가지 클래스 자료형은 모두 문자열을 다루는데 있어 공통적으로 사용되

inpa.tistory.com

 

 

JAR(Java Archive) 간단정리

jar 파일은 자바에서 사용되는 특정 유형의 아카이브이다. 이는 여러 파일이 포함된 단일 파일이며 가장 중요한 부분은 내부의 파일들이 컴파일된 .class 파일들이라는 것이다.

결국 jar 파일에는 컴파일된 코드가 포함되어 있으므로 두 가지 방식으로 이를 이용할 수 있다.

  •  자바 애플리케이션을 실행할 때 클래스 경로에 jar 파일을 추가하여 안에 포함된 모든 코드를 현재 애플리케이션에서 재사용할 수 있다.
  • jar 파일 자체가 실행 가능한 애플리케이션이 되며 이를 실행할 수 있다.

jar 파일은 java 코드의 편리한 컨테이너 역할을 한다. 또한 jar 파일은 단일 파일에 코드를 저장하므로 자바 라이브러리를 jar 형식으로 쉽게 배포할 수 있다. 

실제로 gradle, maven 을 통한 프로젝트의 의존성을 다운로드 받게되면 수많은 jar 파일들이 의존성에 포함되는 것을 알 수 있다.