Java

상수의 데이터 타입

토픽 Java

상수

변수는 변하는 값을 의미한다. 그 대척점에 있는 것이 상수인데, 상수(常數, constant)란 변하지 않는 값을 의미한다. 아래의 코드 중에서 a는 변수이고, 1은 상수이다.

int a = 1;

변수 a는 대입 연산자(=)에 의해서 1이 되었다. 아래 예제를 보자.

1 = 3;

컴파일이 되지 않는다. 1은 3이 될 수 없기 때문이다. 1은 1이고, 3은 3이다. 고유한 값을 가지고 있고, 그 값을 변경 할 수 없는 데이터 타입을 상수라고 한다. 

상수와 데이터 타입

실수의 표현

앞 수업에서 변수를 만들 때 데이터 타입을 지정했었다. 그것은 변수가 메모리를 얼마나 사용할 것인가를 지정하는 의미를 갖는다. 그렇다면 변수에 저장되는 상수도 데이터 타입이 있을까? 물론 있다. 아래 코드는 오류를 발생한다. (실행)

int a = 2.2;

2.2는 실수다. 실수를 정수 타입의 변수 a에 저장하려고 했기 때문에 오류가 발생한 것이다. 이것은 변수와 똑같이 상수도 데이터 타입이 있다는 것이다. 그럼 위의 예에서 사용한 상수 2.2의 데이터 타입은 무엇일까? float일까? double일까?

아래 코드를 보자. (실행)

float a = 2.2;

"Type mismatch: cannot convert from double to float"

위와 같은 에러가 발생한다. 즉 2.2는 float가 아니라는 뜻이다. 예제를 조금 바꿔보자. (실행)

double a = 2.2;

오류가 사라졌다. 자바에서 실수형 상수는 double의 데이터 타입이다. 그럼 float 형 변수에는 어떻게 값을 대입할 수 있나? 2.2가 float 형이라는 것을 분명하게 명시해주면 된다. (실행)

float a = 2.2F;

F는 이 기호 앞의 숫자가 float 데이터 타입이라는 것을 명시적으로 표현하는 방법이다.

정수의 표현

그럼 데이터 타입이 정수인 상수는 어떤 데이터 타입이 될까? int다. 아래 예제는 오류가 발생할 것이다. (실행)

int a = 2147483648;

int의 최댓값인 2147483647 보다 1 많기 때문이다. 코드를 고쳐보자. (실행)

long a = 2147483648;

"The literal 2147483648 of type int is out of range"

변수는 long 타입이지만 이 변수에 대입되는 상수가 여전히 int 타입이기 때문에 int로 표현할 수 있는 최대 숫자를 여전히 초과하고 있다. 아래와 같이 코드를 변경해보자. (실행)

long a = 2147483648L;

이제 오류가 해결되었다. 상수도 long 타입이 되었고, 그 상수를 담을 변수도 long 타입이 되었다. 그럼 int 보다 작은 데이터 타입인 short나 byte는 어떻게 해야 표현할 수 있을까? (실행)

byte a = 100;
short b = 200;

이번에는 오류가 발생하지 않는다. 자바는 byte와 short 타입에 대해서는 int 형을 허용하기 때문에 오류가 발생하지 않는다.

댓글

댓글 본문
  1. 캥거루
    24.07.24 학습완료
  2. ilovecat
    240421
  3. 박승규
    24.2.26 학습완료
  4. 24.01.04 완료
  5. 모멋
    23.07.09 학습 완료.
  6. 오늘도긍정적으로
    2023년 05월 24일 수요일 학습완료!
  7. senny
    20230426 완료
  8. 코딩어린이
    완료
  9. 서달
    20230307
  10. 완료
  11. coster97
    .
  12. wwwqiqi
    완료
  13. 하앙
    완료
  14. 람보
    2022.8.15 완료
  15. imagine
    22.8.14
  16. 너굴
    220806
  17. 치키티타
    220614
  18. eunbee
    22-05-12
  19. 고액연봉
    형변환 재밌어용~
  20. 20220423
  21. 김은희
    20220330 완료
    데이터타입 전강의 다시보기
  22. aesop0207
    22.03.12. Sat
  23. float double 차이? 왜 2.2는 float이 아닌 double인지? 정밀도의 차이 - 나중에 더 알아볼 것
    상수 그대로 써있는 것은 기본적으로 정수 int / 실수 double 이라고 보면 됨
    다른 데이터타입을 쓰는 경우에는 뒤에 L, F 붙여줄것
    단 byte, short는 면제
  24. 카멜리안_최유리
    20220223 완료
  25. kimjo
    데이터 타입 (byte, short, int long)deta type = 크기 결정
    byte short = int라 외울 거 없어서 개꿀딱
    foat는 실수인 거 같은데 뒤에 f 써줘야 돼
    long도 int가 안되서 l을 써줘야 됨
    실수 double 변수 써야 됨
  26. 모찌말랑카우
    22.01.20
  27. 생동태
    2022.01.08 완료
  28. 구니
    2022.01.02 완료
  29. nagvert
    2021.12.4 수강완료
  30. syh712
    2021-11-24
    <상수의 데이터타입>
    int a(변수)=1(상수)
    float a = 2.2F
    => F를 붙이면 플로트로 명시규정화.
    long a =2147483648L
    => L을 안붙여주면, 기본은 '인티저'임.
    byte b = 100;
    short c = 200;
    상수라 하더라도 분명히 데이터타입이 있다. 기본값, 기본관계가 있다.
  31. 드림보이
    2021.11.10. 상수의 데이터 타입 파트 수강완료
  32. IaaS
    2021.10.25 의문점 해결완료

    int(byte,short) , long은 별개로 상수 뒤에 L을 대입

    float경우는 상수 뒤에 F를 대입해야한다.
  33. 성치
    2021-10-13일 완료
  34. 네제가해냈습니다
    211011
  35. H4PPY
    211008
  36. 미NI언
    10.6 완료!
  37. 아하
    21.09.27 완료
  38. 하성호
    210830
  39. 오션호스
    210822 완료
  40. 오션호스
    210816 완료
  41. super1Nova
    210810
  42. B=loom
    2021.07.19
  43. 악어수장
    5.11 2회독
  44. 개발꾸꾸
    5.10
  45. 개발꾸꾸
    5.10
  46. 드림보이
    수강완료했습니다...
  47. 코딩마스터__
    .
  48. Ruinark
    21.03.17 완료
  49. kkn1125
    21.02.16.토 완료~!
  50. 하연주
    210202 완료