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. 2021.10.25 의문점 해결완료

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

    float경우는 상수 뒤에 F를 대입해야한다.
  2. 드림보이
    2021.10.17. 상수의 데이터 타입 파트 수강완료
  3. 성치
    2021-10-13일 완료
  4. 네제가해냈습니다
    211011
  5. H4PPY
    211008
  6. 미NI언
    10.6 완료!
  7. 아하
    21.09.27 완료
  8. 하성호
    210830
  9. 오션호스
    210822 완료
  10. 오션호스
    210816 완료
  11. super1Nova
    210810
  12. B=loom
    2021.07.19
  13. 악어수장
    5.11 2회독
  14. 개발꾸꾸
    5.10
  15. 개발꾸꾸
    5.10
  16. 드림보이
    수강완료했습니다...
  17. 코딩마스터__
    .
  18. Ruinark
    21.03.17 완료
  19. kkn1125
    21.02.16.토 완료~!
  20. 하연주
    210202 완료
  21. 윤성원
    21/01/27 감사합니다
  22. 김민혁
    21/1/9 감사합니다.. 꼭 완주 해보겠습니당
  23. 박소영
    최고입니다
  24. 자바남
    수강완료 !
  25. 오석민
    2020.09.17 완료
  26. 고고씽
    완료
  27. 김태현
    3회 시청
  28. 프로페쎠널
    2020.08.21 - 완료
  29. kairess
    2020.08.12완
  30. hvii
    20200806 완료
  31. yulrinam
    200721 시청완료 감사합니다 :)
  32. 広川
    どもうありがとうございます。
  33. 아도니스트
    감사합니다~~!
  34. yuji
    자바 왕초보 1일차 완료

    변수는 변하는 값이 라고 했는데 상수는 변하지 않은 값이라고 한다.(숫자 전부가 상수라고 할 수 있다)
    상수는 한번 정해진 값이라 값을 바꿀 수 없다.

    float의 값은 double형 과 다르게 숫자뒤에F를 지정해줘야 컴파일 오류가 안뜬다.
  35. 자바가즈아
    20200401 완료!
  36. 20200320
  37. 수고했어오늘도
    2020-03-13 완료
  38. 흐무
    2020-02-27
    고유한 값을 가지고 있고 그 값을 변경할수 없는것 데이터타입을 상수라고 한다.
    자바의 기본값은 int 형이고 long타입은 숫자뒤에L을 명시해주어야한다.
    Double 타입은 생략가능하다.
  39. 묵돌찡
    사소한 것이지만 굉장히 중요한 부분이군요!
    나중에 고생하는 것 보다 이렇게 정확하게 짚고 넘어가는게 중요하다고 생각합니다.
  40. aminora
    JVM에서 알아서 수정해주면 좋을것같은데 아쉬움
  41. 고릴라손바닥
    default 값이 int라 long을 사용할 경우 무조건 뒤에 L을 붙여줘야하는 것 같습니다.
    대화보기
    • 과연다볼수있을까?
      20190101 완료!
    • nyt0920@naver.com
      질문 있는데 long a = 2147483648; 는 오류발생하고 상수값이 int 값이라 오류가 발생한다고 설명들었는데 long범위안에 상수가 들어있는데 왜 int값인건가요?
    • 매직램프
      감사합니다!!!
    • 이재우
    • 김대현, 홍재우
      2019-10-23 학습완료
    • 허공
      감사합니다!
    • 워나
      2019/09/30 완료
    • yoseo
      9.24.완
    • Esther
      2019/09/22 수강 완료
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기