목차

  1. Variable (변수)
  2. Primitive Type (기본 타입)
  3. 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언어에 이미 존재하고 있는 데이터 타입
  • 실제값 변수에 저장

메모리 사용 크기(정수타입): -2^(n-1) ~ 2^(n-1)-1

정수 타입

  • 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(깊은 복사) -> 추후 예정

element는 힙영역에 할당됨

 

Enum

- ...

 

 

 

 

 

 

 

Ref. 이것이 자바다 - 신용권의 Java 프로그래밍 정복

+ Recent posts