문자열, String. 개발하면서 정말 수도 없이 마주치는 녀석이죠. 텍스트 데이터를 담는 기본적인 자료형이지만, 그 안을 들여다보면 생각보다 훨씬 다채로운 기능과 활용법이 숨어있어요.
간단한 텍스트 편집부터 복잡한 데이터 처리까지, String 은 프로그래밍의 알파이자 오메가라고 해도 과언이 아니죠. 마치 우리가 매일 사용하는 언어처럼, String 도 그 뉘앙스와 문맥을 제대로 이해해야 원하는 결과를 얻을 수 있습니다. 자, 그럼 String 을 좀 더 깊숙이 파헤쳐 볼까요?
확실하게 알려드릴게요!
문자열, 그 녀석의 속사정: 껍데기부터 핵심까지 파헤쳐보기
텍스트를 담는 그릇, 문자열. 우리는 코딩하면서 이 녀석을 얼마나 제대로 활용하고 있을까요? 단순한 데이터 보관함을 넘어, 문자열은 다양한 변신 능력을 숨기고 있습니다.
문자열 조작은 마치 레고 블록처럼 텍스트를 분해하고 조립하며 새로운 의미를 만들어내는 창조적인 과정과 같아요. 문자열 메서드를 자유자재로 사용하는 것은 코딩 실력을 한 단계 업그레이드하는 지름길이죠. 문자열, 알면 알수록 쓸모 많은 녀석입니다.
문자열, 넌 도대체 정체가 뭐냐?
문자열은 단순히 문자의 나열일까요? C언어에서는 문자 배열로 표현되기도 하고, Java 에서는 String 이라는 불변(immutable) 클래스로 존재하죠. Python 에서는 더 유연하게 문자열을 다룰 수 있고요.
이렇게 다양한 모습으로 나타나는 문자열은, 결국 텍스트 데이터를 효율적으로 관리하고 조작하기 위한 도구입니다. 각 프로그래밍 언어마다 문자열을 다루는 방식은 조금씩 다르지만, 문자열이 가진 기본적인 속성은 변하지 않아요. 텍스트를 담고, 비교하고, 자르고, 붙이고, 변환하는 능력.
이것이 바로 문자열의 핵심이죠.
문자열, 왜 그렇게 중요할까?
웹 개발을 예로 들어볼까요? 사용자가 입력한 텍스트 데이터는 문자열 형태로 서버에 전달되고, 데이터베이스에 저장됩니다. 서버는 저장된 문자열 데이터를 가공하여 웹 페이지에 다시 표시하죠.
이 과정에서 문자열 조작은 필수적입니다. HTML 태그를 추가하거나, 특수 문자를 처리하거나, 사용자의 검색어에 맞는 결과를 찾아내는 모든 과정이 문자열 조작을 통해 이루어집니다. 문자열을 제대로 다루지 못하면 웹 애플리케이션은 제대로 작동할 수 없겠죠.
문자열, 어떻게 하면 잘 다룰 수 있을까?
문자열을 잘 다루기 위해서는 먼저 문자열이 제공하는 다양한 메서드에 익숙해져야 합니다. , , , 등과 같은 메서드는 문자열을 원하는 형태로 가공하는 데 필수적인 도구입니다. 또한, 정규 표현식을 활용하면 복잡한 패턴의 문자열도 쉽게 검색하고 추출할 수 있습니다.
하지만 무엇보다 중요한 것은 문자열을 ‘이해’하는 것입니다. 문자열의 속성을 파악하고, 문자열이 어떻게 메모리에 저장되는지, 어떤 연산이 효율적인지 등을 고민해야 합니다. 마치 외국어를 배우듯이, 문자열도 꾸준히 사용하고 연습해야 능숙하게 다룰 수 있습니다.
문자열 메서드, 내 손안의 요술봉
프로그래밍 언어마다 제공하는 문자열 메서드는 마치 요술봉과 같습니다. 텍스트를 자르고, 붙이고, 바꾸는 마법을 부릴 수 있죠. 하지만 요술봉을 제대로 사용하려면 주문을 외우는 방법을 알아야겠죠?
문자열 메서드의 종류와 사용법을 익히고, 실제 코딩에서 활용하는 연습을 통해 문자열 마법사가 되어봅시다.
자르고 붙이고: 문자열 분해/결합 스킬
문자열을 자르고 붙이는 것은 텍스트 데이터를 가공하는 가장 기본적인 작업입니다. 메서드를 사용하면 문자열의 일부분을 추출할 수 있고, 메서드를 사용하면 특정 구분자를 기준으로 문자열을 나눌 수 있습니다. 반대로 메서드나 연산자를 사용하면 여러 개의 문자열을 하나로 합칠 수 있죠.
예를 들어, “Hello, World!”라는 문자열에서 “Hello”만 추출하고 싶다면 를 사용하면 됩니다. “apple,banana,orange”라는 문자열을 쉼표(,)를 기준으로 나누고 싶다면 를 사용하면 되겠죠.
찾고 바꾸고: 문자열 탐색/변환 마법
문자열에서 특정 문자열을 찾거나 바꾸는 작업은 텍스트 에디터의 “찾아 바꾸기” 기능과 유사합니다. 메서드를 사용하면 문자열 내에서 특정 문자열의 위치를 찾을 수 있고, 메서드를 사용하면 특정 문자열을 다른 문자열로 바꿀 수 있습니다. 예를 들어, “The quick brown fox jumps over the lazy dog”라는 문장에서 “fox”라는 단어의 위치를 찾고 싶다면 를 사용하면 됩니다.
“lazy”를 “sleepy”로 바꾸고 싶다면 를 사용하면 되겠죠.
대소문자 변환, 공백 제거: 문자열 정제 기술
문자열을 정제하는 작업은 텍스트 데이터의 품질을 높이는 데 필수적입니다. 메서드를 사용하면 문자열을 모두 대문자로 바꿀 수 있고, 메서드를 사용하면 모두 소문자로 바꿀 수 있습니다. 메서드를 사용하면 문자열의 앞뒤 공백을 제거할 수 있죠.
예를 들어, ” Hello World “라는 문자열에서 앞뒤 공백을 제거하고 싶다면 을 사용하면 됩니다. “hello”를 “HELLO”로 바꾸고 싶다면 를 사용하면 되겠죠.
정규 표현식, 문자열 탐색의 끝판왕
정규 표현식은 문자열에서 특정 패턴을 검색하고 추출하는 데 사용하는 강력한 도구입니다. 마치 텍스트를 해독하는 암호와 같죠. 복잡한 패턴을 정의하고, 문자열에서 원하는 정보를 정확하게 찾아낼 수 있습니다.
정규 표현식을 자유자재로 사용하는 것은 마치 텍스트 데이터 분석 전문가가 되는 것과 같습니다. 하지만 정규 표현식은 문법이 다소 복잡하고 난해하기 때문에 처음 접하는 사람들에게는 장벽처럼 느껴질 수 있습니다. 하지만 꾸준히 연습하고 활용하면 문자열 탐색 능력을 획기적으로 향상시킬 수 있습니다.
정규 표현식, 왜 배워야 할까?
정규 표현식은 단순한 문자열 검색을 넘어, 데이터 유효성 검사, 텍스트 파싱, 로그 분석 등 다양한 분야에서 활용됩니다. 예를 들어, 이메일 주소나 전화번호와 같은 특정 형식을 갖는 문자열을 검사하거나, HTML 문서에서 특정 태그나 속성 값을 추출하는 데 정규 표현식을 사용할 수 있습니다.
또한, 로그 파일에서 특정 패턴의 에러 메시지를 찾아내거나, 웹 페이지에서 필요한 정보만 추출하는 데도 유용하게 활용됩니다. 정규 표현식을 배우는 것은 단순히 문자열을 다루는 기술을 넘어, 데이터 분석 능력을 향상시키는 지름길입니다.
정규 표현식, 어떻게 시작해야 할까?
정규 표현식을 처음 시작할 때는 기본적인 문법부터 차근차근 익히는 것이 중요합니다. 은 임의의 문자, 은 0 번 이상 반복, 은 1 번 이상 반복, 은 0 번 또는 1 번 나타나는 문자, 은 문자 집합, 은 그룹 등을 의미합니다. 이러한 기본적인 문법을 이해하고, 다양한 예제를 통해 연습하면 정규 표현식에 대한 감을 잡을 수 있습니다.
또한, 정규 표현식을 테스트할 수 있는 온라인 도구나 IDE 플러그인을 활용하면 더욱 효과적으로 학습할 수 있습니다.
정규 표현식, 실전 활용 팁
정규 표현식을 실전에서 활용할 때는 다음과 같은 팁을 참고하면 좋습니다. * 욕심내지 마세요: 처음부터 복잡한 정규 표현식을 만들려고 하지 말고, 간단한 패턴부터 시작하세요. * 테스트를 생활화하세요: 정규 표현식을 작성한 후에는 반드시 다양한 테스트 케이스를 통해 제대로 작동하는지 확인하세요.
* 주석을 활용하세요: 복잡한 정규 표현식에는 주석을 달아 가독성을 높이세요. * 온라인 도구를 활용하세요: 정규 표현식을 테스트하고 디버깅하는 데 유용한 온라인 도구를 적극적으로 활용하세요.
문자열 인코딩, 깨진 글자와의 전쟁
문자열 인코딩은 문자를 컴퓨터가 이해할 수 있는 숫자로 변환하는 방식입니다. 마치 외국어를 번역하는 것과 같죠. 하지만 번역기가 잘못되면 엉뚱한 결과가 나오듯이, 문자열 인코딩 방식이 다르면 깨진 글자가 나타날 수 있습니다.
특히 다국어 환경에서는 문자열 인코딩 문제가 더욱 빈번하게 발생합니다. 문자열 인코딩에 대한 이해는 깨진 글자와의 전쟁에서 승리하는 데 필수적입니다.
인코딩, 왜 그렇게 중요할까?
컴퓨터는 0 과 1 로 이루어진 이진 데이터만 이해할 수 있습니다. 따라서 문자를 컴퓨터에 저장하거나 전송하려면 숫자로 변환해야 합니다. 이때 사용되는 것이 문자열 인코딩 방식입니다.
대표적인 문자열 인코딩 방식으로는 ASCII, UTF-8, UTF-16 등이 있습니다. ASCII는 영어 알파벳, 숫자, 특수 문자 등을 표현하는 데 사용되는 가장 기본적인 인코딩 방식입니다. UTF-8 은 전 세계의 모든 문자를 표현할 수 있는 유니코드 기반의 가변 길이 인코딩 방식입니다.
UTF-16 은 2 바이트 또는 4 바이트를 사용하여 문자를 표현하는 방식입니다.
깨진 글자, 왜 생기는 걸까?
깨진 글자는 문자열을 인코딩할 때와 디코딩할 때 서로 다른 인코딩 방식을 사용하거나, 해당 인코딩 방식에 없는 문자를 사용했을 때 발생합니다. 예를 들어, UTF-8 로 인코딩된 문자열을 ASCII로 디코딩하면 한글과 같은 문자는 깨져서 보일 수 있습니다. 또한, 특정 폰트가 해당 문자를 지원하지 않는 경우에도 깨진 글자가 나타날 수 있습니다.
인코딩 문제, 어떻게 해결해야 할까?
인코딩 문제를 해결하기 위해서는 다음과 같은 방법을 시도해 볼 수 있습니다. 1. 올바른 인코딩 방식 지정: 문자열을 인코딩하고 디코딩할 때 동일한 인코딩 방식을 사용해야 합니다.
웹 페이지의 경우 와 같이 HTML 문서의 태그 안에 인코딩 방식을 명시해야 합니다. 2. 유니코드 사용: 가능한 한 UTF-8 과 같은 유니코드 기반의 인코딩 방식을 사용하는 것이 좋습니다.
유니코드는 전 세계의 모든 문자를 표현할 수 있기 때문에 깨진 글자 문제를 예방할 수 있습니다. 3. 폰트 확인: 특정 폰트가 해당 문자를 지원하는지 확인해야 합니다.
필요한 경우 해당 문자를 지원하는 폰트로 변경해야 합니다. 4. 인코딩 변환: 문자열의 인코딩 방식을 변경해야 하는 경우, 프로그래밍 언어에서 제공하는 인코딩 변환 기능을 사용하면 됩니다.
예를 들어, Python 에서는 와 메서드를 사용하여 인코딩 방식을 변경할 수 있습니다. 다음은 문자열 인코딩 방식에 대한 정보를 요약한 표입니다.
인코딩 방식 | 설명 | 특징 |
---|---|---|
ASCII | 영문자, 숫자, 특수문자 | 7 비트, 단순 |
UTF-8 | 유니코드 기반, 전 세계 문자 지원 | 가변 길이, 웹 표준 |
UTF-16 | 유니코드 기반, 2 바이트 또는 4 바이트 | 고정 길이, 일부 시스템 사용 |
EUC-KR | 한글 인코딩 | 2 바이트, 오래된 시스템 사용 |
문자열 최적화, 효율적인 코드 작성을 위한 필수 조건
문자열은 프로그램에서 자주 사용되는 자료형이기 때문에 문자열 연산의 성능은 프로그램 전체의 성능에 큰 영향을 미칠 수 있습니다. 특히 문자열을 자주 생성하거나 수정하는 경우에는 문자열 최적화가 더욱 중요합니다. 문자열 최적화는 메모리 사용량을 줄이고, CPU 사용량을 줄여 프로그램의 실행 속도를 향상시키는 것을 목표로 합니다.
효율적인 코드 작성을 위한 문자열 최적화 기법을 알아봅시다.
불변(Immutable) 문자열 vs 가변(Mutable) 문자열
문자열은 불변(Immutable) 객체와 가변(Mutable) 객체로 나눌 수 있습니다. 불변 문자열은 한 번 생성되면 그 값을 변경할 수 없는 문자열입니다. Java 의 클래스가 대표적인 불변 문자열입니다.
반면 가변 문자열은 값을 변경할 수 있는 문자열입니다. Java 의 클래스나 Python 의 가 가변 문자열의 예입니다. 불변 문자열은 값을 변경할 때마다 새로운 객체를 생성해야 하기 때문에 메모리 사용량이 증가하고, 성능이 저하될 수 있습니다.
따라서 문자열을 자주 변경하는 경우에는 가변 문자열을 사용하는 것이 좋습니다.
StringBuilder 활용: 문자열 조립의 달인
는 Java 에서 가변 문자열을 다루기 위한 클래스입니다. 를 사용하면 문자열을 추가, 삭제, 삽입하는 등의 작업을 효율적으로 수행할 수 있습니다. 특히 반복문 안에서 문자열을 조작하는 경우에는 대신 를 사용하는 것이 좋습니다.
예를 들어, 다음과 같은 코드는 을 사용하여 문자열을 조립하는 비효율적인 코드입니다. String str = “”;
for (int i = 0; i < 1000; i++) {
str += i; // 매번 새로운 String 객체 생성
}반면, 다음과 같은 코드는 를 사용하여 문자열을 조립하는 효율적인 코드입니다.
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(i); // 기존 StringBuilder 객체에 문자열 추가
}
String str = sb.toString();
String Pool 활용: 메모리 절약의 지혜
Java 의 은 문자열 리터럴을 저장하는 공간입니다. 문자열 리터럴은 코드에서 직접 작성하는 문자열을 의미합니다. 에 저장된 문자열은 프로그램 내에서 공유되기 때문에 메모리 사용량을 줄일 수 있습니다.
예를 들어, 다음과 같은 코드는 을 활용하는 코드입니다. String str1 = “hello”; // String Pool 에 “hello” 저장
String str2 = “hello”; // String Pool 에서 “hello” 참조
System.out.println(str1 == str2); // true (같은 객체 참조)반면, 다음과 같은 코드는 을 활용하지 않는 코드입니다.
String str1 = new String(“hello”); // 새로운 String 객체 생성
String str2 = new String(“hello”); // 새로운 String 객체 생성
System.out.println(str1 == str2); // false (다른 객체 참조)
보안, 문자열을 다룰 때 명심해야 할 것들
문자열은 사용자 입력, 데이터베이스 쿼리, 파일 경로 등 민감한 정보를 담고 있을 수 있습니다. 따라서 문자열을 다룰 때는 보안에 특히 주의해야 합니다. 문자열에 대한 적절한 보안 조치를 취하지 않으면 해커의 공격에 취약해질 수 있습니다.
문자열을 다룰 때 명심해야 할 보안 사항을 알아봅시다.
SQL Injection 방지: 데이터베이스 보안의 기본
SQL Injection 은 사용자 입력을 이용하여 SQL 쿼리를 조작하는 공격 기법입니다. 예를 들어, 사용자가 로그인 ID로 과 같은 문자열을 입력하면, SQL 쿼리가 와 같이 변경되어 관리자 계정으로 로그인될 수 있습니다. SQL Injection 을 방지하기 위해서는 다음과 같은 방법을 사용할 수 있습니다.
1. Prepared Statement 사용: Prepared Statement 는 SQL 쿼리를 미리 컴파일하여 사용자 입력을 안전하게 처리하는 기능입니다. Prepared Statement 를 사용하면 사용자 입력이 SQL 쿼리의 일부로 해석되지 않고, 데이터로 처리됩니다.
2. 입력 값 검증: 사용자 입력 값에 특수 문자나 SQL 예약어가 포함되어 있는지 검증해야 합니다. 필요한 경우 특수 문자를 제거하거나, SQL 예약어를 다른 문자로 대체해야 합니다.
XSS 방지: 웹 페이지 보안의 핵심
XSS(Cross-Site Scripting)는 웹 페이지에 악성 스크립트를 삽입하여 사용자 정보를 탈취하거나, 웹 페이지를 변조하는 공격 기법입니다. 예를 들어, 사용자가 게시글에 와 같은 스크립트를 삽입하면, 다른 사용자가 해당 게시글을 볼 때 스크립트가 실행되어 악성 코드가 실행될 수 있습니다.
XSS를 방지하기 위해서는 다음과 같은 방법을 사용할 수 있습니다. 1. HTML Entity Encoding: 사용자 입력 값을 HTML Entity 로 인코딩해야 합니다.
HTML Entity Encoding 은 HTML 특수 문자를 HTML Entity 코드로 변환하는 것을 의미합니다. 예를 들어, 는 로, 는 로, 는 로 변환해야 합니다. 2.
Content Security Policy (CSP) 설정: CSP는 웹 페이지에서 실행할 수 있는 스크립트의 출처를 제한하는 기능입니다. CSP를 설정하면 허용되지 않은 출처의 스크립트는 실행되지 않기 때문에 XSS 공격을 방지할 수 있습니다.
개인 정보 보호: 민감한 데이터 암호화
문자열에 개인 정보나 민감한 정보가 포함되어 있는 경우, 암호화를 통해 데이터를 보호해야 합니다. 암호화는 데이터를 읽을 수 없는 형태로 변환하는 것을 의미합니다. 대표적인 암호화 알고리즘으로는 AES, RSA 등이 있습니다.
암호화된 데이터는 복호화 키를 가지고 있는 사람만 읽을 수 있기 때문에 데이터 유출을 방지할 수 있습니다. 문자열, 그 녀석 참 매력적이지 않나요? 껍데기만 핥는 수준에서 벗어나 속속들이 파헤쳐 보니, 단순한 텍스트 보관함을 넘어 코딩의 세계를 더욱 풍요롭게 만들어주는 핵심 도구라는 것을 알게 되었습니다.
이제 여러분도 문자열을 자유자재로 요리하며 코딩 실력을 한 단계 업그레이드해보세요! 이 글이 여러분의 여정에 작은 디딤돌이 되었기를 바랍니다.
글을 마치며
문자열은 프로그래밍의 기본적이면서도 핵심적인 요소입니다. 이번 포스팅에서는 문자열의 기본 개념부터 고급 활용법까지 다양한 내용을 다루었습니다. 문자열 메서드, 정규 표현식, 인코딩, 최적화, 보안까지 꼼꼼하게 살펴보면서 문자열에 대한 이해를 높이는 데 집중했습니다.
이 글을 통해 여러분이 문자열을 더욱 효과적으로 활용하고, 더 나아가 안전하고 효율적인 코드를 작성하는 데 도움이 되기를 바랍니다. 문자열에 대한 끊임없는 탐구와 연습을 통해 여러분의 프로그래밍 실력을 더욱 발전시켜 나가시길 응원합니다.
궁금한 점이나 더 알고 싶은 내용이 있다면 언제든지 댓글로 문의해주세요. 함께 성장하는 개발자가 됩시다!
알아두면 쓸모 있는 정보
1. 문자열을 비교할 때는 연산자 대신 메서드를 사용하세요. 연산자는 객체의 참조를 비교하지만, 메서드는 객체의 내용을 비교합니다.
2. 문자열을 대량으로 연결할 때는 연산자 대신 를 사용하세요. 연산자는 매번 새로운 문자열 객체를 생성하기 때문에 성능이 저하될 수 있습니다.
3. 문자열에서 특정 문자열을 찾을 때는 메서드 대신 정규 표현식을 사용하면 더욱 강력한 검색이 가능합니다.
4. 문자열을 입력받을 때는 반드시 입력 값 검증을 수행하여 SQL Injection 이나 XSS와 같은 보안 취약점을 예방해야 합니다.
5. 문자열 인코딩 방식을 설정할 때는 가능한 한 UTF-8 을 사용하세요. UTF-8 은 전 세계의 모든 문자를 표현할 수 있기 때문에 깨진 글자 문제를 예방할 수 있습니다.
중요 사항 정리
– 문자열은 텍스트 데이터를 다루는 데 필수적인 자료형이며, 다양한 메서드를 통해 조작할 수 있습니다.
– 정규 표현식은 복잡한 패턴의 문자열을 검색하고 추출하는 데 유용한 도구입니다.
– 문자열 인코딩은 문자를 숫자로 변환하는 방식으로, 잘못된 인코딩은 깨진 글자를 유발할 수 있습니다.
– 문자열 최적화는 메모리 사용량을 줄이고, CPU 사용량을 줄여 프로그램의 실행 속도를 향상시키는 것을 목표로 합니다.
– 문자열을 다룰 때는 SQL Injection, XSS와 같은 보안 취약점에 주의해야 합니다.
자주 묻는 질문 (FAQ) 📖
질문: String 객체는 왜 불변(immutable)이라고 하는 거죠? 수정하려고 하면 매번 새로운 객체가 생성되는 건가요?
답변: String 이 불변이라는 건, 한번 String 객체가 만들어지면 그 값을 절대 바꿀 수 없다는 뜻이에요. 마치 어릴 적 새겨놓은 나무 벤치의 낙서처럼, 시간이 흘러도 그 모습 그대로인 거죠. 예를 들어 “Hello”라는 String 객체를 만들고 ” World”를 덧붙여 “Hello World”를 만들면, 기존 “Hello” 객체가 바뀌는 게 아니라 완전히 새로운 “Hello World”라는 String 객체가 메모리에 뿅 하고 생겨나는 거예요.
기존의 “Hello” 객체는 그대로 남아있죠. 이렇게 불변으로 설계된 이유는 여러 가지가 있는데, 가장 큰 이유는 안정성과 보안 때문이에요. 여러 곳에서 String 객체를 공유하더라도, 값이 변할 걱정 없이 안전하게 사용할 수 있는 거죠.
또, String Pool 이라는 특별한 공간에 String 객체를 저장해서 메모리 효율성을 높이는 데도 유리하고요.
질문: String 관련해서 NullPointerException (NPE)이 자주 발생하는데, 어떻게 하면 좀 덜 고생할 수 있을까요?
답변: 아, NPE는 정말 개발자들의 영원한 숙제 같은 존재죠. 저도 String 다루다가 식은땀 흘린 적이 한두 번이 아니에요. 가장 확실한 방법은 항상 null 가능성을 염두에 두고 코딩하는 거예요.
String 변수를 사용할 때마다 체크를 생활화하는 거죠. 좀 번거롭긴 하지만, 디버깅하는 시간과 스트레스를 생각하면 훨씬 이득이에요. Java 8 부터는 이라는 클래스를 활용해서 null 처리를 더 깔끔하게 할 수도 있어요.
그리고 외부 API에서 String 값을 받아올 때는, 미리 default 값을 설정해두거나, 빈 문자열(“”)로 초기화해두는 것도 좋은 방법이에요. 예를 들어 사용자 이름을 가져오는 API가 있다고 쳤을 때, 사용자가 이름을 입력하지 않았을 경우 null 대신 “”을 반환하도록 설정해두면 NPE 발생 가능성을 확 줄일 수 있겠죠.
질문: String 의 메소드랑 연산자는 무슨 차이가 있는 건가요? 상황에 따라 뭘 써야 할지 헷갈릴 때가 많아요.
답변: 와 연산자는 String 비교에서 정말 중요한 차이를 가지고 있어요. 마치 친구와 연인처럼, 겉으로는 비슷해 보여도 그 관계는 완전히 다르죠. 연산자는 두 객체의 참조를 비교해요.
즉, 두 변수가 같은 메모리 주소를 가리키고 있는지 확인하는 거죠. 반면에 메소드는 두 객체의 내용이 같은지 비교해요. String 클래스에서 메소드는 문자열의 내용을 비교하도록 오버라이딩되어 있기 때문에, 두 String 객체가 같은 문자열을 가지고 있다면 는 를 반환하죠.
예를 들어, 라고 했을 때, 는 일 가능성이 높아요. 왜냐하면 Java 는 String literal 을 String Pool 에 저장하고, 같은 값을 가지는 String literal 은 같은 객체를 참조하도록 최적화하기 때문이죠.
하지만 라고 하면, 는 가 될 거예요. 왜냐하면 은 항상 새로운 객체를 생성하기 때문이죠. 따라서, String 의 내용을 비교할 때는 항상 메소드를 사용해야 실수를 줄일 수 있어요.
📚 참고 자료
Wikipedia 백과사전 정보
구글 검색 결과
구글 검색 결과
구글 검색 결과
구글 검색 결과
) 다루기 – 네이버 검색 결과
) 다루기 – 다음 검색 결과