-
[CS/JAVA] String, StringBuffer, StringBuilder의 차이 / 접근 제한자 / 클래스 멤버 변수 초기화 순서CS/Java 2025. 1. 22. 21:07
• String, StringBuffer, StringBuilder의 차이를 설명해주세요.
- String은 불변의 속성을 가지며, StringBuffer와 StringBuilder는 가변의 속성을 가집니다.
- StringBuffer는 동기화를 지원하여 멀티 쓰레드 환경에서 주로 사용하며,
- StringBuilder는 동기화를 지원하지 않아 싱글 쓰레드 환경에서 주로 사용합니다.
• String 객체가 불변인 이유에 대해 아는대로 설명해주세요.
➀ 캐싱 기능에 의한 메모리 절약과 속도 향상
- 자바에서 String 객체들은 Heap의 String Pool 이라는 공간에 저장되는데, 참조하려는 문자열이 String Pool에 존재하는 경우 새로 생성하지 않고 Pool에 있는 객체를 사용하기 때문에 특정 문자열 값을 재사용하는 빈도가 높을수록 상당한 성능 향상을 기대할 수 있습니다.
➁ thread-safe
- String 객체는 불변이기 때문에 여러 쓰레드에서 동시에 특정 String 객체를 참조하더라도 안전합니다.
➂ 보안 기능
- 중요한 데이터를 문자열로 다루는 경우 강제로 해당 참조에 대한 문자열 값을 바꾸는 것이 불가능하기 때문에 보안에 유리합니다.
• 접근 제한자에 대해 설명해주세요.
변수 또는 메소드의 접근 범위를 설정해주기 위해서 사용하는 자바의 예약어를 의미하며, 총 4가지 종류가 있습니다.
- public : 접근 제한이 없습니다. (같은 프로젝트 내 어디서든 사용 가능)
- protected : 해당 패키지 내, 다른 패키지에서 상속받아 자손 클래스에서 접근 가능합니다.
- (default) : 해당 패키지 내에서만 접근 가능합니다.
- private : 해당 클래스에서만 접근 가능합니다.
• 클래스 멤버 변수 초기화 순서에 대해 설명해주세요.
- static 변수 선언부 : 클래스가 로드될 때 가장 먼저 초기화됩니다.
- 필드 변수 선언부 : 객체 생성시, 생성자 실행 전에 초기화됩니다.
- 생성자 block : 필드 변수 초기화 후, 객체를 완전히 초기화하기 위해 실행됩니다. (JVM은 내부적으로 객체를 생성할 때 thread-safe한 처리를 위해 locking을 사용)
* 위 글은 아래 문서를 참고해 작성했습니다.
https://dev-coco.tistory.com/153
review 1회독 2회독 3회독 4회독 5회독 check ✅(1/23) 반응형'CS > Java' 카테고리의 다른 글