2주차(1) - 목차
(출처: 뇌를 자극하는 Java프로그래밍 - 한빛미디어)
Primitive type
|
타입 |
할당되는 메모리 크기 |
default값 |
데이터의 표현 범위 |
정수형 |
byte |
1 byte |
0 |
-128 ~ 127 |
|
short |
2 byte |
0 |
-32,768 ~ 32,767 |
|
int |
4 byte |
0 |
|
|
long |
8 byte |
0l |
|
문자형 |
char |
2 byte (유니코드) |
'\u0000' |
0 ~ 65,535 |
실수형 |
float |
4 byte |
0.0f |
|
|
double |
8 byte |
0.0 |
|
논리형 |
boolean |
1 byte |
false |
true, false |
- default 값이 있기 때문에 Null 이 존재하지 않습니다. (초기화 할 경우, default값으로 자동 초기화)
- 실제 값을 저장하는 공간으로 Stack 메모리에 저장됩니다.
Reference type
타입 |
default값 |
할당되는 메모리 크기 |
클래스(Class) |
Null |
4 byte (객체의 주소값) |
인터페이스(Interface) |
Null |
4 byte (객체의 주소값) |
배열(Array) |
Null |
4 byte (객체의 주소값) |
열거(Enumerate) |
Null |
4 byte (객체의 주소값) |
- 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 가변적이기 때문에 Heap 메모리에 저장됩니다.
- 초기화 할 경우, Null로 초기화
Literal VS Constant
먼저, 리터럴과 상수 둘 다, 변하지 않는 고정된 값을 의미합니다.
상수는 변하지 않는 변수를 뜻하고, 그 데이터는 숫자가 올 수도 있지만 클래스나 구조체 같이 기본형에서 파생된 객체나 유도형같은 데이터를 넣을 수 있습니다.
값을 한번 입력하면 그 값을 다시는 바꿀 수 없는 것을 뜻합니다.
ex) final int DAY_OF_WEEK = 7;
상수를 만들기 위해서는 c에서는 const, Java는 final 지시자를 사용합니다.
메소드 영역에 저장됩니다.
또한 상수의 이름은 관습적으로 대문자와 언더스코어( _ ) 를 사용합니다.
리터럴은 데이터 그 자체를 의미합니다. (변수에 넣는 변하지않는 데이터)
int a = 1;
int 앞에 a는 변수이고, 1은 리터럴입니다. int 앞에 final을 붙이면 a는 상수가 됩니다.
즉, 1과 같이 변하지 않는 데이터(boolean, char, double, long, int, etc...)를 리터럴(literal)이라고 부릅니다.
보통 인스턴스(클래스 데이터)는 동적으로 사용되기 위해 생성되기 때문에 리터럴이 될 수 없습니다.
하지만 프로그래밍에서 객체 리터럴이라는 표현이 있습니다.
데이터가 변하지 않도록 설계한 클래스를 불변 클래스(immutable class)라고 하는데 해당 클래스는 한번 생성하면 객체 안의 데이터가 변하지 않습니다. 변할 상황이면 새로운 객체를 만들어줍니다.
자바 String, Color 같은 클래스가 그 예입니다.
따라서, 우리는 "abc"와 같은 문자열을 자바에선'객체 리터럴' 짧게는 '리터럴'이라고 표현하는 것입니다.
정리하자면 상수는 변하지 않는 변수를 의미하며(메모리 위치) 메모리 값을 변경할 수 없습니다.
리터럴은 변수의 값이 변하지 않는 데이터(메모리 위치안의 값)를 의미합니다.
보통은 기본형의 데이터를 의미하지만, 특정 객체(Immutable class , VO class)에 한에서는 리터럴이 될 수 있습니다.
2주차(2) 로 ...
'IT > Java' 카테고리의 다른 글
[JAVA 스터디][3주차] 산술,비트,관계,논리 연산자 + instanceof, 화살표(->),switch, assignment(=), 3항 연산자 (0) | 2020.11.27 |
---|---|
[JAVA 스터디][2주차_2] 변수 선언 및 초기화, 배열, 타입변환, 캐스팅, 타입추론 정리 (0) | 2020.11.21 |
[JAVA 스터디][1주차_2] javac 컴파일 및 실행, JIT컴파일러 정리 (0) | 2020.11.16 |
[JAVA 스터디][1주차_1] JVM, JDK, JRE, 바이트코드 총 정리 (0) | 2020.11.16 |
[Java] 클래스, 객체, 인스턴스 (0) | 2020.10.12 |