JAVA

자바 JAVA 변수의 타입 정리 (int, long, double, String 등) + 스택과 힙 메모리

수진97 2025. 11. 20. 21:43

안녕하세요~!

이번 포스팅은 자바 변수 타입에 대해서 정리하고, 스택과 힙 메모리에 대해서도 살펴보겠습니다.

 

1. 변수 타입 종류 2가지

1) 기본형 타입(Primitive Type)

- 실제 값을 Stack 메모리에 저장

- 표현 범위 벗어나면 오버플로우 혹은 언더플로우 발생

- 정수형, 실수형, 문자형, 논리형으로 구분

 

- byte, short, int, long, float, double, char, boolean 8종류

(모두 소문자로 시작하는 특징)

 

 

 

* 정수형 타입(byte / short / int / long)

- 부호 가짐. 소수가 없는 숫자

 

- byte(1바이트) : -128 ~ 127

- short(2바이트) : -32,768 ~ 32,767

- int(4바이트) : -2,147,483,648 ~ 2,147,483,647

- long(8바이트) : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

 

* 아래 코드 : 배열에 입력받은 정수를 모두 더하는 누적 계산 코드 (범위 : 0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)

최대 누적합 = 1,000,000 × 3,000,000 => 약 3 * 10¹² (int범위 초과)

백준 15596번 정수 N개의 합

 

 

 

* 실수형 타입(float, double)

- 부호, 지수부와 가수부로 구분되어 메모리에 저장

- 정수형 타입보다 표현 범위가 넓음

 

- float(4바이트) : +-3.40282347E+38 +-1.40239846E-45 (리터럴 타입 접미사 F or f)

- double(8바이트) : +-1.779769313486231570E+308 +-4.94065645841246544E-32  (리터럴 타입 접미사 D or d 생략 가능)

 

* 아래 코드 : 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력

백준 4344번 평균은 넘겠지

 

 

 

* 문자형 타입(char)

- 작은 정수 or 문자 하나를 표현

- 자바에서는 유니코드로 문자를 표현 => 총 65,536개 문자 제공

- char(2바이트) : 0 ~ 216

 

*  아래 코드 : 문자열 하나 입력받고 > 소문자 알파벳 전체 배열에 해당 문자열의 문자 각각의 위치값을 할당

각 문자의 아스키코드 값과 소문자 a(97) 아스키코드 값의 계산을 활용해서 인덱스로 활용한 예제

백준 10809번 알파벳 찾기

 

 

 

* 논리형 타입(boolean)

- 참(true) / 거짓(false) 표현(둘 중 하나)

- 기본 값은 false

- boolean(1바이트) : true / false

 

* 아래 코드 : 배열에서 X의 개수가 3개 이상일 경우 boolean 변수인 chk를 true로 바꾸고 break로 for문을 빠져나감.

 

 

 

 

2) 참조형 타입(Reference Type)

- 실제 값의 주소를 Heap 메모리에 저장

- 인스턴스를 참조하여 핸들링 => Heap 메모리에 생성된 인스턴스 Frame에 참조값 저장

- 표현 범위 개념이 아니므로 오버 / 언더플로우 없음.

 

- array(배열), enum(열거), class(클래스), interface(인터페이스) 4종류

기본형 타입과 달리 빈 객체를 의미하는 Null이 존재. 4개 타입 모두 기본값이 NULL이고, 메모리 크기는 4바이트

(모두 대문자로 시작하는 특징 - String, Integer, Long, List 등)

 

* 아래 코드 : List를 생성해서 역배치할 카드 배열의 일부를 List에 add하고, 다시 원배열에 할당

백준 10804 카드 역배치

 

 

3) 각 데이터 타입의 기본값

 

2. 스택(Stack) 메모리 VS 힙(Heap) 메모리

1) 스택(Stack) 메모리

- 메서드 내 지역 변수 저장소로 사용

- 메서드 호출과 함께 할당되고, 메서드가 끝나면 해제

- 속도가 빠르고 관리 단순

 

2) 힙(Heap) 메모리

- 객체와 인스턴스가 저장되는 영역

- 가비지 컬렉션의 대상(쓰레기 처리 대상)

- 메모리의 할당과 해제가 유동적

- 메모리 관리가 스택에 비해 복잡

출처 : https://webprogramcustom.tistory.com/50 [개발자이야기:티스토리]

 

 

1. 프로그램이 실행되고 main 메서드를 만나게 되면 stack 영역에 main 메서드 블록이 할당 

2. str1 = "oh" 문자열이 생성되어 힙 공간의 String pool 영역에 들어감

3. str2 = new String("wow") 생성자를 통해 생성된 str2는 String pool 영역이 아닌 따로 할당되며 stack에 참조를 가지고 있음

4. memory 변수명을 가진 Memory 객체가 생성되며 heap 영역에 할당, Memory 객체의 참조값을 가지고 있는 memory 변수stack 영역에 함께 할당 

5. memory 객체의 메서드를 호출함으로써 stack 영역에 새로운 method 블록이 할당 

6. method 함수 내 지역변수인 a는 스택에 저장되고, heap에는 할당되지 않음. String은 객체이기 때문에 str 변수인 "ha" 문자열은 heap 메모리에 할당됨.

7. 메서드의 마지막 종료( } ) 부분을 만나게 되면 stack에서 블록이 해제(pop)