220621 TIL 멤버변수, 지역변수, 클래스변수... 너네 뭔데??

너무 헷갈리는 변수의 종류들

오늘은 평소에 아무렇지 않게 쓰던 변수의 종류들이 낯설게 느껴졌다.

전역 변수, 지역변수, 멤버 변수, 클래스 변수, 인스턴스 변수.... 변수의 종류가 왜 이렇게 많아..? 멤버 변수랑 클래스 변수랑 같은 거 아니야?? 

그래서 오늘 시간을 내서 변수의 종류에 대해서 알아보기로 마음먹었다.

 

우선 변수의 종류를 결정짓는데 가장 중요한 요소는 "변수의 선언 위치"다. 그래서 변수가 어디서 선언했는지를 확인해야 이 변수가 어떤 종류인지 알 수 있다.

그래서 변수의 선언 위치를 기준으로 보면 변수를 2가지로 나눌 수 있다.

1. 멤버 변수

2. 지역변수

 

멤버 변수의 선언 위치는 "클래스 영역"이고, 지역변수의 선언 위치는 "클래스 영역 이외의 영역" 즉 메서드 안이나, 생성자 안에서 선언된 변수를 말한다.

 

근데 이 멤버 변수를 또 2가지로 나뉜다. 이러니 헷갈리지... 만약 오늘 한 번 짚고 넘어가지 않았으면 나는 계속 멤버 변수와 인스턴스 변수, 클래스 변수의 차이를 몰랐을 것이다..

1. 인스턴스 변수

2. 클래스 변수

 

이 친구들은 같은 멤버 변수니까 비슷하지 않을까???  전혀 아니다.. 

 

인스턴스 변수는 인스턴스마다 별도의 저장공간을 갖기 때문에 서로 다른 값을 가질 수 있어서 인스턴스마다 개별적인 속성을 가져야 할 때 쓴다라고 하는데 이렇게 말하면 솔직히 하나도 이해가 되지 않는다. 그래서 간단히 비유해서 설명하면 TV를 만든다고 가정하자

TV를 만들 때 각 TV의 크기를 우리가 마음대로(20인치, 30인치, 40인치 등등) 정해서 만들 수 있다하면, TV의 크기라는 변수는 TV마다 다른 크기(다른 속성)를 가질 수 있다. 

즉, 각각의 인스턴스마다 개별적인 속성을 가져야 할 때, 인스턴스 변수를 사용한다.

 

그렇다면 클래스 변수는 언제 사용할까?

우선 클래스 변수의 선언 방법은 변수 앞에 접근제어자 static을붙이기만 하면 클래스 변수가 된다. (static은 '공통적인'이라는 의미이다.)

클래스 변수는 인스턴스 변수와 달리 모든 인스턴스가 공통된 저장공간을 공유한다. 이 말은 모든 인스턴스가 공통적인 값을 유지해야 할 때 사용한다. 이것도 TV로 예를 들면 TV를 만들 때 TV의 컬러를 무조건 검정색으로 만들어야 한다면, TV의 컬러는 클래스 안에서 모든 인스턴스가 공통으로 갖는 값(검정색)이기 때문에 클래스 변수로 된다.

즉, 모든 인스턴스가 공통적인 값을 가져야 할 때, 클래스 변수를 사용한다.

 

마지막으로 멤버 변수와 다른 종류인 지역변수는 뭘까?

지역변수는 메서드 내에 선언되어 메서드 안에서만 사용 가능하다. 메서드가 종료되면 지역변수도 같이 종료가 된다. 

즉 메서드 안에 선언된 지역변수는 그 메서드와 한 몸이다. 죽으면 같이 죽는다. 지역변수는 의리 있는 친구 구만?

 

 

각 변수의 선언 방법

class Variables{
    int iv; // 인스턴스 변수
    static int cv; // 클래스 변수
    
   void mmethod(){
   	int lv = 0; // 지역변수
   }
}

 

그러면 전역 변수는 뭐야?

전역 변수(global variable)의 단어 의미대로 해석해보면 전체적으로 사용할 수 있는 변수 같은데..

오늘 공부한 개념으로 내가 내린 결론은 클래스 변수처럼 static을 써서 공유되게 사용하면 그게 바로 전역변수가 아닌가...??? 사실 확신이 서지 않는다.. 그러면 클래스 변수랑 전역 변수랑 같은 게 아닌가?? 하는 의문도 들고..

그래서!!! 구글링 해서 찾아봤는데 어디는 전역 변수와 멤버 변수는 같다, 어디는 다르다. 말이 다 달라서 정확하게 판단이 서지 않는다.

또 어느 블로그 글에서는 자바에는 전역 변수라는 기술이 지원하지 않는다고도 한다. 이게 무슨말이야..;; 

구글에 "자바 전역변수"라고만 쳐도 전역변수 만들기, 전역변수 사용, 등등 전역변수를 사용하는 글들이 얼마나 많은데...

 

전역변수는 자바에서는 허용하지 않는단다.. 믿을 수 있는 자료인가?

그래서.. 나의 액션플랜

전역 변수와 멤버 변수가 같은 것인지 트레이너분들께 질문하기 ㅎㅎㅎ!!

앞으로도 헷갈린다 싶으면 넘기지 말고 시간 투자해서 알아보기 (넘기다 보면 나중에 나비효과처럼 큰 문제가 생길 수 도 있을 듯..)