목차
- Variable (변수)
- Primitive Type (기본 타입)
- Reference Type (참조 타입)
1. Variable (변수)
하나의 값을 저장할 수 있는 메모리 공간
int score; // 공간 할당
score = 90; // 값 저장
Literal: 직접 입력된 값
- 정수 리터럴
- 10진수(기본), 8진수(0으로 시작), 16진수(0x or 0X로 시작)
- byte, char, short, int, long - 실수 리터럴
- ex) 3e6 // 3*10⁶ (e or E: 10의 지수)
- float, double - 문자 리터럴
- 작은 따옴표(‘’)로 묶은 텍스트, 하나의 문자 리터럴
- escape character: 역슬래쉬(\)가 붙은 문자 리터럴 ex) ‘\t’, ‘\n’ …
- char - 문자열 리터럴
- 큰 따옴표(“”)로 묶은 텍스트
- String - 논리 리터럴
- boolean
2. Primitive Type (기본 타입)
- Java언어에 이미 존재하고 있는 데이터 타입
- 실제값 변수에 저장
정수 타입
- char Type
- 2 byte
- 자바는 모든 문자를 유니코드(Unicode)로 처리 (Unicode:세계 각국의 문자들을 코드값으로 매핑한 국제 표준 규약)
- 0 ~ 127까지는 ASCII 문자 할당
- 음수 저장 안됨
char var1 = 'A' // 유니코드 0x0041 -> 2진수: 00000000 01000001
char var2 = 65;
char var3 = '\u0041'; // '\u + 16진수값'
- int Type
- 변수에 어떤 진수(10,8,16진수)를 입력하더라도 동일한 값이 2진수로 변환되어 저장 - long Type
- 수치가 큰 데이터를 다루는 프로그램에서 필수적
- 변수 초기화: 정수값 뒤에 l 또는 L 붙임.
실수 타입
- float과 double의 메모리 사용 크기는 각각 int와 long의 크기와 같지만, 정수 타입과는 다른 저장 방식 때문에 훨씬 더 큰 범위의 값을 저장할 수 있음.
- 자바의 실수 리터럴의 기본 타입: double
타입 변환 (Type Casting)
- 자동 타입 변환 (promotion) : 큰 크기 타입 <- 작은 크기 타입 (메모리 크기)
- byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
float가 뒤인 이유?! 표현할 수 있는 값의 범위가 float이 더 크기 때문
- char type의 경우 int type으로 자동 변환.
but! 음수 저장이 안되므로 byte타입은 자동 변환 안됨.
char charValue = 'A';
int intValue = charValue; // 65 저장
byte byteValue = 65;
char charValue2 =byteValue; // compile error
- 강제 타입 변환
자바는 코드에서 데이터 값을 검사하기 위해 boolean과 char을 제외하고 모든 기본 타입에 대해 최대값과 최소값을 상수로 제공
// 값의 손실이 발생하는지 체크
if ( (i<Byte.MIN_VALUE) || (i>Byte.MAX_VALUE)) {
// 값 손실 발생
}
3. Reference Type (참조 타입)
- Array, Enum, Class, Interface
- 변수(스택)에 메모리 번지를 저장 -> 실제 값은 힙영역에 저장
- 참조 변수에서의 ==, != : 주소값 비교 연산
- null: 힙 영역의 객체를 참조하지 않는다 (참조 타입 변수에서 사용)
NullPointerException: 참조타입 변수가 null을 가지고 있을 경우(사용할 수 없는 경우) 접근할 때 생기는 오류 - new 연산자 (객체 생성 연산자): 힙영역에 새로운 객체를 만드는 연산자
참조변수의 형변환
- Up-casting: 조상 <- 자손 : 자동형변환 (생략 가능)
- Down-casting: 조상 -> 자손 : 강제 형변환
String
- 자바는 문자열 리터럴이 동일하다면 String객체를 공유
String name1 = "신용권";
String name2 = "신용권";
Array
- 다차원 배열:
int[][] a = new int[2][3] // 2(행)*3(열) 배열
int a[][] = {{1,2,3,4,5}, {11,12,13,14,15}, {21,22,23,24,25}}; // {{ -> 차원의 개수 - element별로 다른 길이의 배열을 가질 수 있음.
int a[][] = {{1,2}, {1,2,3}}; - 배열 복사
System.arraycopy(a, 1, b, 0, a.length-1); // SourceArray, SPosition, TargetArray, TPosition, length - Shallow copy(얕은 복사) vs. Deep copy(깊은 복사) -> 추후 예정
Enum
- ...
Ref. 이것이 자바다 - 신용권의 Java 프로그래밍 정복
'Java' 카테고리의 다른 글
[Java] Collection framework (0) | 2019.08.29 |
---|---|
[Java] 추상 클래스(abstract class)와 인터페이스(interface) (0) | 2019.08.29 |
[Java] 상속 (inheritance) 정의 / final 클래스와 메소드 / instanceof 연산자 (0) | 2019.08.28 |
[Java] 클래스: 구성 멤버 / final / 접근제한자(access modifier) (0) | 2019.08.27 |
[Java] JDK, JVM 용어 정리 및 프로그램 실행 단계 (0) | 2019.08.27 |