[자바개념정리01]멤버변수 지역변수 전역변수 등 헷갈리지 않게 구분하기

훈장 아르모트

·

2017. 4. 30. 13:08

반응형

제가 자바를 공부하는 동안 뭔가 궁금증이 완전히 해소되지 않는 상태로 방치되어 있었던 개념들이 있었습니다. 오늘을 시작으로 자바개념정리 시리즈를 연재하면서 하나씩 정리해나갈 생각입니다. 

첫번째로 제가 준비한 것은 자바의 '변수' 에 대한 내용입니다. 

변수를 데이터 타입으로 나누면 문자형/정수형/실수형/논리형 등으로 나눌 수 있습니다. 이 부분은 비교적 개념정리가 수월한데, 변수를 선언위치에 따라 나눠서 구분할 때 개념이 헷갈리기 시작해서 머리가 아프기 시작합니다. 

현재 공부하고 계신 부분에 따라서 선언위치가 뭐지? 하는 궁금증이 생기실 수도 있는데, 일단 아래 부분을 읽다보면 이해가 되실 겁니다.

변수를 선언위치에 따라 크게 구분하면 딱 2가지로 나눌 수 있습니다. 

바로 멤버변수 / 지역변수 입니다. 

멤버변수는 선언위치가 '클래스 영역' 이고, 지역변수의 선언위치는 '메소드나 생성자 내부' 입니다. 

아마 제가 그랬던 것처럼 이런 구분으로는 감이 안오실텐데요. 멤버변수를 조금 더 뜯어보면 이해의 실마리가 보이기 시작합니다.

멤버변수는 다시 두 가지로 나누어집니다. 

바로 클래스변수 / 인스턴스변수 입니다. 

이 둘은 같은 멤버변수에 속하지만 필요한 상황이 굉장히 다릅니다. 

이해를 돕기 위해 예를 하나 들어보겠습니다. 우리가 게임을 처음 시작할 때, 캐릭터를 하나 만듭니다. 캐릭터를 만들 때 머리색깔을 블랙,골드,브라운 중에서 고를 수 있다고 하면, 머리색깔이라는 저 변수는 모든 캐릭터마다 다른 값을 가질 수 있겠네요. 

즉, 각각의 객체(=인스턴스)마다 개별적인 속성을 가져야 할 때, 우리는 인스턴스 변수를 선언해서 사용합니다. 

반대로 클래스 변수는, 모든 객체가 공통적으로 똑같은 속성을 가질 때 사용하는 것입니다. 다시 게임 캐릭터의 예를 들면, 캐릭터별로 키를 다르게 가질 수는 없고 모든 캐릭터가 2m의 키를 갖도록 고정한다고 하면, 이 키는 클래스 내 모든 객체(=인스턴스)가 똑같이 가지는 속성이므로 클래스변수가 됩니다. 일반적으로 앞에 'static' 이라는 단어가 붙어있으면 클래스변수라 할 수 있고, 이 클래스 변수는 클래스 내 모든 영역에 영향을 끼치는 전역함수의 성질을 가집니다. 뒤에 배울 지역함수의 반대 개념이죠.  

각 캐릭터(=객체)를 생성할 때 마다

바꿀 수 있는 머리색깔   = 인스턴스변수

바꿀 수 없는           = 클래스변수

간단히 코드작성하는 예시로 보여드리겠습니다. 

class GameCharacter

    static int height = 200        // 클래스변수, 2미터의 키 모든 객체(=인스턴스)에 적용

     String haircolor;               // 인스턴스변수, 값이 고정되지 않아서 각 객체마다 다른 값 가능  

 

(각 객체마다 다른 값을 설정하기 위해서는 나중에 메소드 안에서 실제로 객체를 생성하면서 시행한다. )

이렇게 정리하면 되겠습니다. 

다시 앞으로 돌아가서, 선언위치에 따라 변수는 크게 멤버변수/지역변수로 나누어 지고, 멤버변수는 클래스변수와 인스턴스 변수로 나누어 진다는 것을 정리했습니다. 이제 남은 것은 지역변수입니다. 

지역변수는 메소드 내에 선언되어 메소드 내에서만 사용이 가능한 변수를 말하며 메소드가 종료되면 자동으로 소멸됩니다. 메소드라는 건 '프로그램이 어떤 동작을 하게 하는 명령기능' 이라고 이해할 수 있는데, 영어공부와 관련지어 이야기 하면 '동사' 에 해당합니다. 메소드는 System.out.println(); 과 같은 아이들처럼 JAVA 자체에서 제공하지만, 개발자가 직접 만들어서 사용하기도 합니다. 메소드는 대략 이런 식으로 생겼습니다. 

public static void main(String[] args) {  

}

void print() {

}  

{    }  중괄호 안에 들어있는 내용을 실행하라. 이런 것이죠. 

때문에 메소드 내에서 선언되고 사용되어 지는 지역변수는, 당연히 저 중괄호 내부에 들어있어야 합니다.그리고 중괄호 안에서는 변수로서 역할을 하지만 밖에서는 없는 존재나 다름 없는 것이죠. 

[출처 : 책 GOOD JAVA , 우재남 지음, 한빛아카데미]

얼마 전에 구입한 GOOD JAVA 라는 책에 이렇게 설명이 되어있는데, 이해에 도움이 될 것 같습니다. 

이상으로 자바개념정리 1편을 마치고 다음 번에 더 좋은 글로 돌아오겠습니다. 

** 공감이나 댓글은 언제나 좋은 글을 쓰는 데 힘이 됩니다 **

 

반응형