String 배열

양성빈·2022년 6월 8일

참고
자바의 정석

String 배열

String 배열의 선언과 생성

  • 배열의 타입 String인 경우에도 앞서 살펴본 int배열의 선언과 다르지 않다.
String[] name = new String[3]; // 3개의 문자열을 담을 수 있는 배열을 생성
  • String타입의 배열은 참조형 변수에 해당하므로 기본 값인 null로 초기화 된다.

null이란? 어떠한 객체도 가르키고 있지 않다는 상태

String배열의 초기화

  • 초기화 역시 int배열과 동일한 방법이다.
String[] name = new String[3];
name[0] = "Kim";
name[1] = "Park";
name[2] = "Yi";
  • 또는 아래와 같이 간략히 표현이 가능하다. (일반적인 방법)
String[] name = new String[]{"Kim", "Park", "Yi"};
String[] name = {"Kim", "Park", "Yi"};
  • int 배열과 유일한 다른점은 String 클래스만 큰따옴표만으로 간략히 표현이 가능하다.
    하지만, 원래는 String 클래스이므로, new 연산자를 통해 객체를 생성해야한다.
String[] name = new String[3];
name[0] = "Kim";
name[1] = "Park";
name[2] = "Yi";
  • 또 하나 다른점은 배열에 실제 문자열이 저장되는 것이 아니고 객체의 주소가 저장이 된다.
    이처럼 기본형 타입의 배열이 아닌 참조형 타입의 배열의 경우 객체의 주소가 저장이 된다.

char배열과 String 클래스

  • 이제까지 여러문자 (=문자열)을 저장할 때 String 타입의 참조 변수를 사용하였다. 사실 문자열이란 문자의 배열이므로 char[]과 같은 의미이다.
  • 그런데? 왜? char[]를 사용하지 않고 String 클래스를 사용하는 이유는 무엇일까? 그 이유는 char[]보다 String 클래스가 더 많은 기능이 있으며 문자열을 다루기 더 편리하기 때문이다.

String 클래스는 char배열에 기능(메서드)를 추가한 것이다.

💡 참고
C언어에서는 문자열을 char 배열로 다루지만, 자바에서는 char배열과 그에 관련된 기능들을 묶어둔 String 클래스에 정의 한다. 객체지향이라는 개념이 있기 전에는 기능과 데이터를 분리하였지만, 객체지향 등장 후, 데이터와 관련된 기능을 하나의 클래스로 묶어서 사용한다. 즉, 서로 관련된 것들끼리 데이터와 기능을 구분하지 않고 함께 묶어서 사용한다.

  • char배열과 String 클래스의 한 가지 중요한 차이가 있는데 String 객체는 읽을 수만 있을 뿐 내용을 변경할 수 없다.
String str = "Java";
str += "17";
System.out.println(str); // 기존 문자열을 변경한 것 같지만 새로운 문자열이 생긴것을 출력한것이다.

변경 가능한 문자열을 다룰려면 StringBuffer클래스를 사용하면 된다.

String 클래스의 주요 메서드

메서드설명
char charAt(int index)문자열에 해당 위치(index)에 있는 문자를 반환한다.
int length()문자열의 길이를 반환한다.
String substring(int from, int to)문자열에 해당범위(from ~ to)에 있는 문자열을 반환한다.
(to는 범위에 포함되지 않는다.)
boolean equals(Object obj)문자열의 내용이 obj와 같은지 확인한다. 같으면 true, 다르면 false
char[] toCharArray()문자열을 문자배열로 변환하여 반환한다.

equals 메서드는 비교할 때 대소문자를 구분하여 비교한다. 만약, 대소문자 구분없이 비교할려면 equalsIgnoreCase()를 사용해야한다.

char배열과 String 클래스의 변환

  • 가끔 char 배열을 String 클래스로 변환하거나 그 역으로 변환해야 하는 경우에는 아래와 같이 작성하면 된다.
char[] chArr = {'A', 'B', 'C'};
String str = new String(chArr); // char배열 -> String
char[] tmp = str.toCharArray(); // String -> char배열

커맨드 라인을 통해 입력받기

  • 우리는 앞전에 Scanner라는 클래스를 통해 사용자로부터 입력을 받아왔다. 하지만, 이 방법 말고 다른 방법이 있는데 바로 터미널 혹은 명령프롬프트를 이용하는 방법이다. 예를들어 App이라는 클래스에 여러개의 문자열을 담아서 전달할려고 하면 다음과 같이 실행하면 된다.
java App.java abc 123
  • 위처럼 실행하면 abc 123이라는 문자열이 args[0], args[1]에 담겨서 사용할 수 있다.
  • 주의해야할 점은 커맨드라인에 문자열 구분을 공백으로 하기 때문에, 공백문자가 담겨있는 문자열은 ""로 감싸줘야 한다.
  • 커맨드라인에 매개변수를 입력하지 않으면 크기가 0인 배열이 생성된다. 만약 매개변수가 없다고 배열을 생성하지 않으면 args는 null이 될것이고 에러가 나올 것이다. 하지만, JVM이 이런 경우를 예방해주어서 우리는 매개변수 없이 이제까지 실행을 할 수 있던 것이다.
profile
모든 것을 즐길줄 아는 개발자입니다!

0개의 댓글