[JAVA] 지역변수와 인스턴스변수, 그게 뭔데?

popolarburr·2023년 2월 22일
0
post-thumbnail

1. 지역변수와 인스턴스변수

메모리 영역으로 들어가기 전, 변수의 종류를 알아야 한다.

[출처] : https://coding-factory.tistory.com/830

  • 이해를 돕기 위한 사진 첨부.

지역변수는 메소드나 함수 내부에서 선언된 변수를 일컫는다.

class Main {
	public static void main(String[] args) {
		int a = 10;
	}
}

main이라는 함수(메서드)가 실행됐고, 실행 후에 int a=10가 실행됐다.

함수가 실행됨으로써, stack 메모리영역에 저장되고, 이는 함수가 끝나기 전까지 살아있다.

즉, 지역변수 생명주기는 함수 실행과 동시에 생성되고, 종료와 동시에 소멸한다.

main이라는 함수가 실행됐으니 int a가 10이라는 값을 가지고 스택에 저장되고, 바로 함수가 종료되면서 소멸한다.

인스턴스 변수 는 말 그대로 인스턴스가 생성될 때 만들어지는 변수. 인스턴스란 객체라고도 불리고 폴더라고도 불린다. 즉, 객체 변수라는 말이 인스턴스 변수와 같다고 할 수도 있다.

{
	int iv;

	void method() {
		int lv = 0;
	}
}

이렇게 있다고 치자. 여기서 int lv 는 인스턴수 변수이다. 변수의 종류는 선언된 위치에 따라서 변수가 바뀌는데, 지역변수를 제외한 변수들 중 static이 붙지 않은 것이 인스턴스 변수이다!

여기까지가 기본적으로 알려진 상식이다. 하지만 멋사 교육중엔 또 다른 이야기를 접했다.

인스턴스 변수는 객체 변수라고도 되기 때문에, 객체로써 활용도도 지닌다.

예를 들어보자.

public class Animal {
  ...
}
/* 객체와 인스턴스 */
public class Main {
  public static void main(String[] args) {
    Animal cat, dog; //  --- 1) '객체'

    // 인스턴스화
    cat = new Animal(); // 2)cat은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
    dog = new Animal(); // 3) dog은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
  }
}

Animal이라는 클래스에 catdog이라는 객체를 선언했다. (실체화는 아직 안된상태) — 1)

cat이라는 객체에 cat = new animal() 이라고 선언하고, 객체를 생성 및 실체화함. 이는 즉,

Animal 클래스에 인스턴스가 된다.

즉, 객체가 생성되면(클래스 일 때) 해당 클래스의 인스턴스 변수가 되는 것이고, 이 또한 함수 내에서 선언 및 생성한 것이기 때문에 변수 자체는 Stack 영역에 쌓이고, 리모컨을 쥔 상태로 실체는 Heap 영역을 가리키고 있는 것이다!!

Help!

공부저장소

profile
차곡차곡

0개의 댓글