String 클래스

·2025년 5월 18일

Power Java

목록 보기
46/75

8.8 String 클래스

String 클래스

-String 클래스는 문자열을 구성하는 문자들을 내부에 저장한다.
-String 안에 저장된 문자에는 인덱스가 존재한다.

< 객체 생성 >

: 자바에서 객체를 생성하는 유일한 방법은
new를 사용하는 것이다.

하지만 문자열은 프로그래밍에서 아주 많이 사용되기 때문에
2가지 방법으로 String 객체를 생성할 수 있다.

String s1 = "Java";	// (1) 많이 사용하는 방법
String s2 = "Java";
String s3 = new String("Java");	// (2) 원칙
String s4 = new String("Java");

-> String 객체를 생성할 때, (2)와 같이 new를 사용해서 String 객체를 생성하면 문자열이 동일하여도 새로운 객체를 생성한다.
-> (1)과 같이 문자열 상수로 초기화하면, 문자열 상수 풀(pool)을 조사하여 동일한 문자열을 가진 객체가 존재하면 이것을 공유한다.

==> 결과적으로 s3과 s4는 별도의 객체를 가리키지만, s1과 s2는 문자열 상수 풀에 있는 동일한 객체를 가리키게 된다.

< 문자열의 기초 연산들 >

length()
: 문자열의 길이를 반환한다.

String s = "Hello World";	// 객체 생성
int size = s.length();		// 12가 반환됨

charAt()
: 객체 안에 들어있는 문자를 추출한다.

String s = "Hello World";
char c = s.charAt(0);		// 'H'가 반환된다.

concat()
: 2개의 문자열을 붙인다. (+ 연산자가 더 편리함)

String result = "A chain" + " is only as strong" + "as its weakest link";

< 문자열 비교하기 >

-> equals()를 호출하면 된다.

String s1 = "Java";	// (1) 많이 사용하는 방법
String s2 = "Java";
String s3 = new String("Java");	// (2) 원칙
String s4 = new String("Java");

System.out.println(s1.equals(s2));	// true, 올바른 방법
System.out.println(s1.equals(s3)); // true, 올바른 방법
System.out.println(s1==s2);	// true이지만 올바르지 않은 방법
System.out.println(s1==s3); // false, 올바르지 않은 방법

System.out.println(s1==s2); // true이지만 올바르지 않은 방법
=> true를 반환하는 이유는 문자열 풀에서 동일한 객체를 사용하기 때문이다.

< 문자열 안에서 단어 찾기 >

-> indexOf()를 사용하는 것이 가장 쉽다.
단어의 시작 위치가 반환된다.

< 문자열을 단어로 분리할 때 >

& 예전에는 StringTokenizer 클래스 사용하였지만,
최근에는 String 클래스가 제공하는 split() 메소드 사용한다.

: 문자열을 분석하여 토근으로 분리시켜주는 기능 제공.

  • 분리자 문자 지정 가능.
String[] tokens = "I am a boy.".split(" ");	// 공백을 기준으로 문자열 분리
for (String token : tokens)
	System.out.println(token);
실행결과
I
am
a
boy

StringBuffer 클래스

•단점
-문자열의 내용을 변경하는 String 클래스 메소드의 경우, 새로운 String 객체를 생성하고 기존의 내용을 복사해야 한다.
=> 따라서 빈번하게 문자열을 변경할 때에는 비효율적이다.

String 객체는 불변성을 가진 객체이다.

빈번하게 문자열이 추가, 수정, 삭제되는 경우
히프 메모리에 많은 가비지 객체가 생성되어서 히프 메모리가 부족해지기도 한다.
ex) 100만개의 String 객체에 대하여 + 연산을 하는 경우 100만 개의 가비지 객체가 생성됨.

변경 가능한 문자열을 위하여 String 클래스의 대안으로
StringBuffer 클래스를 사용할 수 있다.


-StringBuffer 객체는 내부적으로 문자열을 저장하는 메모리를 가지고 있다.
(= 버퍼)
버퍼의 총 크기는 capacity가 나타내고,
현재 저장된 문자열의 길이는 length이다.

length(), capacity() 메소드가 존재한다.

StringBuffer sb = new StringBuffer("Hello");	// 16바이트의 공간이 할당된다.
int length = sb.length();		// 5
int capacity = sb.capacity();	// 21
  • String 버퍼가 제공하는 메소드
    1) append()
    : 문자열의 끝에 여러 종류의 데이터를 추가.
    2) insert()
    : 문자열의 특정 위치에 여러 종류의 데이터를 "문자열"로 바꾸어 삽입.
    *어떤 타입의 데이터도 받을 수 있도록 중복 정의 되어있음.


1. String은 불변 객체이고, StringBuffer는 가변 객체이다. 문자열 변경 시 스트링버퍼는 기존 객체에서 직접 변경하여 속도가 빠르다.
2. "Hello3"

0개의 댓글