생활코딩

Coding Everybody

코스 전체목록

닫기

상수의 데이터 타입

상수

변수는 변하는 값을 의미한다. 그 대척점에 있는 것이 상수인데, 상수(常數, 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. 자바남
    수강완료 !
  2. 오석민
    2020.09.17 완료
  3. 고고씽
    완료
  4. 김태현
    3회 시청
  5. 프로페쎠널
    2020.08.21 - 완료
  6. kairess
    2020.08.12완
  7. 20200806 완료
  8. yulrinam
    200721 시청완료 감사합니다 :)
  9. 広川
    どもうありがとうございます。
  10. 아도니스트
    감사합니다~~!
  11. 자바 왕초보 1일차 완료

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

    float의 값은 double형 과 다르게 숫자뒤에F를 지정해줘야 컴파일 오류가 안뜬다.
  12. 자바가즈아
    20200401 완료!
  13. 20200320
  14. 수고했어오늘도
    2020-03-13 완료
  15. 흐무
    2020-02-27
    고유한 값을 가지고 있고 그 값을 변경할수 없는것 데이터타입을 상수라고 한다.
    자바의 기본값은 int 형이고 long타입은 숫자뒤에L을 명시해주어야한다.
    Double 타입은 생략가능하다.
  16. 묵돌찡
    사소한 것이지만 굉장히 중요한 부분이군요!
    나중에 고생하는 것 보다 이렇게 정확하게 짚고 넘어가는게 중요하다고 생각합니다.
  17. aminora
    JVM에서 알아서 수정해주면 좋을것같은데 아쉬움
  18. 고릴라손바닥
    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 수강 완료
    • 김영란
      본문의 하단을 보시면 예시와 함께 "자바는 byte와 short 타입에 대해서는 int 형을 허용하기 때문에 오류가 발생하지 않는다."라는 문장이 있습니다. 따라서 byte형을 사용하실 때에는 B를 사용하지 않고 byte a=100; 와 같이 표현하시면 됩니다.
      대화보기
      • ㄷㄳ
        byte타입으로 변경하기 위해선 byte a = 100B;
        라고 붙여야하나요
      • ㅁㄴㅇㅁ
        int a = 2.2;
        일때 틀렸다. 왜냐하면 int는 정수형 데이터타입이기 때문이다.
        자바는 예민하다.
        double a = 2.2; 로 int를 double로 바꾸자 고쳐졌다.
        float a = 2.2; double를 float로 바꿨는데 안돼었다. 왜냐하면 자바는 double를 주로 사용하기 때문이다.
        int a = 2147483648; 로 했는데 틀렸다. 왜냐하면 2147483648보다 1이 초과하기 때문이다. 자바는 많이 예민하다.
        long a = 214783648;로 했다. 그래도 틀렸다. 왜냐하면
      • PassionOfStudy
        190904 Note
        * 상수의 데이터타입
        상수(常數, constant)란 변하지 않는 값을 의미한다.
        기본적으로 정수는 int타입, 실수는 double타입을 지칭한다.
        정수에 long타입을 허용하고 싶다면 xxxxL처럼 뒤에 L을 붙여준다.
        실수에 float타입을 허용하고 싶다면 x.xxF 처럼 뒤에 F를 붙여준다.
      • 홍주호
        20190901 완료
      • 콩지니
        2019-08-30
        수강완료
      • doevery
        수강완료
      • 다나가
        190816 - 수강완료
      • tnal6997
        190807 밑 댓들 종합해서 추가 설명 붙입니다

        * 변수와 마찬가지로 상수도 별개의 data type을 가진다.
        실수의 기본형은 double이고
        정수의 기본형은 int 이다.

        * 예제
        int a = 2147483648 -> 오류 (범위초과)
        long a = 2147483648 -> 오류 (변수의 타입은 long, 상수의 타입은 int)
        따라서 long a = 2147483648L 이라고 해주기
      • Hyeon-Jun Ha
        완료
      • 얼그레이
        감사합니다! 190628
      • 6/17시작
        6월 17일 완료
      • 05/27
      • 김동현
        감사합니다
      • ZANYABI
        상수
        [ int a=10 ]
        int a; 여기서 a에는 정수라면 어떤 값이든 넣을수 있다. 1을 할당하면 1이 되고, 10을 할당하면 10이 되는식이다. 이렇듯 변할수 있기에 a는 변수이다.
        int a=10; 여기서 10은 무슨일을 해도 10이다. 이렇듯 변하지 않기에 10은 상수가 된다.

        앞선 수업에서 변수에는 byte, int, long, double, float 등 다양한 데이터타입이 있다는것을 배웠다. 그럼 상수에도 데이터타입이 존재할까?

        [ float a = 3.5 ] 코드를 살펴보자. float 데이터타입은 상수값에 실수가 와야하는데, 3.5는 실수임에도 오류가 발생한다.
        뒤의 3.5는 데이터타입이 double 이기 때문이다. float 의 상수는 [ 3.5F ] 로 표현해줘야 float 데이터타입을 갖는다.

        [ long a = 5012 ] 코드를 살펴보자. long 데이터타입은 정수값이라면 어떤 값이든 넣을수 있지만, 5012 역시 정수임에도 오류가 발생한다.
        뒤의 5012는 데이터타입이 int 이기 때문이다. long 의 상수는 [ 5012L ] 로 표현해줘야 long 데이터타입을 갖는다.

        이처럼 앞 뒤 데이터타입이 서로 다르면 오류가 발생한다. 여기서 우리는 상수 역시 별개의 데이터타입을 가짐을 확인할 수 있다.
      • 가쥬앙
        감사합니당..!
      • 라또마니
        고맙습니다.
      • es0326
        2019.02.14 완료!
      • 더티팬더
        18.12.05
      • 전민희
        18.09.28 byte, short 는 명시적으로 int 타입에 허용됨. long을 사용 할 경우 숫자 뒤에 L을 붙이고 float 타입을 사용 할 경우, F를 붙여준다.
      • 최홍규
        9.25완료
      • 0.41449305704990724
        그런 기능이 있네
        c언어 하고 비슷하군요
      • 다람쥐
        감사합니다!
      버전 관리
      egoing
      현재 버전
      선택 버전
      graphittie 자세히 보기