Java/[국비] JAVA

[국비][JAVA] 가변 객체 StringBuffer 알아보기

줌인. 2024. 6. 4. 22:19

▶ (참고) 불변 객체 String 알아보기 

https://zoooom-in.tistory.com/114

 

[국비][JAVA] 불변 객체 String 알아보기

▶ 참고 사이트https://docs.oracle.com/en%2Fjava%2Fjavase%2F17%2Fdocs%2Fapi%2F%2F/java.base/java/lang/String.html String (Java SE 17 & JDK 17)All Implemented Interfaces: Serializable, CharSequence, Comparable , Constable, ConstantDesc The String clas

zoooom-in.tistory.com

 

toString() 오버라이딩 및 출력
- StringBuffer와 StringBuilder는 내부적으로 가변적인 문자열을 처리할 수 있는 클래스
- 이 두 클래스 모두 Object 클래스로부터 상속받은 toString() 메서드를 오버라이딩하여, 저장된 문자열을 반환
- sb.toString()을 호출하면, StringBuffer나 StringBuilder 객체에 저장된 문자열이 반환됩니다.

StringBuffer 메서드 예시

 

[예제 코드]

public class StringBufferMain1 {
    public static void main(String[] args) { //멀티 쓰레드에 많이 사용
        StringBuffer sb = new StringBuffer(); //이뮤터블 변하는 객체
        System.out.println(sb); //참조값 출력
        sb.append("hello").append(" java"); //메서드 체이닝 가능
        System.out.println("sb = " + sb);

        //String type으로 StringBuffer를 담기위해선 toString()을 꼭해야한다!!
        //객체 생성시는 toString()이 호출되지만, 어딘가에 담을때 toString()이 호출되지 않는다.
        String newSb = sb.toString(); //String으로 변경
        System.out.println(newSb);
    }
}
StringBuilder 객체를 String으로 형변환 불가
- StringBuilder나 StringBuffer 객체를 String 타입으로 직접 형변환(cast)할 수 없는 이유는 이들이 서로 다른 클래스이기 때문
- StringBuilder와 String은 서로 다른 참조 타입이고, 상속 관계에 있지 않음
   ∴ 따라서 형변환이 불가능하며, toString() 메서드를 이용해 문자열을 얻어야 

 

 

ToString()은 객체의 문자열 표현을 반환하는 역할을 함

[참고하면 좋을 것]

더보기

* toString()이란?

- toString() 메서드는 객체의 상태를 사람이 읽기 쉬운 문자열로 표현하는 것을 목표

- 이 메서드는 디버깅, 로깅, 콘솔 출력 등에서 유용하게 사용

- toString() 메서드는 객체를 문자열로 "변환"하는 것이 아니라, 객체의 문자열 표현을 반환하는 것

- System.out.println() 메서드는 객체를 출력할 때 내부적으로 toString() 메서드를 호출

 

 

ⓛ 참조형과 'toString()'

- 모든 Java 객체는 Object 클래스를 상속받고, Object 클래스에는 기본적으로 toString() 메서드가 정의되어 있음

- 기본 toString() 메서드는 다음과 같은 형식의 문자열을 반환

getClass().getName() + "@" + Integer.toHexString(hashCode())

 

② String, StringBuilder, StringBuffer

String str = "example";
System.out.println(str.toString()); // "example" 출력
System.out.println(str); // 내부적으로 str.toString()이 호출되어 "example" 출력

 

③ 기본형과 'toString()'

- 기본형 타입 (int, char, double 등)은 객체가 아니므로 toString() 메서드를 가지고 있지 않음

- 기본형 값을 문자열로 변환하려면, 래퍼 클래스(Integer, Character, Double 등)의 toString() 메서드를 사용

int number = 42;
System.out.println(Integer.toString(number)); // "42" 출력
System.out.println(number); // "42" 출력, 기본형은 자동으로 문자열로 변환되어 출력

 

④ StringBuilder.toString()이 String type이 되는 과정

public static void main(String[] args) { //멀티 쓰레드에 많이 사용
    StringBuilder sb = new StringBuilder();
    sb.append("hello").append(" java");
    System.out.println(sb); // 내부적으로 sb.toString()이 호출되어 "hello java" 출력
    //sb.toString()은 StringBuilder 객체의 현재 문자열 값을 반환 (==객체 상태를 문자열로 표현)

    //StringBuilder나 StringBuffer 객체에 저장된 문자열을 String 타입으로 얻고자 할 때 toString() 메서드를 호출
    StringBuilder sb = new StringBuilder();
    sb.append("hello").append(" java");
    String newSb = sb.toString(); // String으로 변경
    System.out.println(newSb); // "hello java" 출력
    //toString() 메서드를 호출한다고 해서 StringBuilder 객체 자체가 String 객체로 변환되는 것 아님
    //대신, toString() 메서드는 StringBuilder 객체가 내부적으로 가지고 있는 문자열 데이터를 String 객체로 반환 
    //이 반환된 String 객체는 StringBuilder 객체와는 별개의 새로운 객체
}

sb가 가지고 있는 문자열 데이터를 기반으로 새로운 String 객체가 반환된다는 것

 

 

728x90