자바에서는 문자를 저장하기 위해 char 타입을 사용한다. 하지만 char 타입은 1개의 문자만을 저장할 수 있어서, 우리가 흔히 생각하는 단어나 문장을 저장하기 위해서는 String 타입을 써야 한다. String 타입이 뭔지, 어떻게 활용해야 하는지 알아보자.
1. String 타입 기초
2. String에 쓸 수 있는 유용한 매소드들
3. 익스케이프 시퀜스 (Escape Sequence)
1. String 타입 기초
우선, String은 우리가 여태까지 봤던 데이터 타입과는 달리, 변수에 그 데이터가 아니라 포인터라고 불리는 것을 저장한다. 포인터는 쉽게 말해 메모리 주소이다. 모든 데이터는 메모리에 저장되는데, 일반적인 데이터 타입은 변수에 데이터를 바로 저장하는 반면, String은 String이 시작되는 메모리 주소를 저장한다. 이는, String은 몇 개인지 모르는 char로 이루어져 있기 때문이다.
char var1 = 'J';
String var2 = "Java";
위에서 var1은 char로 선언됐기 때문에 바로 데이터를 저장하는 반면, var2는 0x00000001라는 값을 저장했다. 이는 var2에 저장된 "Java"가 시작되는 첫 글자인 "J"의 메모리주소이다. 그렇다면 String이 끝나는건 어떻게 알까? 모든 String은 끝나는걸 표시하기 위해 \0라는 데이터를 맨 끝에 저장해 놓는다. 즉, String은 첫 글짜의 포인터를 따라가서 시작하고, \0를 만나면 끝난걸 안다.
이러한 이론적인 내용을 도대체 왜 알아야 하는지 그 정답은 String을 비교하는데 있다. 기존의 데이터 타입은 비교할때 단순히 비교 연산자를 쓰면 됐다. 하지만 String을 비교할때 이렇게 하면 어떻게 될까?
String word1 = new String("Hello");
String word2 = new String("Hello");
if(word1 == word2) {
System.out.println(true);
} else {
System.out.println(false);
}
여기서, 우리가 의도한 대로라면 두 변수는 같은 값을 가지고 있기에 word1 == word2 는 true여야 한다. 하지만 앞서 말했듯이, String타입은 값이 아니라 포인터를 저장하기 때문에, 두 변수의 값이 같아도 각각 다른 포인터를 가지고 있기 때문에 word1 == word2는 false가 된다.
그렇기 때문에 만약 String안에 있는 내용을 비교하고 싶다면 String에 있는 매소드를 사용해야 한다.
String word1 = new String("Hello");
String word2 = new String("Hello");
if(word.equals(word2)) {
System.out.println(true);
} else {
System.out.println(false);
}
위의 프로그램의 결과는 true이다. String에는 equals라는 매소드가 있고, 이 매소드는 다른 String값을 받아서 그 안에 있는 내용물을 비교해 준다. String에 쓸 수 있는 더 많은 매소드에 대해서 자세히 알아보자.
2. String에 쓸 수 있는 유용한 매소드들
String에는 유용한 매소드가 여러개 있다.
charAt(int) -> char
이 매소드는 int로 된 index를 받고 char를 돌려주는 매소드이다.
String var = "Hello";
var.charAt(3); // l을 return한다
equals(String) -> boolean
두 String 안에 있는 내용이 같은지를 비교하고, 같으면 true, 다르면 false를 돌려주는 매소드이다.
String var1 = "Hello";
String var2 = "Hello";
var1.equals(var2); // true
equalsIgonoreCase(String) -> boolean
두 String 안에 있는 내용이 같은지를 비교하는데, 대소문자를 무시하고 비교한다.
String var1 = "HELLO";
String var2 = "hello";
var1.equals(var2); true
substring(int, int) -> String
String의 일부를 돌려주는 매소드이다. 처음 숫자의 문자 자리는 포함하고, 두 번째 숫자 자리의 문자는 포함하지 않는다.
String var = "Hello. How are you?";
var.substring(8, 15); //How are
toLowerCase(String) -> String
String을 모두 소문자로 바꿔주는 매소드이다.
String var = "HELLO";
var.toLowerCase(); // hello
toUpperCase(String) -> String
String을 모두 대문자로 바꿔주는 매소드이다.
String var = "hello";
var.toUpperCase(); // HELLO
3. 익스케이프 시퀜스 (Escape Sequence)
따움표 같은, 자바 문법에 포함된 문자를 저장하거나 출력하고 싶으면 어떻게 해야 할까?
String var = ""안녕" 그가 말했다.";
위와 같이 한다면 문법 오류가 날 것이다. 따움표는 String을 나타내는 자바 문법이기 때문에, String안에서 따움표를 쓰는 순간 자바는 String이 끝난걸로 처리한다.
이럴 경우에는 자바 문법에서 탈출(Escape)해서 문자를 표시한다는 것을 알려줘야 한다. 이때 역슬래쉬(\)를 쓴다.
\n 는 다음 문장을 표시하는 익스케이프 시퀜스이다.
System.out.println("안녕\n하세요.");
위의 코드의 결과는
안녕
하세요.
가 된다.
\t 는 탭을 누른 것이다. 일반적으로 스페이스 바 4개와 동일하다.
\" 는 따움표이다.
'👨💻 프로그래밍 > Java, Kotlin, Spring' 카테고리의 다른 글
자바 14 - while 루프 (0) | 2021.04.28 |
---|---|
자바 13 - for 루프 (2) | 2021.04.26 |
자바 11 - 유저로부터 데이터 받아오기 (Scanner 클래스 사용) (0) | 2021.04.22 |
자바 10 - Math 클래스에 있는 매소드 활용 (0) | 2021.04.20 |
자바 9 - switch문 (2) | 2021.04.18 |