Java

Java / String 클래스

Dear-J 2025. 2. 24. 20:15

String 클래스 메서드

length() : 문자열의 길이 반환

charAt(int index) : 특정 인덱스의 문자 반환

substring(int beginIndex, int endIndex) : 문자열의 부분 문자열 반환

indexOf(String str) : 특정 문자열이 시작되는 인덱스 반환

toLowerCase(), toUpperCase() : 문자열을 소문자 또는 대문자로 변환

trim() : 문자열 양 끝의 공백을 제거

concat(String str) : 문자열을 더함

 

String 클래스와 참조형

String은 클래스라 기본형이 아닌 참조형

>> 원칙적으로는 +같은 연산 사용 불가, 문자열을 더할 때는 concat()과 같은 메서드 사용

>> 하지만 문자열은 너무 자주 다루어져서 자바 언어에서 편의상 + 연산 제공

 

String 클래스 - 비교

String 클래스 비교할 떄는 == 비교가 아니라 항상 equals() 비교

동일성(Identity) : == 연산자를 사용해서 두 객체의 참조가 동일한 객체를 가리키고 있는지 확인

동등성(Equality) : equals() 메서드를 사용해서 두 객체가 논리적으로 같은지 확인

 

문자열 리터럴, 문자열 풀

자바가 실행되는 시점에 클래스에 문자열 리터럴이 있으면 문자열 풀에 String 인스턴스를 미리 만들어둠

문자열 풀 덕분에 같은 문자를 사용하는 경우

>> 메모리 사용을 줄이고 문자를 만드는 시간도 줄어들어 성능 최적화

 

프로그래밍에서 풀(Pool)은 공용 자원을 모아둔 곳

힙 영역 사용, 문자열 풀에서 문자를 찾을 때 해시 알고리즘 사용

>> 매우 빠른 속도로 원하는 인스턴스를 찾을 수 있음

 

String 클래스 - 불변 객체

문자열 풀에 있는 String 인스턴스의 값이 중간에 변경되면

>> 같은 문자열을 참고하는 다른 변수의 값도 함꼐 변경되는 사이드 이펙트 문제 발생

 

주요 메서드

 

 

StringBuilder - 가변 String

불변인 String 클래스의 단점

>> 문자를 더하거나 변경해야 하는 상황이면 더 많은 String 객체를 만들고 GC해야 함

>> 컴퓨터의 CPU, 메모리 자원을 더 많이 사용

 

String 최적화를 위해서 + 연산자가 아닌 String Builder를 직접 사용하는 것이 더 좋은 경우

>> 반복문에서 반복해서 문자를 연결할 때

>> 조건문을 통해 동적으로 문자열을 조합할 때

>> 복잡한 문자열의 특정 부분을 변경해야 할 때

>> 매우 긴 대용량 문자열을 다룰 때

 

StringBuilder sb = new StringBuilder(); : 객체 생성

append() : 여러 문자열 추가

insert() : 특정 위치에 문자열 삽입

delete() : 특정 범위의 문자열 삭제

reverse() : 문자열을 뒤집음

String string = sb.toString(); : StringBuilder의 결과를 기반으로 String을 생성해서 반환

 

 

'Java' 카테고리의 다른 글

Java / 열거형 - ENUM  (0) 2025.02.25
Java / 래퍼, Class 클래스  (0) 2025.02.24
Java / 불변 객체  (0) 2025.02.24
Java / Object 클래스  (0) 2025.02.24
Java / 다형성과 설계  (0) 2025.02.23