코딩이란 무엇일까

[Java/자바]기본 API클래스 (String 클래스)알아보기 본문

Java

[Java/자바]기본 API클래스 (String 클래스)알아보기

둥구는 지굴다 2022. 10. 7. 14:54

안녕하세요 오늘은  자바에서 API의 개념에 대해 알아보고 

그중 String클래스와 String클래스에서 사용할 수 있는 메서드들을 알아보겠습니다.

 

API란?

API ⇒ Application Programming Interface의 줄임말로 API는 라이브러리라고도 부릅니다.

라이브러리라 하면 어떤 게 생각나시나요?? 보통은 도서관과 같은 단어가 떠오르실 겁니다.

도서관에서 저희가 원하는 책을 선택해서 읽을 수 있죠?

즉, API는 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음이라 할 수 있습니다.

우리가 사용해왔던  String클래스와 System클래스도 API에 속하는 클래스입니다.

아래 사이트는 자바 API를 정리해 놓은 사이트입니다.

https://docs.oracle.com/en/java/javase/16/docs/api/java.base/module-summary.html

 

java.base (Java SE 16 & JDK 16)

module java.base Defines the foundational APIs of the Java SE Platform. Providers: The JDK implementation of this module provides an implementation of the jrt file system provider to enumerate and read the class and resource files in a run-time image. The

docs.oracle.com

Object클래스

자 그러면 저희는 클래스의 상속을 배웠습니다.

API에서도 엄청나게 많은 클래스들이 상속받고 부모 자식 관계인 클래스들 이겠죠?

Object클래스는 API 중에서 가장 조상 격 되는 최상위 클래스입니다.

 

위와 같은 구조로 클래스의 최상위 클래스는 Object클래스인 것을 알 수 있죠!!

자 그러면 Object클래스의 자식 클래스들인 문자열 클래스에 대해 알아보죠

문자열 클래스

문자열 클래스는 문자열에 대한 다양한 처리를 위해 다양한 메서드가 정의돼 있는 클래스입니다.

어떤 프로그램이건 문자열은 데이터로서 많이 사용되기 때문에 문자열을 생성하는 방법과 추출, 비교, 찾기, 분리, 변환과 등을 제공하는 문자열 클래스를 잘 익혀둘 필요가 있는 것이지요!!

 

문자열 클래스의 종류

1) String 클래스

2) StringBuffer클래스

3) StringTokenizer 클래스

String클래스

String 클래스는 객체 생성 시, 보통 클래스와는 다르게,

기본 자료형 선언처럼 사용한다.

이게 무슨 말이냐면 저희가 보통 클래스 선언할 때 구조가

클래스 참조 변수 = new 생성자( );

와같은 구조를 많이 봐 왔을 텐데

String클래스는 int, flot, doulbe형과 정확히 같지는 않지만

String a=”java”; 과 같이 기본형 자료형처럼 선언할 수 있습니다.

String클래스의 메서드

메서드 의미
concat(문장) 문자열을 연결
substring(인덱스,잘라낼 길이) 문자열 자르기
length( ) 문자열의 길이 변환
toUpperCase( ) 문자열을 대문자로 변환
toLowerCase( ) 문자열을 소문자로 변환
charAt(인덱스) 인덱스에 해당하는 글자 반환
indexOf(문자열) 문자열의 위치 반환
equals(문자열) 문자열이 같은지 boolean값 반환
trim( ) 문자열 앞,뒤 공백 제거
replace(기존 문자열, 대체문자열) 기존 문자열을 대체 문자열로 변경
replaceAll(변환할 문자열, 변환된 문자열) 문자열 내의 특정 부분을 다른 문자열로 변성

String 클래스의 메서드 사용해보기

					String str="hello";

concat( )

문자열을 연결합니다.
			//concat()
            		//문자열 연결 하지만 변수의 값이 변경된 것은 X
			System.out.println(str.concat(" world!"));
            //출력 결과: hello world

substring( )

인덱스 번호로 문자열을 자를 때 사용합니다.
			//substring(시작 위치, 끝위치):시작위치~끝위치 전까지 가져옴
			System.out.println(str.substring(2,4));
			System.out.println(str.substring(3));//시작위치부터 끝까지
           		 //출력 결과:ll ,lo

length( )

문자열의 길이를 구할 때 사용합니다.
			//length():문자열의 길이
			System.out.println(str.length());
           		 //출력 결과:5

toUpperCase( ), toLowerCase( )

문자열을 대문자 혹은 소문자로 변환할 때 사용합니다.
			//toUpperCase, toLowerCase
			System.out.println(str.toUpperCase()); //소문자를 대문자로
			System.out.println("TEST".toLowerCase()); //대문자를 소문자로
            		//출력 결과: HELLO ,test

charAt( ), indexOf( ), equals( )

charAt( ) => 인덱스 값으로 문자열을 나타냅니다.
indexOf( ) => 원하는 문자열의 인덱스 값을 반환합니다.
equals( ) => 문자열을 비교합니다.
		System.out.println(str.charAt(0)); // 인덱스 값으로 문자열을 나타냄
            							//출력 결과:h
		System.out.println(str.indexOf("e")); //원하는 문자열의 인덱스 값을 가져옴
            							//출력 결과:1
		System.out.println(str.equals("hello"));//문자열 비교함수
            							//출력 결과:true
		System.out.println(str.equals("HELLO"));//대소문자 비교 가능
            							//출력 결과:false

trim( )

