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. eunbee
    22-05-12
  2. 고액연봉
    형변환 재밌어용~
  3. 20220423
  4. 김은희
    20220330 완료
    데이터타입 전강의 다시보기
  5. aesop0207
    22.03.12. Sat
  6. float double 차이? 왜 2.2는 float이 아닌 double인지? 정밀도의 차이 - 나중에 더 알아볼 것
    상수 그대로 써있는 것은 기본적으로 정수 int / 실수 double 이라고 보면 됨
    다른 데이터타입을 쓰는 경우에는 뒤에 L, F 붙여줄것
    단 byte, short는 면제
  7. 카멜리안_최유리
    20220223 완료
  8. 데이터 타입 (byte, short, int long)deta type = 크기 결정
    byte short = int라 외울 거 없어서 개꿀딱
    foat는 실수인 거 같은데 뒤에 f 써줘야 돼
    long도 int가 안되서 l을 써줘야 됨
    실수 double 변수 써야 됨
  9. 모찌말랑카우
    22.01.20
  10. 생동태
    2022.01.08 완료
  11. 구니
    2022.01.02 완료
  12. nagvert
    2021.12.4 수강완료
  13. syh712
    2021-11-24
    <상수의 데이터타입>
    int a(변수)=1(상수)
    float a = 2.2F
    => F를 붙이면 플로트로 명시규정화.
    long a =2147483648L
    => L을 안붙여주면, 기본은 '인티저'임.
    byte b = 100;
    short c = 200;
    상수라 하더라도 분명히 데이터타입이 있다. 기본값, 기본관계가 있다.
  14. 드림보이
    2021.11.10. 상수의 데이터 타입 파트 수강완료
  15. 2021.10.25 의문점 해결완료

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

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

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

    float의 값은 double형 과 다르게 숫자뒤에F를 지정해줘야 컴파일 오류가 안뜬다.
  48. 자바가즈아
    20200401 완료!
  49. 20200320
  50. 수고했어오늘도
    2020-03-13 완료
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기