Java

변수와 객체와 메모리

joaa 2024. 1. 31. 22:30

변수(variable)는 무엇인가?

- '값'을 담을 수 있는 이름이 있는 '그릇'

ex) int age = 36;

 

변수는 값을 바꿔 담을 수 있다

 

애플리케이션은 어떻게 실행되는가?

- 애플리케이션: 일반 사용자가 사용할 기능을 제공하는, 컴퓨터가 실행할 수 있는 명령어들의 집합

- 메모리: 실행된 애플리케이션이 상주하는 곳

- CPU: 명령어를 실행하는 주체

 

runtime: 애플리케이션이 메모리 위에 올라와 있는 상태

 

메모리 구조

- 애플리케이션에 할당되는 메모리는 내부적으로 여러 영역으로 나뉨.

- stack 메모리: 함수나 메서드의 지역 변수(local variable)와 매개 변수(parameter)가 저장됨.

  함수나 메서드가 호출될 때 마다 스택 프레임이 쌓임.

- heap 메모리: 객체가 저장됨.

 

Stack, Heap 메모리

호출된 함수나 메서드가 파라미터로 객체를 전달받아서 객체의 상태를 변경하면

그 함수나 메서드가 종료된 이후에도 그 객체는 변경된 상태 그대로 남아있다. 

 

쓰레기 객체(garbage object)

접근이 불가능한 객체

자바나 파이썬은 쓰레기 객체를 알아서 처리해줌. 

public class Main {
	public static void main(String[] args){
    	Counter c = make();
    }
    
    public static Counter make() {
    	Counter c = new Counter(); //접근 불가
        return new Counter();
    }
}

public class Counter {
	private int state = 0;
    public void increment(){ state++; }
    public int get(){ return state; }
}

 

 

파이썬에서는 숫자도 객체임