Java 기초

[Java 기초] 2-4 자료형(문자열 - String)

kimbh 2024. 11. 17. 18:09

안녕하세요.

이번에 문자열 자료형인 String에 대해서 포스트 해보도록 하겠습니다.

 

String(문자열)이란?

String은 문자열과 ""(쌍따음표)로 이루어진 데이터 타입이고, 앞에서 설명드렸던 Int, Double, Boolean, Char등 기본 데이터 타입들과는 다른 클래스 데이터 타입입니다.

String 클래스는 자료형과는 다르게 불변 객체이기 때문에 이와 관련된 내용은 나중에 알아보도록 하겠습니다.

 

그렇다면, Char(문자형)와 String(문자열)은 어떨 때 사용하는지 그리고 차이점은 무엇인지에 대해서 알아보도록 하겠습니다.

 

Char는 앞에서 소개해드렸다 싶이 문자형으로 이루어진 자료형이므로 단 하나의 문자만 저장이 가능합니다.

그래서 ASCII코드의 값을 이용해서 출력을 하거나 [](배열)을 통해서 하나의 문자들을 배열 값에 저장해 하나의 문자열 처럼 출력을 하게하는 방법이 있지만 Char형으로 굳이 배열을 이용해서 문자열을 나타내는게 힘들기 때문에 String을 이용해 문자열을 저장하고, 출력하는것이 가능합니다.

 

public class Main {
    public static void main(String[] args) {
        char a = 'A'; // A의 값이 저장됨.
        char b = "AB"; // 문자열이기 때문에 저장 x
    }
}

 

해당 코드와 사진 처럼 ''(작은 따음표)를 이용해서 하나의 문자 값만 저장하는 것이 Char형입니다.

 

 

String은 ""(큰따음표)를 이용해 문자열을 출력하는 것이기 때문에 하나의 문자나 문자열을 출력하는 것이 가능합니다.

 

(예제1)

public class Main {
    public static void main(String[] args) {
        String a = "ABC"; // ABC값 저장
        String b = "A"; // A값 저장

        System.out.println(a);
        System.out.println(b);
    }
}

해당 사진처럼 ABC값과 A값이 정상적으로 출력이 되는 것을 알 수 있습니다.

 

(예제 2)

public class Main {
    public static void main(String[] args) {
        String abc = new String();
        abc = "ABC";

        System.out.println(abc);
    }
}

 

new는 객체를 생성할 때 사용하는 키워드입니다.

간단히 생각해서 객체를 만들었다 생각하면 제일 좋지만, 저희 기준에서는 변수를 하나 만들었다고 생각하시면 될것 같습니다.

 

이렇게만 보면 String 타입을 보면 간단해 보이지만,

 

String 타입은 불변 객체이고 String 타입만 쓸 수 있는 다양한 메서드들이 존재합니다.

StringBufer, StringBuild 등 다른 사용할 수 있는 메서드들이 존재하는데 기초에서는 사용하면 어렵기 때문에 나중에 알려드리도록 하겠습니다.

 

우선 String형에서 주로 사용하는 메서드들을 예시로 2가지 보여드리고 String형의 포스트를 마치도록 하겠습니다.

 

(1) charAt

charAt은 간단하게 생각해서 선언한 String형 변수에 문자를 하나 뽑아온다고 생각하면 됩니다.

간단하게 예시를 통해서 알려드리도록 하겠습니다.

 

(예제 1)

public class Main {
    public static void main(String[] args) {
        String a = "abc"; //a[0] = a, a[1] = b, a[2] = c
        System.out.println(a.charAt(0)); // a값 출력
        System.out.println(a.charAt(1)); // b값 출력
        System.out.println(a.charAt(2)); // c값 출력

    }
}

코드와 출력을 보면 charAt()은 String형 변수를 참조변수인 " . "을 붙여서 charAt() 메서드를 사용하는 것을 알 수 있습니다.

그런데, charAt() 괄호안에 숫자가 들어가는데 저 숫자들은 참조변수로 사용하고 있는 String형 문자열의 인덱스 값을 이용해 문자를 뽑아오겠다. 라는 의미입니다.

 

그렇다면 그 뽑아온 값들을 다른 변수에 저장하는 것이 가능할까? 라는 생각이 떠오르실 겁니다.

 

charAt()은 하나의 문자 값을 뽑아오는 것도 맞지만 그 값을 변수명으로 저장할 때는 char형의 변수에 저장해야 합니다.

 

예제를 통해서 보여드리도록 하겠습니다.

 

(예제 2)

public class Main {
    public static void main(String[] args) {
        String a = "안녕하세요";//[0]~[4]의 인덱스 값을 가진 문자열로 저장됨.

        char b = a.charAt(0); // "안" 값이 저장됨.

        System.out.println(b);

    }
}

 

 

해당 사진처럼 char형으로 변수를 선언한 b에 a[0] 인덱스 값을 불러온다.

 

(2) toString()

기본적으로 값을 가지고 있는 변수들을 문자열로 반환시켜주는 메서드입니다.

예제를 통해서 간단하게 보여드리도록 하겠습니다.

 

(예제 1)


public class Main {
    public static void main(String[] args) {
        int a = 1;
        double b = 2.2f;

        System.out.println(Integer.toString(a) + " " +Double.toString(b));
        //a와 b의 데이터 타입은 원시 타입으로 랩퍼 클래스를 이용해서 toString()메서드를 사용해야함.


    }
}

 

 

1과 2.2.............으로 되어있는 문자열로 출력이 되는것을 알 수 있습니다.

 

 

그렇다면 charAt()과 toString()을 이용해서 "안녕하세요"라는 문자열 타입을 charAt()으로 다른 변수에 저장하고 그 값을 모아서 toString으로 출력해보는 방법이 있지 않을까 생각해 볼 수 있습니다.

 

(예제 1)



public class Main {
    public static void main(String[] args) {
        String a = "안녕하세요";

        String b = new String(); //b라는 String형 객체를 선언해 b 변수를 선언.
        for(int i = 0; i<a.length(); i++ ){

            b += a.charAt(i); // 안 / 안녕/ 안녕하/ 안녕하세/ 안녕하세요
            //식으로 값이 저장됨.
        }
        System.out.println(a); // a의 안녕하세요가 출력
        
        System.out.println(b.toString()); //b의 안녕하세요가 출력

    }
}

 

charAt()로 문자를 뽑아오게되면 char형으로 바뀌어서 값이 출력이 되지않는데. 이 값을 toString()을 통해서 문자열로 변환시키면 출력에 문제가 없다는 것을 알 수 있습니다.

 

이것으로 String타입에 대해서 알아봤는데요 지금 소개해드린것 외에도 다양한 메서드들이 존재하고 또 코딩테스트를 통해서 많이 사용하는게 String타입 메서드들이여서 나중에 이와 관련된 메서드들을 소개하도록 하겠습니다.