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 자료형
'자바 > 자바 정복' 카테고리의 다른 글
자바 - 출력 (0) | 2023.07.05 |
---|---|
자바 - 기본 구조, 주석, 클래스(외부 클래스 내부 클래스) (0) | 2023.07.04 |
자바 - 자바프로젝트 생성 및 실행 (0) | 2023.07.02 |
자바 - 자바개요 (0) | 2023.07.02 |
자바 - JDK 다운로드 및 환경설정, 이클립스 다운로드 및 설정(글씨크기 조정, 인코딩 설정, JRE 버전과 JDK 버전 설정) (1) | 2023.07.01 |