[자바개념정리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편을 마치고 다음 번에 더 좋은 글로 돌아오겠습니다.
** 공감이나 댓글은 언제나 좋은 글을 쓰는 데 힘이 됩니다 **
'learn-ing > source code' 카테고리의 다른 글
[자바 JDK 설치] 환경변수 설정 후 잘 됐는지 확인하는 방법 (0) | 2017.05.14 |
---|---|
[JAVA 메소드 제대로 익히기 01] 자바 Arrays.toString (0) | 2017.04.30 |
현직 개발자(경력25년)의 프로그래밍 현업이야기 (0) | 2017.04.25 |
자바가 인기있는 이유와 객체지향적 언어 (0) | 2017.04.12 |