자바를 처음 공부할 때 헷갈렸던 것 중에 하나가 있는데

바로 변수를 지칭하는 용어가 너무 많아 헷갈렸었다.


멤버변수 지역변수 인스턴스변수 클래스변수 참조변수...등등

어떤게 어떤건지 왜이리 지칭하는 수식어가 많은지 생각을 했었는데 이를 한 곳에서 정리해주는 곳을 찾고 싶었으나 결국 찬찬히 공부하면서 배웠다.

하지만 다시 정리도 하고 나같은 성질 급한 사람이 있을 수 도 있으니 정리해본다.


기본형변수

참조변수

멤버변수

클래스변수

인스턴스변수

지역변수

매개변수


내가 아는 변수의 종류들이다. 무려 7가지가 있는데 나누는 기준이 다르다 크게 두가지 기준이 있다.


1. data type 에 따른 분류


기본형변수참조변수로 나뉜다.


기본형변수는 자료의 실제값을 저장한다.


8가지 종류의 타입이 있다.

논리형 : boolean 

문자형 : char                      

정수형 : byte            

 short

 int

 long

실수형 : float

 double


참조변수는 값이 저장되어 있는 주소값을 값으로 갖는다.


8가지 기본형 변수를 제외한 나머지 타입이다.

대표적으로 String이 있고 사용자가 얼마든지 새로운 클래스를 만들어 낼 수 있기때문에 무한하다.



2. 선언 위치에 따른 분류


크게 멤버변수지역변수로 나뉘며


멤버변수클래스변수인스턴스변수를 통틀어서 부르는 용어이다.


클래스영역에 선언된 변수를 멤버변수라 하며 그중 앞에 static 이붙은 변수를 클래스 변수라고 한다.


인스턴스변수

클래스 영역에 선언되고

인스턴스 생성시 만들어진다.

각각의 인스턴스마다 다른 값을 가질 수 있다.

그러므로 인스턴스 생성이 필수이며 각 인스턴스마다 다른 값을 가져야 할 때 사용된다



클래스변수

인스턴스변수 앞에 static 을 붙이기만 하면 된다.

인스턴스변수가 각각의 인스턴스마다 다른값을 가질 수 있는 거와 달리 

값을 공유하는 변수이다.

클래스 로딩시 생성되며 

클래스이름.변수이름 이렇게 인스턴스 생성 필요없이 바로 쓸 수 있다.


지역변수

메소드 내에 선언되며 메소드 호출시 생성되고 메소드가 종료되면 사라진다.


매개변수

흔히 파라미터라고 불린다. 메소드에서 입력값을 받을 때가 있는데 그때 사용되는 변수를 매개변수라고 한다.

매개변수도 매소드 내에 선언된 것으로 간주되므로 지역변수이다.

인자값은 호출시 메소드입력부의 넣는 값이며 이값은 매개변수에 복사되어 대입된다.





예제를 보고 직접 구분해보자!


1
2
3
4
5
6
7
8
9
10
11
12
13
public class Variable {
    int a;
    static String b;
    void m(int c){
        int d=c;
    }
    public static void main(String args[]) {
        int e=0;
        Variable v = new Variable();
        v.m(e);
    }
}
 
cs




2번줄     a 기본형변수이면서 멤버변수인스턴스변수

3번줄     b참조변수이면서 멤버변수클래스변수

4번줄     c기본형변수이면서 매개변수 이면서 지역변수

5번줄     d기본형변수이면서 지역변수

7번줄     args참조변수이면서 매개변수 이면서 지역변수

8번줄     e는 기본형변수이면서 지역변수

9번줄     v는 참조변수이면서 지역변수

10번줄   e는 인자값으로 값0이 매개변수에 복사되어 넣어진다.

  1. ㅇㅇ 2019.10.29 19:18

    3번줄 int형 변수를 사용했기에 참조변수가 아니고 기본형변수아닌가요?

  2. 페페 더 프로그 2019.12.12 01:56

    제가 찾던 자료네요. 감사합니다.

  3. ㄱㅅㄱㅅ 2020.07.27 00:23

    작성년도가 꽤 되긴 했는데 지금 읽다보니
    맨 마지막 문단의 // 10번줄 e는 인자값으로 값0이 매개변수에 복사되어 넣어진다.//
    인자값(= 매개변수/parameter )은 메서드 void m(int c) 의 c가 인자값이고 v.m(e); 의 e는 인자값에 입력 되는 인수( argument) 같습니다~

    좋은글 잘보고 갑니다~


  4. 곰다우니 2021.10.17 00:22 신고

    감사합니다. 너무 헷갈렸는데 도움받고 갑니다..!

+ Recent posts