나의 IT일지
String클래스, StringBuffer클래스 본문
자바에서는 개발자들이 패키지와 클래스를 다룰 수 있도록 기본적인 기능이 구현되어 있다. 이렇게 개발자들이 개발하기 위해 필요한 기능을 기본적으로 구현한 클래스, 인터페이스를 API라고 하며, import를 통해 클래스를 호출해서 해당 클래스의 메서드를 사용한다.
하지만 모든 클래스는 java.lang 패키지를 기본적으로 사용하기에, import없이 java.lang패키지에 있는 클래스를 사용할 수 있다. 이때 java.lang 패키지는 개발자가 사용하는 기본적인 클래스를 담아놓은 패키지로, 클래스의 종류는 다음과 같다.
클래스 | 특징 |
Object | - 자바 클래스의 최상위 클래스 |
System | - 표준 입력 장치를 통해 데이터를 입력 - 표준 출력 장치를 통해 데이터를 출력 |
Class | - 클래스를 메모리로 로딩 |
String | - 문자열을 저장하고 여러가지 정보를 흭득 |
Wrapper | - 기본 타입의 데이터를 갖는 객체를 생성 |
Math | - 수학 함수를 이용할 때 사용 |
java.lang.String
문자열은 문자들이 배열형태로 이루어져 있는 타입으로, 다른 기본타입를 생성하는 것처럼 "타입 참조변수 = 리터널 값"의 형식으로 초기화가 가능하다. 하지만 문자열은 기본타입과 달리 String 클래스를 통해 인스턴스(객체)를 만들어서 사용하게 된다. 그래서 문자열 객체는 클래스에 구현되어 있는 메서드를 사용할 수 있다.
- concat(문자열) : 객체의 문자열에 매개 값의 문자열을 추가
- substring(인덱스, 인덱스) : 객체의 문자열 중, 첫번째 매개 값의 인덱스에 있는 데이터부터 두번째 매개 값의 인덱스 전까지의 데이터를 호출 (만약 두번째 인덱스가 생략 되어 있으면, 끝까지 호출)
- length() : 문자열 길이 호출
- toUpperCase() : 객체의 문자열을 대문자로 변형해서 호출
- toLowerCase() : 객체의 문자열을 소문자로 변형해서 호출
- charAt(인덱스) : 객체의 문자열 중, 매개 값의 인덱스에 있는 문자를 호출
- indexOf(문자열) : 객체의 문자열 중, 매개 값의 문자열이 시작하는 인덱스값 호출
- equals(문자열 / 객체) : 객체의 문자열과 매개 값의 문자열, 객체의 문자열이 동일한지 비교
- trim() : 객체의 문자열의 맨 앞과 맨 뒤의 공백을 삭제해서 호출
- replace(문자,문자) : 객체의 문자열중 첫번째 매개 값의 문자를 두번째 매개 값의 문자로 변경
- replaceAll("바꿀 예정 문자열", "바꿀 문자열") : 객체의 문자열중 첫번째 매개 값의 문자열을 두번째 매개 값의 문자열로 변경
- valueOf(다른 타입의 변수 / 값) : 해당 매개변수에 저장되어 있는 값으로 문자열 타입의 객체를 생성
package pack0513;
public class Code1 {
public static void main(String[] args) {
String str = "hello";
String st1;
st1 = "gead";
System.out.println(str.concat("world"));
System.out.println(str.substring(1,4));
System.out.println(str.length());
System.out.println("Test".toUpperCase());
System.out.println("Test".toLowerCase());
System.out.println(str.charAt(2));
System.out.println(str.indexOf("llo"));
System.out.println(str.equals("hello"));
System.out.println(str.equals("Hello"));
System.out.println(" te st".trim());
System.out.println("hello world".replace('l','L'));
System.out.println("hello world".replaceAll("hello","Bye"));
}
}
이때, 해당 메서드를 사용하여도 객체에 저장되어 있는 문자열은 변경되지 않는다.
package pack0513;
public class Code2 {
public static void main(String[] args) {
String str = "test";
str.replace('t', 'T');
System.out.println(str);
}
}
두 문자열에 같은 문자열 리터럴을 저장하는 경우, 두 문자열의 객체는 공유하도록 되어있다. 예를 들면 아래와 같이 값이 저장 되었다고 하자.
String name1 = "Java"
String name2 = "Java"
이런 경우에는 name1과 name2는 서로 같은 객체로, "=="연산자를 통해 두 참조변수가 같은 객체의 주소를 가지고 있는 것을 확인할 수 있다.
이것을 방지하기 위해서는 new연산자를 사용해서 서로 다른 객체임을 선언해야 한다.
String name1 = new String(Java)
String name2 = new String(Java)
java.lang.StringBuffer
String클래스에서 만들어지는 문자열 객체는 수정이 불가능하다. 그래서 문자형을 사용할 때 마다, 새로운 객체를 생성해야 하는데, 객체를 생성할수록 프로그램은 무거워지게 된다. 그래서 StringBuffer 클래스를 통해 새로운 객체를 만들지 않고 수정할 수 있는 객체를 생성한다. 이때, StringBuffer클래스는 String클래스와 달리 new연산자를 통해 객체를 생성해야 한다.
- replace(인덱스, 인덱스, 문자열) : 객체의 문자열중 첫번째 매개 값의 인덱스부터 두번째 매개 값의 인덱스의 전까지의 문자열을 매개 값의 문자열로 변경
- append(문자열/숫자) : 객체의 문자열에 매개 값의 문자열이나 숫자를 문자로 바꾸어서 추가
- reverse() : 객체의 문자열의 순서를 반대로 변경
- insert(인덱스, 문자열) : 객체의 문자열에 매개 값의 인덱스에 문자열을 추가
- delete(인덱스, 인덱스) : 객체의 문자열중 첫번째 매개 값의 인덱스부터 두번째 매개 값의 인덱스의 전까지의 문자열을 삭제
- deleteCharAt(인덱스) : 객체의 문자열중 매개 값의 인덱스의 문자를 삭제
package pack0513;
public class Code2 {
public static void main(String[] args) {
String str = "test";
StringBuffer buffer = new StringBuffer("test");
System.out.println("str : "+str);
System.out.println("buffer : "+buffer);
str.replace('t', 'T');
buffer.replace(1, 3, "ES");
System.out.println("str : "+str);
System.out.println("buffer : "+buffer);
str.concat("Test");
buffer.append("Test");
System.out.println("str : "+str);
System.out.println("buffer : "+buffer);
buffer.reverse();
System.out.println("buffer : "+buffer);
buffer.delete(0,4);
System.out.println("buffer : "+buffer);
buffer.deleteCharAt(3);
System.out.println("buffer : "+buffer);
}
}
String클래스는 메서드를 통해 해당 객체의 내용을 변경할 수 없지만 StringBuffer클래스는 메서드를 통해 해당 객체의 내용을 변경할 수 있는 것을 확인할 수 있다.
StringBuffer VS StringBuilder |
StringBuilder클래스는 StringBuffer클래스와 마찬가지로 내용을 변경할 수 있는 문자열 객체를 만들 수 있는 클래스로, StringBuffer는 다중 작업을 처리할 때 사용한다면, StringBuilder는 단일 작업을 처리할 때 사용한다. |
'프로그래밍 언어 > Java' 카테고리의 다른 글
StringTokenizer클래스, Random클래스 (0) | 2023.05.17 |
---|---|
Wrapper클래스 (0) | 2023.05.16 |
API와 Object 클래스 (0) | 2023.05.11 |
예외 떠넘기기 (0) | 2023.05.06 |
예외 처리 (0) | 2023.05.05 |