java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스
·
자바/java.lang 패키지
1. StringBuffer 클래스 - String 클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만, StringBuffer 클래스는 변경이 가능하다. - 내부적으로 문자열을 편집을 위한 공간(buffer)이 있으며, 인스턴스 생성 시, 그 크기를 지정할 수 있다. - 이때, 크기는 충분히 잡는 것이 좋다. - StringBuffer(int length) 생성자를 통해 크기를 지정하는데, 만약 무시한다면, 16개의 문자를 저장할 수 있는 크기의 버퍼를 생성한다. - 아래의 코드는 StringBuffer에 대한 클래스 생성자 구조이다. public final class StringBuffer implements java.io.Serializable{ private char[] value; ..
java.lang패키지(4) - String 클래스(2)
·
자바/java.lang 패키지
1. join()과 StringJoiner 클래스 - join()은 split()과 반대의 역할을 한다. - 아래의 코드를 보자. - 또한 java.util.StringJoiner 클래스를 사용해서 문자열을 결합할 수 있다. - 아래의 코드를 보자. 2. 문자 인코딩 변환 ( getBytes()를 사용하여 해당 문자열의 문자 인코딩을 바꿔준다. ) ( 또한 byte[] 코드를 다시 문자열로 바꿔줄 수 있다. ) - 아래의 코드를 보자. ( "가"에 대한 UTF-8은 0xEAB080 이고, CP949는 0xBOA1이다. ) ( String.format() 메서드는 c언어에서의 printf()이다. ) 3. 기본형 값과 String 값과의 변환 ( 아래는 기본형 값 -> String 값으로 변환하는 코드이다..
java.lang패키지(3) - String 클래스(1)
·
자바/java.lang 패키지
1. 변경 불가능한(immutable) 클래스 - 변경 불가능한 클래스는 아래의 예시를 통해 이해하자. (1) String 클래스의 참조변수 a와 b가 있는데, 각각 "a"와 "b"를 가지고 있다고 가정한다. (2) 이 둘을 합쳐서 참조변수 a에 저장하면 "ab" 문자열이 저장된다. ( 그러나 이것은 변경된 것이 아니라 새로운 인스턴스를 생성된 것이고 기존에 "a"가 저장된 주소공간을 가리키는 것이 아니라 새로 생성된 인스턴스 공간을 가리키게 되는 것이다. ) ( 단, 이러한 작업은 메모리 공간을 더욱 늘리게 되므로, 결합횟수를 줄이는 것이 좋다. ) ( 만약 문자열간의 결합이나 추출 등 문자열을 다루는 작업이 많은 경우에는 String 클래스 대신 StringBuffer 클래스를 사용하는 것이 좋다. ..
java.lang 패키지(2) - Object 클래스(2)
·
자바/java.lang 패키지
1. 얇은 복사와 깊은 복사 - clone()은 단순히 객체에 저장된 값을 그대로 복제할 뿐, 객체가 참조하고 있는 객체까지 복제하지 않는다. - 기본형 배열인 경우는 오버라이딩을 해서 문제가 되지 않지만, 객체 배열을 clone()으로 복제하는 경우에는 원본과 복제본이 같은 객체를 공유하므로 완전한 복제가 아니다. 이러한 것을 shallow copy라고 부른다. - 반면에 원본이 참조하고 있는 객체까지 복제하는 것을 deep copy라고 한다. - 아래의 코드는 shallow copy를 보여준다. ( c1의 객체 p의 x를 4로 바꿨지만 c2의 객체 p의 x도 영향을 주어 출력값이 4가 나왔다. ) ( 그러므로, 확실하게 deep copy를 통해 옮겨주어야 한다. ) - 아래의 코드는 deep copy..