8.Java 참조 타입
참조 타입
예시
Java에서는 상자처럼 작동하는 '참조 타입 변수'가 있습니다. 이 상자에는 진짜 데이터가 들어 있는 다른 큰 상자를 가리키는 '지도'가 들어 있습니다. 이 큰 상자는 '힙'이라고 불리는 곳에 있어요. 작은 상자는 '스택'이라는 곳에 있고, 여기에는 지도만 들어 있습니다. 프로그램에서 무언가를 만들 때, Java는 큰 상자(힙)에 진짜 데이터를 넣고, 작은 상자(스택)에는 그 큰 상자를 찾을 수 있는 지도를 넣어요. 이렇게 해서 우리는 필요할 때마다 큰 상자에 있는 데이터를 쉽게 찾을 수 있습니다.
참조 타입이란...
객체의 메모리 주소를 참조하는 타입으로, 배열, 열거(enum), 클래스, 인터페이스가 여기에 해당합니다.
예를 들어, int a = 1;이라고 변수를 선언하고 값을 초기화하면, 1이라는 숫자는 스택 영역에서 직접 값을 가지고 있습니다. 하지만 String name = "abc";라고 String 클래스 변수를 생성하고 초기화하면, name은 힙 영역에 있는 String 객체의 메모리 주소를 가지고 있습니다. 위의 비유처럼, "abc"를 가진 객체의 주소를 스택 영역에 갖고 있는 것입니다.
참조 타입을 알아야 하는 이유
참조 타입이 어떻게 작동하는지 아는 것은, 우리가 프로그램을 만들 때 메모리를 어떻게 사용하고 있는지를 알게 해줍니다. 이를 통해 프로그램을 더 효율적이고 안정적으로 만들며, 오류를 피할 수 있게 도와줍니다.
주의할 점
String a = "abc";
String b = "abc";
String c = new String("abc");
이렇게 3개의 변수를 선언했습니다.
(a == b) = true
(b == c) = false
(a == c) = false
변수 3개의 값은 모두 문자열 "abc"로 같습니다.
자바는 문자열 리터럴이 동일하면 String 객체를 공유합니다. 그래서 a와 b의 값을 논리연산자로 비교하면 true가 나옵니다. 하지만 new 연산자를 사용하여 직접 String 객체를 생성하면, 새로운 객체를 생성하므로 주소가 달라 false가 나옵니다.
동일한 객체이건 다른 객체이건 상관없이 내부 문자열을 비교하고 싶을 때는 String 객체의 equals() 메소드를 사용해야 합니다.
boolean result = a.equals(c);



