IT 개발 관련/Java

String이란?

felixorlby 2023. 11. 6. 13:54

String이란?

String 클래스는 문자열을 다루는 클래스이며 immutable 하다는 특징이 있다. immutable은 불변이라는 단어로

String 객체에 값이 초기에 할당되면 그 값을 변경되지 않는 것을 의미한다.

 

* String 객체가 불변객체(Immutable)인 이유

Java에서 가장 많이 사용되는 Data Type 중 하나가 바로 String 객체이다. 때문에 메모리에 대한 고민을 안 할 수가 없었다.

따라서 재사용될 가능성이 높다고 판단하여 같은 값일 경우 어플리케이션 당 하나의 String 객체만을 생성 두어 JVM의 Heap 메모리 관리를 효율적으로 하자고 했다.

 

String 객체 생성방법

1. 리터럴을 이용하여  String 객체 생성

String a1 = "a";

 

2. new 연산자를 이용하여 String 객체 생성

String a2 = new String("a");

 

리터럴로 생성하게 되면 String 객체는 Heap 영역에 존재하는 String Constant Pool이란 공간에 저장이 되며 new연산자를 이용해 생성하면 Heap 영역에 따로 생성된다. 메모리 구조는 아래와 같다.

 

String ==과 equals()

예시 코드)

String a1 = "apple";
String a2 = "apple";
String a3 = new String("apple");

a1 == a2 // true or false?
a1 == a3 // true or false?

a1.equals(a2) // true or false?
a1.equals(a3) // true or false?

 

다음 질문에 대한 답을 달기 위해서는 == 과 equals()의 동작 차이에 대해서 이해해야 한다.

==는 객체의 주소값을 비교한다. 그렇다면 String 객체에서의 equls()는 어떻게 동작할까?

 

정답은 간단하다. 객체의 메서드가 어떻게 구현되어 있는지 알고 싶다면 객체 구현부 코드를 직접 들여다보면 된다.

코드를 보면 String의 equals는 자바의 최상위 클래스인 Object 클래스를 상속하여 오버라이딩을 통해 구현되었다.

내부 동작을 보면 equlas는 == 을 통하여 주소값을 비교한 후에 주소값이 다르다면 문자열을 비교하도록 구현되어 있다는 것을 알 수 있다. 그렇다면 우리는 이제 위 예제를 손쉽게 풀어낼 수 있다.

 

두 가지 개념만 확실하게 알고 있으면 된다.

1. 리터럴과 new 연산자를 통한 String 객체 생성 방법

2. == 과 equlas() 동작의 차이

 

참고 블로그:

https://kim-jong-hyun.tistory.com/55

 

[JAVA] - String이란?

JAVA로 개발하다보면 제일많이 쓰이는 클래스가 String 클래스인것같다. 이번장에서는 String에 대해 알아보자 String이란? String 클래스는 문자열을 다루는 클래스이며 immutable 하다는 특징이 있다. imm

kim-jong-hyun.tistory.com

https://starkying.tistory.com/entry/what-is-java-string-pool

 

String Constant Pool이란? | Java String Pool

Java에서 String 객체를 생성하는 방법은 2가지가 있다. 첫번째는 String literal, 즉 큰 따옴표("")를 사용하는 것이고, 두번째는 new 연산자를 사용하는 것이다. 두 방법에는 어떤 차이가 있을까? 간단한

starkying.tistory.com