리그캣의 개발놀이터

[java] 프리미티브 타입 종류와 값의 범위 그리고 기본 값 본문

프로그래밍 언어/JAVA

[java] 프리미티브 타입 종류와 값의 범위 그리고 기본 값

리그캣 2020. 11. 21. 13:35

타이핑 하며 작성한 문서이기에 오타가 있을 수 있습니다. 오타나 잘못된것은 아래 댓글로 지적해주세요

타입이란?

타입이란 프로그램 안에서 취급하는 데이터 형식을 정의한 것이다.

예를 들어 아래는 a라는 데이터 형식을 String으로 정의, b라는 데이터를 Int라고 정의할 수 있다.
그렇게 되면 String과 Int는 타입이 되는 것이다.

String a = 'leaguecat';
Int b = 3;

자바는 강타입 언어로 분류 되며 thpe을 지정하는데, 강제성을 가지고 있다.
나는 이직하기 직장에서 python, javascript를 다루었는데 java에 비에 타입에 대한 강제성이 없다보니,
변수를 선언한 사람의 의도를 아는데 시간이 소요되었다.

정적(강타입) 언어, 동적(약타입) 언어란?

  • 정적 언어 : 컴파일러 검사 과정에서 형변환을 금지하고 컴파일을 중단하면 강타입
  • 동적 언어 : 형이 서로 다르면 경고 표시를 하는데, 자동으로 형변환을 시킴

프리미티브(privitive) 타입이란?

프리미티브 타입은 기본형으로도 분리며 논리형과 숫자형 문자열형 등의 기본적인 데이터 타입이다.

타입 설명 사이즈 값의 범위 기본값
byte 부호 있는 정숫값 8bit -128 ~ 127 0
short 부호 있는 정숫값 16bit -32768 ~ 32767 0
int 부호 있는 정숫값 32bit -2147483648~2147483647 0
long 부호 있는 정숫값 64bit 허허...-2의63승 ~ +2의63승-1 0L
char 유니코드 문자 16bit '\u0000' ~ '\uffff'/ 0~65535 '\u0000'
float IEEE754 부동소수점수 32bit 2-149 ~ (2-2-23)*2127 0.0d
double IEEE754 부동소수점수 64bit 2-1074 ~(2-2-52)*21023 0.0d
boolean 논리값 1bit true / flase의 두 값 false

int 프리미티브 타입을 갖고있는 변수는 12147483647의 데이터를 저장할 수 있다고 한다.

그렇다면 한번 볼까?? 내가 주로 사용하는 간편하게 자바를 돌릴 수 있는 웹사이트이다.

실행이 잘 된다.
그렇다면 값을 추가해보자.

// your code goes here
        int a = 2147483647+1;
        System.out.println(a);

아래와 같이 잘못된 값이 출력이 되는것을 확인 할 수 있다.
이는 , 프리미타입의 데이터 값의 범위를 잘 모르면 에러가 있는 코드를 짤 수 있다는 것을 나타낸다.

 stdout copy
-2147483648

그렇다면 이번에 boolean 값을 선언 후 그 값을 int에 넣어볼까?

Main.java:14: error: incompatible types: boolean cannot be converted to int
        int cat = league;
                  ^
1 error

위와 같이 에러가 발생한다. 이렇게 서로 잘못된 타입을 사용하는 경우는 컴파일 시에 에러로 보고된다.

그렇다면 타입을 지정하면서 얻는 이점은 뭐지?

정적 타입언어의 장점

  • 타입과 관련된 버그를 줄일 수 있다.
  • IDE를 사용함으로써 변수나 메서드의 이름이 자동 보완되어 효유적으로 프로그래밍을 할 수 있다.

ref

Comments