오늘은 이전부터 편하게 사용해왔던 String에 대해 소개하려 한다.
나는 이전 몇몇 글에서도 자바에서 문자열은 객체라고 소개한 적이 있다.
코드를 예로 들면 내가 new String("Hello");와 같은 식으로 사용한 적도 있었다.
분명히 new라는 키워드는 객체를 생성할 때 사용하는 키워드이다.
그런데 한 번 더 생각해보자. 객체는 무엇이 있어야 생성되는가?
바로 클래스이다. 결국 String은 클래스였다는 소리다.
클래스는 C언어의 구조체와 비슷하지만, 이와 달리 변수(필드)와 함수(메소드)를 가질 수 있다고 설명했다.
그렇게 String이라는 클래스를 만든 Oracle이라는 회사에서 같이 제공해준 함수(메소드)가 있다.
오늘은 String class의 자주 쓰이는 함수(메소드)를 알아보겠다.
***지금부터 사용할 코드 블럭에는 Main class와 main method가 빠져 있을 것이다.
그리고 아래에 사용되는 코드 블럭들은 서로 같은 class와 method안에 있다고 생각하고 보도록 하자.
String str = new String("Hello");
//문자열은 매우 중요하고 자주 사용되는 값이기 때문에 축약표현이 제공됨.
//한 번 만들어진 String 객체의 문자열은 절대 변경 불가
축약표현은 내가 이전 다른 글에서도 몇 번 사용했지만 약간 뒤에 소개해보도록 하고
한 번 만들어진 String객체의 문자열은 변경 불가하다는 점을 생각해두도록 하자.
//1. 문자열 데이터의 길이(글자 수)를 리턴해주는 메소드
int len = str.length();
System.out.println("글자 수 : " + len);
String클래스의 length()라는 함수(메소드)이다.
함수 이름 그대로 내가 적은 문자열이 몇 글자인지 알려준다.
나는 위에서 str을 "Hello"했기 때문에 여기서 len이라는 변수의 값은 5가 될 것이다.
//2. 문자열 값의 비교
System.out.println(str == "Hello"); //주소비교
System.out.println(str.equals("Hello"));
String s = "Hello";
System.out.println(str.equals(s));
equals()라는 함수(메소드)가 필요한 이유에 대해 보여줄 코드이다.
"Hello"라는 문자열과 "Hello"라는 문자열이 서로 같다면 '같다!'라고 컴퓨터가 내게 알려줬으면 하는 상황이다.
하지만, 첫 문장처럼 ==연산자를 통해 비교를 한다면 어떻게 될까?
분명히 같다고 할 사람도 있을 것이다. 그건 아직 컴퓨터적인 관점으로 생각하지 않아서이다.
간단히 그림으로 그리자면 이와 같이 그려볼 수 있을 것이다.
str이라는 변수를 통해 "Hello"를 만들었고 이와 우리가 임의로 메모리 다른 어딘가에 만든 "Hello"와 비교한 것이다.
이 두 객체의 주소를 임의로 각각 100번지 200번지라고 했을 때 이 두 객체의 주소는 같지 않기 때문에 첫 문장은 false가 출력될 것이다.
하지만, 다음 문장에서 equals()라는 메소드(함수)는 그 객체가 가지고 있는 값을 비교하기 때문에
이 두 객체는 같은 "Hello"라는 값을 가지고 있어 true가 출력된다.
이와 같이 s라는 변수를 통해 "Hello"라는 값을 가진 객체를 만들고
str과 equals()메소드를 통해 비교한다면 true라는 결과 값을 얻을 수 있다.
//2-1. 대소문자 비교
System.out.println(str.equals("hello"));
System.out.println(str.equalsIgnoreCase(s));
이번에는 대소문자를 무시하는 메소드인 equalsIgnoreCase()를 소개한다.
짧은 예를 들면 많이 겪어봤을 법한 내용이다.
어떤 프로그램을 종료하려고 한다. 이 때 종료하려면 Y, 돌아가려면 N을 입력하라고 하는 상황이다.
그럼 이 때 사용자는 Y를 누르거나 y를 누르면 종료가 된다.
우리가 이런 상황에서 사용자라면 Caps lock을 누르고 나서 y를 누르진 않는다. 그저 소문자 y를 입력할 뿐이다.
그런데 위 코드처럼 equals()를 통해 두 문자열을 비교했다면 아마 프로그램이 종료되지 않을 것이다. Y와 y는 다르니까.
하지만, 사람이 보기에는 그냥 같은 Y이다. 그래서 이 때 대소문자 구분을 하고 싶지 않다면 equalsIgnoreCase()메소드를 사용하면 된다.
그럼 위 코드의 결과를 예측할 수 있을 것이다. equals()나 equalsIgnoreCase()나 결과로 boolean값을 리턴해준다.
값이 true, false로 나온다는 얘기다.
순서대로 false, true가 결과로 출력될 것이다.
이후 몇 글에 걸쳐 String 클래스에서 자주 사용되는 메소드들 몇 가지를 소개해보겠다.
'Language > Java' 카테고리의 다른 글
Java에서의 String 소개 - 3 (0) | 2022.02.15 |
---|---|
Java에서의 String 소개 - 2 (0) | 2022.02.11 |
Java의 print와 scan (0) | 2022.02.03 |
짧은 객체지향 프로그래밍 소개 (0) | 2022.02.01 |
Java 참조 자료형과 출력 예제 (0) | 2022.01.29 |