[Java] 자바 데이터 타입, 변수 그리고 배열

한호성·2024년 5월 16일
0

자바_기본개념

목록 보기
2/3

Introduction

자바 기본기 다시 정리하면서, 놓쳤던 부분을 정리하고자 합니다.
백기선 님의 자바 온라인스터디 2주차 내용입니다.

Index

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 타입 추론, var

Primitive Type 종류와 값의 범위

정수형

byte: / 1byte / -128 ~ 127
short: / 2byte / -32768 ~ 32767
int: / 4byte / 약-21억 약 21억
long: / 8byte / -2^63-1 ~ 2^63 - 1

실수형
float: /4byte / 32비트 부동소수점 IEEE754 기준 범위
double: / 8byte / 64비트 부동소수점 IEEE754 기준 범위

이외의 것들

boolean: 1bit / true,false
char: 2byte / 유니코드 문자
(하지만, 모든 유니코드를 표현할 수 없음.. 값이 나라의 언어들 + 이모지 등등.. 너무 많아졌기 때문에..넘어가는 경우에는 String을 사용해서 표현 하도록하자.)

Primitive Type & Reference Type의 특징

기본 자료형이기 때문에, 값을 복사해서 사용합니다. 후에 나오는 Reference Type과는 다르게 동작함.
(Reference Type은 c언어의 Pointer(메모리 주소를 가르키는 변수)개념이라고 생각하면 됨.)

Primitive Type은 호출 스택 프레임에 값을 저장하고,
Reference Type은 heap memory의 주소를 저장해서, 그 주소를 찾아가 값을 가져오는 방식이다.
(이 차이점을 모른다면, 코딩할 때 굉장히 헷갈린다.)

unsigned 형이 없어서 생기는 아쉬움

1 배열의 index, 혹은 사람 나이 같은 부호없는 자료형이 필요할 , 값을 한번 더 검사해줄 필요가 있음
2 color 저장할 때, 보통 RGB 1byte씩 3byte가 필요하지만, 자바는 부호없는 byte가 없어서 255까지 표현을 못한다 -> short형 사용해야함.

리터럴 종류들

정수 리터럴

int: 아무것도 붙이지 않고 변수 선언.
2진수를 표현하는 경우 Prefix로 0b
8진수를 표현하는 경우 Prefix로 0
16진수를 표현하는 경우 Prefix 0x

long: l ,L 을 숫자뒤에 붙여줘야함. (생략 가능하나, int 범위보다 큰 수일 경우 컴파일 오류)

부동소수점 리터럴

float: F,f
double: D,d -> 생략해서 사용하도록 하자

문자,문자열 리터럴

문자 리터럴 : 작은 따옴표
문자열 리터럴 : 큰 따옴표
유니코드 표현 : \unnnn ( 16진수로 표현)

기타 리터럴

null

  • 참조형에 사용 가능한 리터럴
  • c의 널 포인터와 같은 개념

"_"
큰 숫자의 가독성을 높이기 위해 (쉼표처럼 사용)
ex) 1000000000 == 1_000_000_000

타입 변환, 캐스팅 그리고 타입 프로모션

Type Casting

타입 캐스팅은 크기가 더 큰 자료형을 더 작은 자료형에 대입하는것을 의미한다.
(표현가능한 byte 개수가 달라짐에 따라, bit pattern이 달라지기 때문에, 손실이 생길수도 있다.)

int a = 10;     
byte b = (byte)a;
System.out.println(b); //  -> 10
위의 경우는 사용한 int에서 사용한 byte수가 1byte를 넘지 않아서 손실이 없다

Type Promotion

크기가 더 작은 자료형을 더 큰 자료형에 대입하는 것이다.
(손실이 생기지 않고, 명시적으로 표현하지 않아도 문제가 없다)

byte a = 10;
int b = a;
System.out.println(b); //  -> 10

타입 추론, var

타입추론이란 변수의 타입을 명시적으로 적어주지 않아도, 컴파일러가 알아서 해당하는 자료형을 찾아서 사용하도록 하는 방법이다. (대표적인 타입추론 언어는, 자바스크립트, 코틀린, 스위프트 등이 있다고한다..)

자바 10 버전 이후로부터 var 키워드를 통한 타입추론이 가능하다.

var는 키워드가 아니다. 어떠한 타입도 아니고, 클래스에서 사용하는 예약어도 아니다.
컴파일러가 바이트 코드를 변경할 때, var에는 타입이 명시된다.

var의 특징을 적어보도록 하자.

  1. var는 초기화 없이 사용할 수 없다.
  2. var 타입 변수에는 null이 들어갈 수 없다.
  3. var타입은 로컬 변수에만 선언이 가능하다.
  4. Lambda Expression에는 명시적인 타입을 넣어줘야 한다.
  5. 배열을 선언할 때, var 대신 타입을 명시해줘야 한다.

현재 내 상태에서는, 향상된 for문 돌릴 때에만 사용하는거 같다. 사용법에 대해서는 차차 생각해보도록 하자.

Reference

https://github.com/whiteship/live-study/issues/1
https://velog.io/@jaden_94/2%EC%A3%BC%EC%B0%A8-%ED%95%AD%ED%95%B4%EC%9D%BC%EC%A7%80
https://catch-me-java.tistory.com/19

profile
개발자 지망생입니다.

0개의 댓글