자바 - 자료형

2023. 7. 7. 20:54자바/자바 정복

반응형

자료형 의미

- 저장할 수 있는 값의 형태를 지정

- Java 프로그램의 모든 변수/상수 자료형 선언 후 사용가능

- 선언만 하면 텅빈 공간만 만들어진다. 변수에 값을 대입하면 그 공간에 값이 저장된다.

 

변수 : 변할 수 있는 수

- 변수를 선언하면 공간이 생기고 그 안에 들어갈 값은 변할 수 있다.

ex)

int a = 4;

a = 3;

 

상수 : 항상 똑같은 수

- 한번 값이 지정되면 변하지 않음

ex)

final int k = 11;

 

변수이름 선정(안지키면 에러)

- 영문대소문자 및 한글 사용 가능

- 특수문자는 두 가지만 사용가능 ( _ , $)

- 숫자 사용가능 하지만 첫번째로 올 수 없음

- 자바에서 사용중인 키워드 사용 불가 

 

변수이름 선정(안지켜도 에러 안남)

- 변수의 이름은 소문지로 시작

- 두개 이상의 단어가 결한한 경우 새 단어는 대문자로 시작

 

변수 생존기간

- 변수는 자신이 선언된 중괄호 ' { '  의 쌍이 되는 닫힌 중괄호 ' } ' 안에서만 사용 가능

 

자바 자료형

- 기본 자료형 8개( boolean, byte, short, int, long, float, double, char) > 이름은 소문자로 시작

- 참조 자료형( 배열 , 열거, 클래스, 인터페이스) > 직접 정의할 수 있어 무한개가 존재, 이름은 대문자로 시작

 

부울대수

- boolean > 1바이트(7bit는 사용하지 않음, 최소단위가 1byte이기 때문)

 

정수

- byte  > 1바이트

- short > 2바이트

- int     > 4바이트

- long  > 8바이트

 

실수

- float     > 4바이트(대략 소수점 7자리 정도의 정밀도)

- double > 8바이트(대략 소수점 15자리 정도의 정밀도)

- 지수와 가수를 이용해 넓음 범위 저장 가능

 

문자(정수)

- char > 2바이트

- 정수는 양수와 음수를 표현하지만 문자는 음수를 표현할 필요가 없으니 양수만 표현

- 똑같은 2바이트인 short는 -2^15 ~~ 2^15 - 1 범위를 갖지만 char는 양수만 표현하니 0~ 2^16 -1  이 된다.

- 작은 따옴표(' ') 사용

- 유니코드 값을 '\u16진수코드'를 이용해 입력가능

- 정수값(10진수 또는 16진수) 직접 입력 가능, 정수를 바로 메모리에 저장

- 문자가 출력될때 메모리에 저장된 정수값이 유니코드표에서 각 정수가 어떤 문자로 매핑되는지 봐서 해당 문자가 출력됨

ex)

char a = 'A'   >>>  'A'이라는 문자를 스택메모리에 저장해줄때 이진수로 저장해야하는데 A는 65로 정해둠

char a = '1' >>> 유니코드표를 보면 49로 메모리에 저장

char a = 1 >>> 1이 그대로 메모리에 저장  

 

정수앞에 숫자 0을 쓰면 8진수

정수앞에 0x를 붙이면 16진수(숫자0과 알파벳 x)

정수 앞에 0b가 붙으면 2진수(숫자 0과 알파벳 b)

 

 

비트

- n개의 비트로 표현할 수 있는 가지수는 2의 n승이다.

- 1바이트는 8비트 따라서 1바이트는 2의 8승가지를 표현할 수 있다. 정수를 256개를 표현할 수 있다.

- 1바이트의 반인 128을 음수에 주고 나머지 128가지를 양수쪽에 주면 범위가 -128 ~ 127가지가 된다. 양수의 128가지 중에서 0도 포함되니 127까지이다.

- n개의 비트로 표현하는 정수의 범위는 -2의 n-1승에서 2의 n-1승 에다가 1을 뺀 범위이다. (-2^(n-1) ~~ 2^(n-1) - 1 )

 

 

 

메모리 구조

- class 영역(static 영역, final 영역, 메서드영)

- stack 영역

- heap 영역

 

기본자료형과 참조자료형 차이점

- 기본자료형은 stack 메모리에 저장

- 참조자료형은 heap 메모리에 저장

> 기본자료형은 stack 메모리에 그대로 값이 저장되는데 참조자료형은 실제 값이 heap 메모리에 저장되고 저장된 heap 메모리의 주소값을 stack에 저장한다.

 

 

타입변환

1) 리터럴 타입

- 자료형 없이 값으로 입력하는 경우 값의 형태에 따라 자료형으로 자동 변환됨( 정수값은 int 실수값은 double 로 저장)

- int 보다 작은 byte/short에 대입되는 int 값은 각각 byte, short로 인식

- 작은 타입에서 큰 타입으로 변환하는 것은 자동으로 타입 변환된다.

ex) 

double a = 5.8; >>> 5.8은 실수 이니까 자동으로 double로 저장한다.

float c = 1.2 >>> 1.2는 실수 이니까 자동으로 double로 저장한다. 근데 부등호 왼쪽이 float 타입이니까 에러가 발생한다.

long k = 4; >>> 4는 정수이니까 int로 저장된다. 부등호 왼족은 long이다. 근데 에러가 나지 않는다. 왜냐하면 long이 int보다 큰 타입이므로 컴파일러가 4를 자동으로 long타입으로 업캐스팅 해준다.

 

2) 변환 방법

- 타입변환 대상 앞에 (자료형) 표기

ex)

int a = (int)3.5   >>>  3

double x = (double) a >>> 3.0

byte z = (byte) 5.3 >>> 5

short c = (short)11 >>> 11

- long형은 숫자 뒤에 L(ㅣ)표기

- float형은 숫자 뒤에 F(f) 표기

ex)

long d = 11L

float c = 3.4F

- 자동타입변환

>>> 값의 표현 범위가 넓은 쪽으로 저장되는 경우

>>> int보다 작은 자료형(byte, short)에 정수를 입력하는 경우(단, 값의 범위 값만 허용)

>>> 컴파일러가 자동으로 타입변환 수행(타입변환 생략 가능)

- 수동타입변환

>>> 값의 표현 범위가 좁은쪽으로 저장되는 경우

>>> 값의 손실이 발생할 수 있음

>>> 직접 표기하지 않으면 오류 발생

3) 연산

- 동일한 자료형끼리만 연산 가능

- 다른 자료형끼리 연산을 수행하는 경우 자동타입변환이 수행되어 연산

ex)

byte 자료형 + short 자료형 = int 자료형

byte 자료형 + int 자료형 = int 자료형

short 자료형 + long 자료형 = long 자료형

int 자료형 + float 자료형 = float 자료형

long 자료형 + float 자료형 = float 자료형

float 자료형 + double 자료형 = double 자료형

 

 

 

 

 

 

 

 

반응형