-

[JAVA 문법 Step 5] - 클래스 자료형(Heap 저장) 본문

CS/JAVA

[JAVA 문법 Step 5] - 클래스 자료형(Heap 저장)

흣차 2021. 11. 26. 23:10
728x90
반응형

이번 시간에 배울 건 클래스 자료형의 Heap저장에 대해 배울 것입니다.

저번 시간에 배운 이 MyVar의 클래스 자료형은 사실 단점이 있습니다.

만약 나와있는 n1과 c1의 데이터 외에 다른 값을 넣으려면 일일히 값을 바꿔야 한다는 번거스러움이 있습니다.

자 만약 static을 이용했을 때 단점을 정리하겠습니다.

 1) 프로그램 시작전 부터 프로그램 종료시까지 존재하기 때문에 메모리 낭비

 2) 많은 데이터를 저장하고 싶을 땐 클래스 자료형을 여러 개 만들어야 하는 소모성

이렇게 있을 수 있습니다. 그러므로 우린 Heap을 이용하여 데이터를 정리해보겠습니다.

 

이 Static이라는 것은 정적인 상태입니다. 항상 메모리에 띄워놓고 미리 정해야하기 때문에 데이터가 많아질수록 과부하가 걸리기 쉬워서 정적인 static은 최대한 사용을 줄여야 합니다.

그러므로 우리는 동적 할당 메모리를 이용해야 합니다. 바로 Heap입니다.

자 이렇게 작성해보면 어떨까요?

 

이런식으로 말이죠. 

지금 static에는 VarEx05인 main함수가 실행되고 있습니다. 그리고 그 안에 new Note();이렇게 입력하게 되면 heap공간에 Note클래스가 가지고 있는 모든 데이터를 할당하란 뜻이 됩니다.(대신 static이라고 적힌 애들 제외)

이 때 new라는걸 사용하면 static을 제외한 모든 데이터를 새로 넣으란 뜻으로 해석됩니다.

바로 이런식으로 말이죠. heap안에 note를 위한 공간을 새로 만든 상태입니다. 그리고 note안에 price는 2000입니다.

이 new라는 것은 정말 좋은 구문입니다. 

프로그래밍에서 new가 실행되면 동적으로 메모리에 띄울 수 있습니다.

그럼 우리 이렇게 작성해볼까요? 

이 17번 구문에 int age = 25; 라고 입력해보면 이 age변수는 어디에 저장이 될까요?

main안에 있기 때문에 Stack에 저장됩니다. new Note는 heap에 저장되는 반면, main내부에서 선언된 변수 age는 Stack에 저장된다는 특이한 점을 지니고 있습니다. 정말 신기하죠???

그러면 이렇게도 생각할 수 있습니다.

Note안에 있던 price를 어떻게 출력할 수 있을까요?

age를 썼을때와 방법이 동일합니다.

이렇게 Note의 생성자 note1, note2, note3, 을 선언하여 손님이 올 때마다 new를 통해 Note클래스를 만든 후 이 note1의 price를 출력할 수 있습니다. 어떻게요? 바로 . 을 이용해서 할 수 있습니다.

이런식으로 말이죠. 처음 세개의 price 값은 당연히 2000이 출력됩니다.

그러나 아래의 3개는 note3의 price를 30000으로 변경했기 때문에 note1,note2는 그대로지만 note3의 값은 30000이 출력될 것입니다.

굉장히 편리하지 않나요???

이것이 Heap입니다.

이것으로 자바의 자료형은 전부 다 배웠습니다.

감사합니다.

728x90
반응형
Comments