유디의 공간정보·개발일기

H3-1. 0720_ Stack/Heap영역, 변수 본문

JAVA

H3-1. 0720_ Stack/Heap영역, 변수

55yudi 2021. 10. 31. 15:30
public class MyClassTest_0720 {

	public static void main(String[] args) {
		//class : 변수와 함수들의 집합
		MyClass_0716 my = new MyClass_0716(); //my : myclass 타입의 로컬변수
				//new MyClass : 생성자를 호출한 것이며, 힙에 객체가 생성된다.
				// = 이라는 할당연산자로 인해 힙에 생성된 객체의 주소가 my변수에 저장된다.
                
		int count = 500; //얘는 Stack영역에 direct로 바로 값이 할당(assign)되는데 
		my.count = 1000; //Myclass는 Stack영역에는 주소만 저장되고, Heap영역에 생성된 객체가 활용됨
        				//Heap 내부에 할당된 메모리 공간의 count라는 변수에 값을 저장한다.
                        
		MyClass_0716.name = "june"; //name : myclass 클래스 안에 있는 String타입의 클래스변수
		// !! 둘다 Stack영역에 할당되는건 똑같은데
        //    저장되는 데이터가 my는 생성된 객체의 주소값을, count는 다이렉트로 값을 저장할 수 있다는 게 차이점
	}
}

 

int count = 500;

     -> int 타입의 변수, stack 영역에 할당됨
my.count = 1000;

     -> Myclass 클래스 안의 int 타입의 변수

 

c.f. 메모리 영역

    - 스택 영역 : 함수의 매개변수(파라미터)와 지역변수가 저장됨

                     메모리를 할당받지만 생성된 메모리 객체에 주소를 저장할 수 있다.

    - 힙 영역 : 필요에 의해 동적으로 할당되는 영역

                   값을 저장


class MyClass_0716 {
	int count; //--> 객체변수 : 객체화하여 참조한다.
	static String name; // static : 클래스변수(공유변수)
	void print() {
		int amount;	//--> 로컬변수, 지역변수 라고 한다. print 함수안에서만 활성화
	}
	
	void write() {
		count = 500; //count : write함수에서 myclass안의 int타입의 변수를 '참조'한 것
		amount = 1000; //서로 다른 함수라서 amount 참조불가능
	}
	
	MyClass_0716(int count) { //--> 생성자임, 생성자는 return타입이 없어야 한다.
		this.count = count; //앞의 count는 객체변수, 뒤의 count는 매개변수(로컬변수)
		System.out.println("MyClass()");
	}
	
}

- 로컬변수(지역변수) : 서로 다른 함수이면 참조를 못하는 한 메서드 안의 변수

- static : 클래스 변수(공유변수)

- 객체변수 : 객체화하여 참조한다.

- class : 변수와 함수들의 집합

- package : 폴더, class를 모아둔 것, 이름은 소문자로 지정


printf("2x=y=10의 해, x=%d, y=%d 입니다."\n, x, y);

println("2x+y=10의 해, x=" + x + "y=" + y + "입니다.");

- printf 가 println보다 편리하다.

'JAVA' 카테고리의 다른 글

H3-3. 0720_CarTest 과제  (0) 2021.10.31
H3-2. 0720_ JAVA 코드  (0) 2021.10.31
H2. 0719_ JAVA 기초2, 응용 과제  (0) 2021.10.31
H1. 0716_ JAVA 기초  (0) 2021.10.31
7-2. 0713_ Hashmap  (0) 2021.10.24