[Java] 헷갈리는 변수 종류 정리

effiRin·2022년 3월 13일
8

Java

목록 보기
1/2
post-thumbnail
post-custom-banner

1. 데이터 타입(메모리에 저장되는 방식)에 따른 분류

1) 기본 자료형 (기본형 변수 Primitive variable)

  • 프로그래밍 언어에서 미리 만들어 둔 타입(가장 많이 쓰이는 데이터 타입을 쉽게 사용하기 위함)
  • 변수에 할당된 메모리에 직접 값이 저장된다.
  • 비교적 단순 데이터
  • 예) int, double, boolean, char 등

2) 객체 자료형 (참조 변수 )

  • 여러 데이터들이 복합적으로 모여있는 데이터
  • 변수에 할당된 메모리에 데이터의 ‘레퍼런스’(주소값)가 저장된다.
  • 비교적 복합적인 데이터
  • 예) String, System, ArrayList 등
  • 사용자가 얼마든지 새로운 클래스(데이터 타입)를 만들어 낼 수 있기 때문에 무한하다.

예시

java
int i = 10;           // 기본 자료형
String s = "ABCD";    // 객체 자료형

기본 자료형에는 변수 i에 잡힌 메모리 공간에 직접 데이터 10이 들어가게 되고
객체 자료형에는 "ABCD"는 다른 메모리 공간에 넣어놓고, 변수 s에 잡힌 메모리 공간에는 ABCD를 넣어놓았던 그 메모리 공간의 주소가 담기게 된다.

구분 방법

  • 자료형의 이름이 소문자로 시작 - 기본자료형 (예 : int)
  • 자료형의 이름이 대문자로 시작 - 객체자료형 (예 : String)



2. 선언 위치에 따른 분류

1) 멤버변수 (필드)

  • 클래스 영역에 선언된 변수로, ‘클래스변수, 인스턴스변수’를 통틀어 칭한다.
  • 객체가 가지고 있는 속성과 기능을 그 객체의 ‘멤버’라 하는데,
    이중 속성은 ‘멤버변수’라고 칭하고, 기능은 ‘메소드’라고 칭함.

1-1) 클래스변수

  • 인스턴스 변수 앞에 static 을 붙이기만 하면 된다.
  • 인스턴스 변수는 인스턴스마다 고유한 값을 가지지만, 클래스 변수는 모든 인스턴스가 공통된 값을 공유하게 된다.
  • 클래스 로딩될 때 생성된다(따라서 메모리에 딱 한 번만 올라간다)
  • public을 붙이면 같은 프로그램 내에 어디서든 접근할 수 있는 ‘전역 변수’가 된다.
  • 인스턴스 변수의 접근법(new 연산자를 이용하여 인스턴스 생성)과 달리,
    인스턴스 생성 없이 ‘클래스이름.변수이름’을 통해 접근 가능.

1-2) 인스턴스 변수

  • 클래스 영역에 선언되고 인스턴스 생성 시 만들어진다.
  • 따라서 인스턴스 변수의 값을 읽어오거나 저장하려면 인스턴스를 먼저 생성해야 한다. (new 연산자 활용)
  • 인스턴스 별로 다른 값을 가질 수 있기 때문에, 각각의 인스턴스마다 고유의 값을 가져야할 때 인스턴스 변수 선언한다.

  • 인스턴스 접근법
    클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
    변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
Tv t;           // [설명 1]
t = new Tv();   // [설명 2]

[설명 1] : Tv 클래스 타입의 참조변수 t를 선언
→ 메모리에 참조변수 t를 위한 공간이 마련되었으나, 아직 인스턴스가 생성되지 않았으므로 참조변수로 아무 것도 할 수 없다.

[설명 2] : Tv 인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
→ 연산자 new에 의해 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성된다. 이때, 멤버변수는 각 자료형에 해당하는 기본값으로 초기화된다.
→ 이때, 참조형 변수는 null, 기본형 변수 중 boolean은 false, int는 0으로 초기화된다.

대입연산자(=)에 의해서 생성된 객체의 주소값이 참조변수 t에 저장된다. 이제는 참조변수 t를 통해 Tv인스턴스에 접근할 수 있다. 인스턴스를 다루기 위해선 참조변수가 반드시 필요하다.
인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.


2) 지역변수

  • 메소드 내에 선언되며 메소드 안에서만 사용 가능한 변수
  • 메소드 실행 시 생성(메모리 할당)되며, 메소드가 종료되면 사라져서 사용할 수 없게 된다.

  • 매개변수

흔히 ‘파라미터’라고 불리며, 메소드에서 입력값을 받을 때 사용되는 변수.
인자(파라미터)값은 호출 시 메소드 입력부의 넣는 값이며 이 값은 매개변수에 복사되어 대입된다.
매개변수도 매소드 내에 선언된 것으로 간주하므로 지역변수이다.

예시

public class test {

	int iv;                // 인스턴스 변수
	static int cv ;        // 클래스 변수

	public void method() {
		int iv;              // 지역 변수
	}
	
	public void makeSum(int startVal, int endVal) {   // 매개 변수
}


클래스 변수 / 인스턴스 변수 / 지역 변수의 차이

출처 : https://itmining.tistory.com/20




Reference

https://chung-develop.tistory.com/13
https://sleepyeyes.tistory.com/28
https://itmining.tistory.com/20
https://catch-me-java.tistory.com/16?category=438116
남궁성(2016), <자바의 정석>, pp.232-236

profile
모종삽에서 포크레인까지
post-custom-banner

0개의 댓글