여행을 개발하다

String Class의 객체로 생성된 String 자료형의 비교 본문

BackEnd/Java

String Class의 객체로 생성된 String 자료형의 비교

yhtragramming 2019. 5. 13. 12:51

안녕하세요!

 

오늘은 String class의 객체로 생성된 String 자료형을 비교하는 알고리즘에 대해 포스팅하겠습니다.


먼저 String이라는 class로 str1과 str2를 선언하고, 동일하게 "AAA"라는 값을 넣어줍니다.

그리고 str1과 str2가 같으면, "같다"라고 출력하고, 다르면 "다르다"라고 출력시켜보겠습니다.

 

결과 값은 당연히 '같다'가 나옵니다.

"AAA"와 "AAA"는 누가 봐도 같기 때문입니다.

 

하지만 컴퓨터는 사람과 조금 다르게 인식합니다.

 

왜냐하면 class로 선언된 변수들의 값은, 변수의 값이 생성되어 있는 주소로 비교를 하기 때문입니다.

 

결국 위의 예제에서 str1과 str2의 "AAA"는 동일한 메모리에 저장된 것이고,

컴퓨터는 메모리의 주소가 같다는 이유로 "같다"를 출력한 것 뿐입니다.

 

여기서 잠시 C++로 넘어가겠습니다.

 

C계열의 언어에는 포인터(Pointer)라는 것이 있습니다.

포인터는 변수의 값을 기억하는 것이 아니라, 변수의 값이 저장된 메모리의 주소를 기억합니다.

 

Java는 여러가지 이유로 C계열의 언어로부터 포인터를 물려받지 않았지만,

그 기본 원리까지 무시하면서(?)까지 물려받지는 않았던 것 같습니다.

 

그래서 이번에는 String class의 신규 객체로 str3을 선언하고,

str3에 str1, str2와 동일한 값인 "AAA"를 넣어주겠습니다.

 

그리고 str1과 str3를 비교해보도록 하겠습니다.

그런데 실행 결과 값은...

"다르다"가 출력 됩니다.

 

여기서 몇 가지 중요한 원리를 짚어볼 수 있습니다.

 

① Class 들어가는 주소는 참조 변수(C에서의 & 연산자)이다.

"="를 사용해 비교를 할 수 있는 데이터는 기본 자료형 데이터와 null뿐이다.

Class를 이용해서 생성한 객체는 "=="를 사용해 비교하면 객체가 생성된 주소를 비교하고, 실제 저장된 값은 비교 할 수 없다.

 

그럼 Java에서 Class로 생성된 객체들의 값은 아예 비교할 수 없는건가요?ㅠㅠ

왜 없을까요 ㅎㅎ

 

간단하게 "==" 연산자 대신에, 'equals'라는 메소드를 사용하면 됩니다.

equals 메소드의 사용법은 '객체명.equals(비교 대상 객체명)'입니다.

 

equals 메소드를 사용한 결과, '같다'라고 출력되는 것을 확인할 수 있습니다.

 

 


지금까지 String Class의 객체로 생성된 String 자료형의 비교에 대해 포스팅하였습니다.

 

감사합니다 : )

Comments