자바의 자료형_기본 자료형

Minji Lee·2025년 3월 19일
0

JAVA

목록 보기
5/13

변수와 메모리

변수는 컴퓨터 내부의 메모리 공간에 저장된다.
ex) int level = 10; → 4바이트(int형) 크기의 메모리 공간 이름(변수이름)은 level이고, 이 공간에 값 10을 넣는다.


자바의 자료형

자바의 자료형
1. 기본 자료형
2. 참조 자료형

기본 자료형

자바 라이브러리에서 기본으로 제공하는 자료형으로, 얼마만큼의 메모리를 어떻게 사용할지 미리 정해져 있음!

정수형문자형실수형논리형
1바이트byte--boolean
2바이트shortchar--
4바이트int-float-
8바이트long-double-

1. 정수 자료형

자료형바이트 크기수의 범위
byte127-2^7 ~ 2712^7-1
short2215-2^15 ~ 21512^15-1
ing4231-2^{31} ~ 23112^{31}-1
long8263-2^{63} ~ 26312^{63}-1
  // 정수 자료형
  // byte형
  byte a = 1;
  // short형
  short b = 2;
  // int형
  int c = 3;
  // long형
  long d = 4L; // 또는 1l;

  // 서로 다른 자료형의 정수끼리 더한 경우
  // 정수 값 연산할 때 4바이트를 기본 단위로 사용하므로 int형으로 저장됨
  System.out.println(a+b);

2. 문자 자료형

어떤 문자를 컴퓨터 내부에서 표현하기 위해 특정 정수 값으로 정하자고 약속함!
ex) 아스키 코드 → A의 아스키 코드 값은 65
인코딩: 문자를 정해진 코드 값으로 변환하는 것
디코딩: 코드 값을 다시 문자로 변환하는 것

문자(char)와 문자열(String)
문자는 작은따옴표('') 사용하고, 문자열은 큰따옴표("") 사용함!
문자열은 기본 자료형으로 표현할 수 없고, 문자열 끝에는 항상 널 문자(\0)가 있음

// 문자형
char ch1 = 'A';
System.out.println(ch1); // A
System.out.println((int)ch1); // 65

char ch2 = 66;
System.out.println(ch2); // B

int ch3 = 67;
System.out.println(ch3); // 67
System.out.println((char) ch3); // C
char ch1 = '한';
char ch2 = '\uD55c'; // 유니코드 값 사용

System.out.println(ch1); // 한
System.out.println(ch2); // 한

// 문자형 변수에 숫자 저장하기
int a = 65;
int b = -66;

char a2 = 65;
// char b2 = -66; // 문자형 변수에 음수 넣으면 오류 발생!

System.out.println((char)a); // A
System.out.println((char)b); // ? // 음수 값을 char형으로 출력하면 알 수 없는 문자라는 의미로 ? 출력
System.out.println(a2); // A

3. 실수 자료형

float형: 부호 1비트+지수부 8비트+가수부 23비트 = 총 32비트(4바이트)
double형: 부호 1비트+지수부 11비트+가수부 52비트 = 총 64비트(8바이트)
자바에서는 double형이 기본으로 사용됨!

double dnum = 3.14;
float fnum = 3.14F; // float임으로 표시하기 위해 F나 f 붙여줌

System.out.println(dnum); // 3.14
System.out.println(fnum); // 3.14

4. 논리 자료형

변수의 참, 거짓의 값을 나타내는 데 사용됨

boolean isMarried = true;
System.out.println(isMarried); // true

자료형 없이 변수 선언하기(Java 10부터 생긴 문법)

자료형을 쓰지 않고 변수 사용 가능! → 지역 변수 자료형 추론

주의점!
1. 한 번 선언한 자료형 변수를 다른 자료형으로 사용 X
2. var로 자료형 없이 변수를 선언하는 방법은 '지역 변수'만 가능!

var i = 10; // int i = 10으로 컴파일됨
var j = 10.0; // double j = 10.0으로 컴파일됨
var str = "hello"; // String str = "hello"로 컴파일됨

System.out.println(i);
System.out.println(j);
System.out.println(str);

str = "test"; // 다른 문자열 대입은 가능
// str = 3; // String으로 이미 사용되었기 때문에 정수값 넣을 수 없음!

상수와 리터럴

상수: 항상 변하지 않는 값 → 자바에서 상수는 final 예약어 사용해서 선언

  • 상수 이름은 주로 대문자 사용하고, 여러 단어 연결할 경우 _ 기호를 사용하면 보기 좋음
  • 한 번 선언한 상수는 변하지 않으므로 선언과 동시에 값 지정해주는 게 좋음
final int MAX_NUM = 100; // 선언과 동시에 초기화
final int MIN_NUM;

MIN_NUM = 0; // 사용하기 전에 초기화해야함!

System.out.println(MAX_NUM);
System.out.println(MIN_NUM);

// MAX_NUM = 1000; // error 발생

리터럴: 프로그램에서 사용하는 모든 숫자, 문자, 논리값을 일컫는 말
즉, char ch = 'A'; int num = 10; final double PI = 3.14; 에서 'A', 10, 3.14를 리터럴 혹은 리터럴 상수라고 함

  • 프로그램이 시작할 때 시스템에 같이 로딩되어 특정 메모리 공간인 상수 풀에 놓임
  • 숫자가 변수에 대입되는 과정은 일단 숫자 값이 어딘가 메모리에 쓰여 있고, 이 값이 다시 변수 메모리에 복사되는 것!

형 변환

서로 다른 자료형을 연산할 때 하나의 자료형으로 통일한 후 연산을 해야 함! 이때 형 변환이 이루어짐!

1. 묵시적 형 변환(자동 형 변환)

  • 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환은 자동으로 이루어짐
  • 덜 정밀한 자료형에서 더 정밀한 자료형으로 형 변환은 자동으로 이루어짐

// 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환 자동으로 이루어짐
byte bNum = 10;
int iNum = bNum; // byte형 변수 bNum 값을 int형 변수 iNum에 대입

// 덜 정밀한 자료형에서 더 정밀한 자료형으로 대입하는 경우
int iNum2 = 20;
float fNum = iNum2; // float으로 자동 형 변환

// 연산 중 자동으로 변환되는 경우
double dNum = iNum + fNum; // double로 자동 형 변환

2. 명시적 형 변환(강제 형 변환)

  • 바이트 크기가 큰 자료형에서 작은 자료형으로 대입하는 경우
  • 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우
// 바이트 크기가 큰 자료형에서 작은 자료형으로 대입하는 경우
// 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우
double dNum1 = 1.2;
float fNum2 = 0.9F;

int iNum3 = (int)dNum1 + (int)fNum2;
int iNum4 = (int)(dNum1+fNum2);
System.out.println(iNum3);
System.out.println(iNum4);

0개의 댓글