
자바교육에서 사용되는 자바 기초 프로그래밍의 교안을 바탕으로 한 추가 설명입니다.
앞에서 자바에서 사용하는 기본 문법들을 계속 설명드렸다면,
알아두면 프로그래밍 할 때에 도움이 되는 자바의 데이터 타입에 대해 설명을 좀 해볼까 합니다.
프로그래밍으로 하는 가장 기본적인 작업은 바로 데이터를 처리하는 것입니다.
그 데이터를 잘 다루어만 하는데, 적절한 프로그래밍을 하려면 자바의 데이터 타입에 대한 이해가 되어 있어야 합니다.
자바의 데이터 타입은 크게 두 가지 - 원시타입과 참조타입 - 로 분류할 수가 있습니다.

기본타입(primitive type)에 해당하는 자료형은 이전에 한 번 설명한 적이 있습니다!
[에밀리쌤의 JAVA 기초] 자료형
자바교육에서 사용되는 자바 기초 프로그래밍의 교안을 바탕으로 한 추가 설명입니다.이전에 작성된 변수에 이은 자료형에 대한 설명입니다. [에밀리쌤의 JAVA 기초] 변수자바 기초 프로그래
classroom.emilylecture.com
이 때에도 제가 아주 기본적인 내용이니 그냥 외워버리는게 좋겠다고 이야기를 했었답니다.
프로그래밍은 외우는 것 보다 자연스럽게 체득하는게 더 필요하지만, 때에 따라 외워야 하는 부분들이 있는데요, 이런 자료형 같은 경우 처음 공부하시는 분이라면 외우는걸 추천드려요.
오른쪽에 있는 참조타입(reference type)은 아직 언급되지 않는 것들이긴 합니다.
참조타입에 대해서는 천천히 설명하기로 하고, 자바에서 자료형 처리를 어떻게 하는지 먼저 살펴보도록 하겠습니다.

데이터가 저장될 수 있는 공간으로 stack과 heap이 있습니다.
이 두 공간은 각기 다른 값을 담을 수 있도록 정의되어 있는 영역입니다.
기본타입으로 선언을 한 변수는 Stack에 값을 담기 위한 공간을 마련하고, 그 안에 저장하게 됩니다.
(제가 앞에서 변수에 대한 설명했던 것 기억나시나요? 그 변수가 시스템 기준으로 처리되는 걸 설명하고 있습니다!)
참조타입으로 선언을 한 변수는 Heap에 공간을 마련해서 값을 담을 준비를 하고, 그 주소를 stack에 값으로 가지게 됩니다.
이처럼 직접 값을 담고 있지 않고, 메모리 주소를 가지고 있으면서 그 메모리 주소가 가리키는 곳의 값을 참조하여 가져온다는 의미로 참조타입 이라고 하게 됩니다.
그림에서도 보면 일반 정수형이나 실수형으로 정의한 total과 price는 stack에 값이 담겨져 있고, String 객체로 선언된 변수 name과 subject는 heap에 값을 담고 담겨진 위치의 주소를 변수이름이 정의되어 있는 stack에 담는 것을 설명하고 있습니다.
값을 가지고 있고, 주소를 가지고 있다는 것이 어떻게 다른 것인지 그림으로 표현한 것이고, 그 차이를 구분하실 수 있어야 합니다.
우리가 프로그램을 컴파일 하면 JVM 이 동작을 하게 됩니다. 그 JVM의 메모리 구조를 그림으로 정리해보았는데요,
(출처 : https://hongsii.github.io/2018/12/20/jvm-memory-structure/)

프로그램을 실행하기 위해 컴파일을 하게 되면, 컴파일 과정 중에 필요한 메모리 영역을 구성하게 됩니다.
JVM이 종료되면 해당하는 영역도 사라지게 됩니다.
메모리 영역은 Thread, Heap, Method Area로 구분되는데, 부연 설명하자면 아래와 같이 할 수 있습니다.
그 중에서 전체 쓰레드가 공유하는 영역은 Heap과 Method Area 입니다.
- Heap
클래스의 인스턴스(객체)와 배열이 할당되는 영역입니다.힙 영역에서 생성된 객체와 배열은 스택 영역의 변수나 다른 객체의 필드에서 참조합니다. - Method Area
프로그램 실행 중 클래스가 사용되면, 클래스의 변수, 메소드 정보, static 변수, 메소드와 생성자의 바이트코드, 각 클래스, 인터페이스에 관련된 런타임 상수풀이 저장됩니다. - Threads
- PC(Program Counter) Register
Thread마다 존재하며, Thread가 실행되면 실행되는 메소드입니다.
현재 수행 중인 JVM명령의 주소이고, Thread가 생성될 때마다 생기는 공간으로 Thread가 어떠한 명령을 실행하게 될지에 대한 부분을 기록합니다. -
JVM Stack
쓰레드마다 존재하며, 쓰레드 생성 시 같이 생성됩니다. Stack Frame - 함수가 호출될 때, 그 함수만의 스택 영역을 구분하기 위하여 생성되는 공간. 함수와 관계되는 지역 변수, 매개변수가 저장되며, 함수 호출 시 할당되며, 함수가 종료되면서 소멸 - 을 저장합니다.
메소드를 호출할 때마다 Frame을 추가(push)하고 메소드가 종료되면 해당 Frame을 제거(pop)하는 동작을 수행합니다. -
Native Method Stacks
자바 외의 언어로 작성된 네이티브 코드를 위한 스택입니다.
(Java Native Interface를 통해 호출하는 C/C++ 코드를 수행하기 위한 스택)
- PC(Program Counter) Register
여기까지만 봤을 때에는 단어가 복잡하고 어렵게 느껴지실 수 있지만, 자바 프로그래밍 공부를 계속하다가 다시 봤을 때 더 이해가 되실 거에요. 처음 보는 내용이라면 이렇게 구성되는구나로 이해하시는게 좋고, 복습으로 보고 계시다면 다시 구분지어 잘 정리하시면 됩니다.

그리고 만약, 코딩테스트를 대비해야겠다고 생각하고 계시다면, 데이터 타입에 대한 개념이 잘 있어야 알고리즘과 관련된 자바 관련 문제풀이를 더 유연하게 하실 수가 있습니다. 그래서 이 부분은 꼼꼼이 이해해 두시는게 필요합니다!
'에밀리쌤의 기초교실 > JAVA 프로그래밍' 카테고리의 다른 글
| [에밀리쌤의 JAVA 기초] 자바 함수 정리 (2) | 2024.05.29 |
|---|---|
| [에밀리쌤의 JAVA 기초] 조건문과 반복문(3) (0) | 2024.05.20 |
| [에밀리쌤의 JAVA 기초] 조건문과 반복문(2) (0) | 2024.05.13 |
| [에밀리쌤의 JAVA 기초] 조건문과 반복문(1) (3) | 2024.04.30 |
| [에밀리쌤의 JAVA 기초] 여러가지 연산자(2) (2) | 2024.04.26 |
댓글