주인장의 프로그래밍 개발 공부방

[Chapter 1 변수] 9. 참조형 변수(Reference Variable)의 기본 값과 초기화 본문

프로그래밍 기본 지식/Chapter 1 변수

[Chapter 1 변수] 9. 참조형 변수(Reference Variable)의 기본 값과 초기화

거신 2019. 5. 12. 20:33

이전 시간에는 참조형 변수를 선언하는 방법까지 알아봤다.

큰 틀은 비슷해 보였지만

기본형 변수와는 선언하는 방법도 다르고 새로운 명령어도 등장해서

조금은 복잡해 보였을지도 모르겠다.

하지만 생각하는 것보단 굉장히 간단하니 계속 반복하면 그리 어렵지 않을 것이다.

이번 시간에는 변수 선언의 초기화를 알아보자.

 

목표 : 참조형 변수의 기본 값은 무엇인지 알 수 있고 선언과 동시에 초기화를 할 수 있다.

 

1. 참조형 변수의 초기화

 

사실 우리는 이전에 변수 선언의 초기화를 이미 배웠었다.

그리고 초기화라는 것이 거창한 것도 아니고 단순히 값을 저장하는 그 자체이기 때문에

참조형 변수의 초기화라고 해도 특별할 것이 없다.

기본형 변수의 초기화와 동일하게 값을 지정하거나 또는 기본 값을 넣어주면 되는 것이다.

 

예를 들어 앞서 기본형 변수의 선언과 동시에 초기화를 한다고 하면

 

int i = 0;

또는

int i2 = 10;

 

과 같이 기본 값 0을 넣을 수도 있고 아니면 실제 값 10을 넣어서 초기화를 할 수 있다.

말이 초기화지 그냥 값을 넣는 것이다.

또는

 

int i;

 

와 같이 선언만 할 수도 있지만 클래스 영역에서만 가능하고

메서드 영역에서는 불가능하다는 것까지도 배웠었다.

 

참조형 변수도 똑같다.

단지 코드만 다를 뿐이지 기본형 변수와 개념도 똑같고 오류도 똑같다.

참조형 변수를 하나 선언해보자.

 

String str = new String("자바");

 

이렇게 선언을 하면 참조 변수 str에는

"자바"라는 값이 저장된 Heap영역의 어느 장소의 주소 값이 저장된다고 이미 배웠다.

그런데 여기에서

 

String str;

 

이라고만 선언한다면 어떻게 될까?

정답은 아무런 문제도 발생하지 않지만

기본형 변수와 똑같이 만약 메서드 영역에서 선언을 했다면 오류가 뿜뿜할 것이다.

당연히 클래스 영역에서 선언했다면 아무런 문제도 발생하지 않고

자동적으로 기본 값이 들어가 있을 것이다.

 

그렇기 때문에 역시 초기화를 해줘야 하는데

참조형 변수에서 값은 "자바"가 아니라 new String("자바")라는 점이다.

다시 말해, =기호 오른쪽에 있는 전체가 값이라는 것이다.

그렇기 때문에

 

String str = new String();

 

이라고 선언을 하거나 또는 참조형 변수의 기본 값인 null을 적어도 된다.

다시 코드를 적어보자면

 

String str = null;

 

이라는 말이다.

 

2. 참조형 변수의 기본 값

 

방금 참조형 변수의 기본 값이 null이라고 언급했다.

null이 뭘까?

사전적 의미로 아무런 가치가 없는이라는 뜻이다.

그 의미 그대로다.

아무런 가치도 없는 그냥 값이라는 뜻이다.

프로그래밍에서는 쓰레기 값이라고도 부르는데 이 null참조형 변수의 기본 값이다.

 

그렇다면 왜 null, 아무런 가치도 없는 값이 참조형 변수의 기본 값인걸까?

참조형 변수는 기본형 변수와 달리 변수에 실제 값이 아닌

메모리의 주소 값이 저장된다고 입이 마르고 닳도록 말했었다.

 

바로 null이라는 녀석은 이 것과 관련이 있는 것이다.

무슨 말인지 잘 연관이 되지 않을텐데 좀 더 디테일하게 알아보자.

 

사실 의미가 없는 값이라면 0이나 ' '(공백), null 모두 해당할 수도 있다.

하지만 컴퓨터는 그렇게 생각하지 않는다는 것이다.

0공백은 모두 그 자체의 의미를 가지고 있는 리터럴, 즉, 실제 값이라는 것이다.

하지만 null은 그렇지 않다.

null은 어떠한 형태도 형식도 가지지 않은 진짜 말 그대로의

아무런 의미가 없는 값이기 때문이다.

 

그러면 기본형 변수를 선언할 때도 null을 쓰면 되는거 아니냐?라고 궁금할 수도 있다.

아~~주 좋은 질문이다.

결론부터 말하면 불가능하다.

기본형 변수에는 해당 자료형에 맞는 값 밖에 저장하지 못하고

null은 앞에서도 설명했듯이 어떠한 형태도 없는 값이기 때문에

기본형 변수에 저장할 수 없다.

그렇기 때문에 해당 자료형에 맞는 값 중에서 아무런 의미가 없어 보이는 값인

숫자에서는 0, 문자에서는 공백기본 값인 것이다.

 

하지만 참조형 변수에서는 숫자 0이나 공백은 실제 값이기 때문에 그 자체가 기본 값이 될 수가 없다.

그렇기 때문에 아무것도 없는, 아무런 형태를 가지지 않는 null기본 값인 것이다.

 

따라서 참조형 변수를 기본 값으로 초기화를 한다면

 

String str = null;

 

로 선언하면 된다.

물론 클래스 영역에서

 

String str;

 

이라고만 선언을 해도 자동으로 str에는 null이 들어가게 된다.

 

3. 마무리

 

참조형 변수도 기본형 변수와 마찬가지로 초기화가 필요하다.

초기화라고 해서 거창한 것이 아니라

선언과 동시에 값을 넣어주거나 또는

참조형 변수기본 값인 아무런 의미가 없는 null을 넣어주면 되는 것이다.

Comments