Java

[인프런] String 클래스

sejin2 2024. 6. 8. 14:43

String 클래스 - 기본

자바에서 문자를 다루는 대표적인 타입은 char, String 두가지가 있다.

String은 대문자로 시작한다. 즉, 클래스이다. 

따라서 String 을 사용할 때 쌍따옴표로 사용하는 것도 가능하고, 객체를 생성하는 것도 가능하다. 

문자열은 매우 자주 사용되므로 편의상 쌍따옴표로 문자열을 감싸면 자바 언어에서 new String("hello") 와 같이 변경해준다. 

 

String 클래스 구조

클래스이므로 속성과 기능을 가진다.

속성 ( 필드 )

String의 실제 문자열 값이 보관된다.
문자 데이터 자체는 char [ ]에 보관된다. (자바 9부터는 char[ ] 대신 byte [ ] 를 사용 )
Stirng 클래스는 개발자가 직접 다루기 불편한 char[ ] 을 내부에 감추고 편리하게 문자열을 다룰 수 있는 다양한 기능을 제공한다. 

기능 ( 메서드 )

String 클래스는 문자열로 처리할 수 있는 다양한 기능을 제공한다. 필요 기능이 있으면 검색하거나 API 문서 찾아보기 !!!

 

<< 주요 메서드들 >>

  • length ( ) : 문자열의 길이를 반환
  • charAt ( int index ) : 특정 인덱스의 문자를 반환
  • subString ( int beginIndex, int endIndex ) : 문자열의 부분 문자열을 반환
  • indexOf ( String str ) : 특정 문자열이 시작되는 인덱스를 반환
  • toLowerCase( ) , toUpperCase( ) : 문자열을 소문자 또는 대문자로 변환
  • trim ( ) : 문자열 양 끝의 공백 제거
  • concat ( String str ) : 문자열 더하기 

String 클래스와 참조형

String은 클래스 이므로 기본형이 아니라 참조형이다.

참조형은 변수에 주소값( 참조값 )이 들어있기 때문에 +와 같은 연산을 사용할 수 없다. 

자바에서 문자열을 더할 때에는 String이 제공하는 concat( ) 메서드를 사용해야하는데, 문자열은 너무 자주 사용되기 때문에 자바 언어에서 편리상 + 연산을 사용할 수 있다. 

 

String 클래스 - 비교

String 클래스를 비교할 때는 == (동일성) 비교가 아니라 항상 equals( ) 비교를 해야한다.

  • 동일성 : == 연산자를 사용해서 두 객체의 참조가 동일한 객체를 가리키고 있는지 확인
  • 동등성 : equals 메서드를 사용하여 두 객체가 논리적으로 같은지 확인

문자열을 new 해서 인스턴스 생성을 하여 사용하지 않고 , 문자열 리터럴( Stirng str1 = "hello"; ) 을 사용하는 경우
자바는 메모리 효율성과 성능 최적화를 위해 문자열 풀을 사용한다. 
자바가 실행되는 시점에 클래스에 문자열 리터럴이 있으면 문자열 풀에 String 인스턴스를 미리 만들어두고, 이때 같은 문자열이 있으면 만들지 않는다.
따라서 같은 문자를 사용하는 경우 같은 참조값을 사용하기 때문에 메모리 사용을 줄이고, 문자를 만드는 시간도 줄어들어 성능 최적화에 도움이 된다.

 

문자열은 항상 동등성 비교를 해야 한다. ( String 인스턴스가 new로 만들어진 것인지, 리터럴로 만들어진 것인지 모르는 경우가 발생하기 때문 ! )

 

String 클래스 - 불변 객체

String은 불변 객체이므로 생성 이후에 절대로 내부 문자열 값을 변경할 수 없다.

따라서 변경이 필요한 경우 기존 값을 변경하지 않고, 대신에 새로운 결과를 만들어서 반환해야 한다. 

 

StringBuilder - 가변 String

불변인 String의 내부 값은 변경할 수 없기 때문에 변경된 값을 기반으로 새로운 String 객체를 생성한다.

이는 단점으로 작용하는데 문자를 더하거나 변경할 때마다 계속해서 새로운 객체를 생성하게 된다.

이는 컴퓨터의 CPU, 메모리 자원을 더 많이 사용하게 된다.

이 때 사용하는 것이 가변 String인 StringBuilder이다.

 

StringBuilder 객체를 생성하고, 

append() 메서드를 사용해 여러 문자열 추가가 가능하고,
inset( ) 메서드로 특정 위치에 문자열을 삽입할 수 있다.

또한, delete( ) 메서드로 특정 범위의 문자열을 삭제가 가능하고,
reverse( ) 메서드로 문자열을 뒤집는 것이 가능하다.

 

변경이 끝난 후 이를 toString( ) 메서드를 통해 String을 생성해서 반환할 수 있다.

 

메서드 체이닝 기법

객체의 메서드가 호출된 후, 그 메서드가 객체 자체를 반환하여 다음 메서드를 연속적으로 호출할 수 있게 하는 방식이다.

이는 여러 문자열 조작을 하나의 문장으로 작성할 수 있어 코드가 더 직관적이고 읽기 쉬워진다는 장점이 있다.

public class MethodChainingExample {
    public static void main(String[] args) {
        String originalString = " Hello, World! ";
        
        String result = originalString.trim().toLowerCase().replace('!', '.');
        
        System.out.println(result);  // 출력: "hello, world."
    }
}

 

 

 

 

 

 

 

공부 내용: [인프런] 김영한의 실전 자바 - 중급 1편

'Java' 카테고리의 다른 글

[인프런] Class 클래스  (1) 2024.06.09
[인프런] 래퍼 클래스  (1) 2024.06.09
[인프런] 기본형과 참조형의 공유  (0) 2024.06.06
Labelled Loop ( 이름을 가지는 반복문 )  (0) 2024.06.03
Enhanced for문  (0) 2024.06.03