Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 IT일지

String클래스, StringBuffer클래스 본문

프로그래밍 언어/Java

String클래스, StringBuffer클래스

세레프 2023. 5. 12. 22:55

 자바에서는 개발자들이 패키지와 클래스를 다룰 수 있도록 기본적인 기능이 구현되어 있다. 이렇게 개발자들이 개발하기 위해 필요한 기능을 기본적으로 구현한 클래스, 인터페이스API라고 하며, import를 통해 클래스를 호출해서 해당 클래스의 메서드를 사용한다.

 하지만 모든 클래스는 java.lang 패키지를 기본적으로 사용하기에, import없이 java.lang패키지에 있는 클래스를 사용할 수 있다. 이때 java.lang 패키지는 개발자가 사용하는 기본적인 클래스를 담아놓은 패키지로, 클래스의 종류는 다음과 같다.

클래스 특징
Object - 자바 클래스의 최상위 클래스
System - 표준 입력 장치를 통해 데이터를 입력
- 표준 출력 장치를 통해 데이터를 출력
Class - 클래스를 메모리로 로딩
String - 문자열을 저장하고 여러가지 정보를 흭득
Wrapper - 기본 타입의 데이터를 갖는 객체를 생성
Math - 수학 함수를 이용할 때 사용

 

java.lang.String

 문자열문자들이 배열형태로 이루어져 있는 타입으로, 다른 기본타입를 생성하는 것처럼 "타입 참조변수 = 리터널 값"의 형식으로 초기화가 가능하다. 하지만 문자열은 기본타입과 달리 String 클래스를 통해 인스턴스(객체)를 만들어서 사용하게 된다. 그래서 문자열 객체는 클래스에 구현되어 있는 메서드를 사용할 수 있다.

 

String (Java Platform SE 8 )

Compares two strings lexicographically. The comparison is based on the Unicode value of each character in the strings. The character sequence represented by this String object is compared lexicographically to the character sequence represented by the argum

docs.oracle.com

  • 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연산자를 통해 객체를 생성해야 한다.

 

StringBuffer (Java Platform SE 8 )

Inserts the string into this character sequence. The characters of the String argument are inserted, in order, into this sequence at the indicated offset, moving up any characters originally above that position and increasing the length of this sequence by

docs.oracle.com

  • 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
Comments