문자열의 앞, 뒤 공백을 제거할 때 사용합니다.
			//trim()=>앞뒤 공백 제거
			System.out.println("    test  ".trim()); 
            		//출력 결과:test

replace( )

문자열을 다른 문자열로 대체할 때 사용합니다. 단, 문자 형만으로만 대체할 수 있습니다.
			//replace =>문자열을 대체할 수 있다 단, 문자형으로 입력해야함
			System.out.println("hello world".replace('l', 'L'));
           		//출력 결과:heLLo worLd

replaceAll( )

문자열을 문자열로 대체할 수 있습니다. replace( )는 문자형이지만 replaceAll( )은 문자열로 대체할 수 있다는 차이점이 있습니다.
			//replaceAll() =>문자열을 대체한다 
			System.out.println("hello world".replaceAll("hello", "bye"));
            		//출력 결과:bye world

자 이제 String의 메서드들의 기능을 알아보았습니다. 그렇다면 다음으로 문자열 클래스의 종류 중 다른 하나인 StringBuffer클래스에 대해 알아봅시다.

StringBuffer클래스

String클래스는 immutable(변하지 않는) 객체이기 때문에, 자주 사용할수록 인스턴스를 많이 만들어 느려진다는 단점이 있습니다. 따라서 이러한 단점을 보완하기 위한 클래스가 StringBuilder, StringBuffer클래스입니다.

이 클래스들을 객체 안의 데이터를 내부적으로 변경할 수 있으므로, 새로운 객체를 만들지 않는 mutable(변할 수 있는) 객체를 만듭니다.

StringBuffer클래스의 메서드

메서드 의미
append( ) 매개변수로 입력된 값을 문자열로 바꾸어서 더해주는 메서드
reverse( ) 문자열의 순서를 반대로 나열하는 메서드
insert(int pos,Object obj) 두 번째 매개변수의 값을 문자열로 바꾸어서 pos위치에 추가하는 메서드
delete(int start, ine end) start 위치부터 end 직전 위치의 문자열을 제거하는 메섣,
deleteCharAt(int index) index위치에 있는 문자를 제거하는 메서드

StringBuffer 클래스의 메서드 사용해보기

public class StringBufferEx {

	public static void main(String[] args) {
		String str="test";
		StringBuffer buffer = new StringBuffer("test");
		
		str.replace('t', 'T');//String클래스는 값이 변하지 않는다.
		System.out.println(str);
		
		//replace( )
		buffer.replace(1, 3, "ES");
		System.out.println(buffer);//실제 값이 변경이 이루어진다.
	}

}

우선 StringBuffer클래스는 생성자를 사용해 객체를 생성해 주어야 합니다.

따라서 StringBuffer buffer = new StringBuffer("test"); "test"라는 문자열을 buffer에 바로 넣어보았습니다.

그리고 한번 String클래스와 StringBuffer클래스의 차이점을 알아볼 수 있도록 코드를 짜 봤습니다.

아래 출력 결과 보면서 이어하겠습니다.

출력 결과

위에 test출력은 String클래스의 변수 str의 출력문이고

tESt는 StringBuffer클래스의 변수입니다.

여기서 알 수 있는 점은 String클래스는 실제 변수의 값은 바뀌지 않고 StringBuffer클래스의 실제 변수 값은 실제 변경이 이루어진다는 것입니다.

StringTokenizer클래스

StringTokenizer클래스는 Java.util 패키지에 있는 클래스로, 문자열을 구분 문자열을 기준으로 분리할 때 사용합니다.

추가적으로 StringTokenizer클래스는 임포트를 해주어야 합니다. => import java.util.StringTokenizer;

 

StringTokenizer클래스의 간단한 예시

ex) 이름: 전화번호” 문자열에서 ‘:’ 문자를 기준으로 이름과 전화번호를 나누고 싶을 때

이것뿐만 아니라 전화번호 010-0000-0000에서 -를 구분점으로 문자열을 구분할 때도 사용할 수 있겠죠

 

<사용방법>

  1. 문자열 생성
  2. 구분할 문자열 생성
  3. StringTokenizer객체 생성
    1. StringTokenizer st = new StringTokenizer(문자열, 구분 문자열 );
    <사용할 주요 메서드>
    • nextToken( ):다음 토큰으로 이동
    • hasMoreTokens( ): 다음 토큰이 존재하면 true, 존재하지 않으면 false
    • countTokens( ):남은 토큰의 개수

StringTokenizer클래스 사용 예시 코드

import java.util.StringTokenizer; //import해주어야합니다.

public class StringTokenizerEx {

	public static void main(String[] args) {
		//문자열 생성
		String str="kim:010-1234-1234";
		String delim=":";
		StringTokenizer st = new StringTokenizer(str,delim); //str문자열을 delim을 기준으로 분리한다.
		System.out.println(st.countTokens()); //토큰의 갯수를 가져옴
		System.out.println(st.nextToken()); //다음 토큰
		System.out.println(st.hasMoreTokens()); //가져올 토큰이 있니? 있다면 true 없다면 false
		
		System.out.println(st.countTokens());
		System.out.println(st.nextToken());//다음 토큰
		System.out.println(st.countTokens());
	}

}

 

출력 결과


자 오늘은 문자열 클래스에 대해 알아보았는데요 조금 메서드들이 많아서 정신없을 거예요 굳이

이걸 다 외우지 않아도 이 글을 읽으면서 아 이런 기능이 있구나 정도만 아시면 됩니다.

나중에 모르면 또 찾아보면 되죠!!

아무튼 이상으로 글 마치겠습니다.

글 읽어주셔서 감사합니다~

Comments