brunch

You can make anything
by writing

C.S.Lewis

클래스멤버 - 변수

* 이 내용은 철저히 초심자를 위해 알기 쉽게 설명하는 것을 목적으로 하고 있습니다.

* 더 정확하고 자세한 개념은 다른 고수님들의 글들을 참고하시길 바랍니다.

* 그리고 이 글에서는 코드 최소한으로 다루고 있습니다.


이번 시간엔 클래스에 소속된 변수, 바로 멤버 필드에 대해 알아보겠습니다.

사실 자바를 배우면서 헷갈리는 부분 중 하나가 바로 용어입니다.

객체화를 인스턴스화로 부르기도 하고, 매개변수를 인자값, 레퍼런스변수 등으로 부르기 때문이죠.

오늘 배울 멤버 필드를, 멤버 변수, 멤버 속성이라고도 부릅니다.

우리는 그냥 변수라고 통일하도록 하겠습니다.


클래스 영역 안에 소속된 변수, 이것을 멤버 변수라고 부릅니다.

당연히 변수 영역에서 배웠듯이 이 녀석은 클래스를 벗어나서 사용할 수 없습니다.


클래스 안에 소속된 멤버 변수 역시도 클래스를 복사(객체화) 해 온 다음 사용이 가능합니다.


이렇게 복사해 온 객체의 멤버 변수에 값을 넣는 과정을 코드로 풀이해 보자면 이렇습니다.


멤버 변수는 소속된 객체가 사라질 때까지 값을 유지하고 있습니다.


아래 코드를 한번 볼까요?

이전 시간에 보았던 Puppy 클래스를 객체화(복사) 해서 초기화하는 과정의 코드입니다.

우리가 Puppy를 객체화할 때 이름을 “멍멍이”, 목표는 “애교”라고 정했다고 가정해 보겠습니다.

이때 넣어준 이름(name)과 목표(goal)는 생성자 영역에 있기에 생성자가 실행되고 나면 사라져 버립니다.

이 변수들은 생성자의 블록 { }에 갇혀 있기 때문이죠.


그렇기 때문에 이렇게 데려올 때 이름과 목표를 준다고 한들…


바로 잊어버리게 됩니다.


이것을 방지하기 위해 우리는 받아온 name과 goal을 생성자 영역에서 탈출시켜 주기로 합니다.


클래스에 소속되어 있는 변수로 값을 옮겨 주는 것이죠.

그러면 이제 이름과 목표는 객체가 끝날 때까지는 살아있을 수 있습니다.

여기서 this는 무엇이냐고요?

클래스의 멤버 변수와 생성자의 매개변수의 이름이 같기에 구분을 해 주는 것입니다.

이(this) 객체 소속인 name에 받아온 name을 대입하는 과정이라고 보시면 됩니다.


이제 초기화 이후에도 puppy 객체는 수명이 다 할 때까지 자신의 name과 goal을 잊지 않을 것입니다.


이상으로 멤버 변수에 대해 알아보았습니다.

멤버 변수는 클래스에 소속되어 객체화된 이후에 해당 객체가 수명을 다 할 때까지 유지되는 변수였습니다.

그런데 객체가 유지될 동안에만 유지되는 것이 야속하다고요?


걱정 마세요! 더 오래 유지되는 녀석들도 있습니다.

다만 조심해야 합니다. 왜냐고요?

그건 다음시간에 알아보도록 하겠습니다.

매거진의 이전글 클래스멤버 - 메서드
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari