ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 변수, 리터럴, 자료형, 형변환
    Knowledge/Java 2019. 10. 9. 21:29
    반응형

    Java에서 변수는 타입과 변수 이름으로 선언한다.

     

    1
    2
    3
    int count;
    // 타입 : int
    // 변수 이름 : count

     

    이때 변수 이름은 _ 나 $나 문자( 한글도 되지만 영어로 쓰자 )로 시작해야 한다 ( 필수 )

    또한 java 변수 이름은 낙타표기법을 사용하는 것을 권장한다. ( 권장이지만 그냥 필수라고 외우자 )

    ( 낙타 표기법 : 소문자로 시작하고 띄어쓰기가 필요한 부분은 대문자로 쓰는 표기법 ex - camelCase )

     

    변수는 단 하나의 값만을 담을 수 있다.

     

    예를 들어 

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    count = 10;
    // 10을 담으면 
            
    System.out.println(count);
    // count 값으로 10이 출력되지만
            
    count = 20;
    // 20을 담으면
            
    System.out.println(count);
    // count 값에 원래 담겨 있던 10은 사라지고 새로 담은 20이 출력된다 

     

    이 때 count에 담은 10, 20 등을 '리터럴'이라고 표현한다. 

     

    그냥 수학에선 변수와 상수로 표현하지만

    프로그래밍 언어에서 상수는 좀 다른 의미로 사용되기 때문에 '리터럴'이라고 표현한다.

     

    ava는 모든 변수 타입이 컴파일시에 결정되는 강형 언어라

    변수에 담을 데이터 타입을 정확히 선언하고 거기에 맞는 리터럴을 대입해야 한다.

     

    예를 들어

     

    1
    2
    3
    4
    5
    6
    // count =11.1
    // 정수 값만 담을 수 있는 int형 변수에
    // 11.1 이라는 실수를 담으려 하면 컴파일 에러가 발생한다.
            
    double avg = 11.1;
    // 실수는 실수형 변수에 담아야 한다.

     

    Java의 기본 자료형은 아래와 같다

     

    여기서 타입별 자료형과 크기, 디폴트 값정도는 외워두는 게 좋다 

     

    간단히 필요한 부분만 짚고 넘어가자면 

     

    - 논리값

     

    1
    2
    3
    boolean isFun = true;
    // 논리형 데이터 타입 변수엔 논리 리터럴을 넣어주면 된다.
    // 논리 리터럴 : true / false

     

    - 정수

     

    1
    2
    3
    4
    5
    6
    7
    8
    // 정수형 데이터타입 변수 역시 정수 리터럴을 넣어주면 된다.
    int x = 59;
    // 주로 int를 사용하고 
            
    long bing = 343453434L;
    // 큰 정수를 쓸 때는 long을 사용하는데 
    // long 형 변수에 리터럴을 대입할 때는 뒤에 L을 붙여줘야 한다. 
    // 대소문자는 상관없지만 소문자 l은 다른 숫자와 구분이 쉽지 않아 대문자 L이 권장된다

     

    - 실수

     

    1
    2
    3
    4
    5
    6
    float f = 32.4F;
    // float 형 변수에 실수 리터럴을 대입할 때는 뒤에 f를 붙여줘야 한다. 
    // 역시 대소문자는 상관없다
            
    double d = 34324324234.5;
    // 실수형을 사용할 할때는 주로 double을 사용한다    

     

    - 문자

     

    문자가 좀 복잡한데 일단 표현범위가 0~65535 로 숫자인 점에 주목하자

     

    자바는 모든 문자를 유니코드로 처리한다.

    이 유니코드 값이 음수없이 0부터 65535까지이기 때문에 저런 표현 범위를 갖는것이다.


    유니코드는 세계 각국의 문자들을 코드값으로 매핑한 국제 표준 규약인데
    0 ~ 127까지는 아스키 문자 ( 특수기호 및 영어 알파벳 ) 가 할당되어 있고

     

    아스키 코드표

    44032 ~ 55203까지는 한글 11172자가 할당되어 있다. 

     

    이 점을 기억하고 코드를 보자

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    char c = 'f';
    // 문자 데이터 타입 변수 c에 'f' 리터럴을 입력한 후 
            
    System.out.println(c);
    // c를 출력하면 입력한 f가 나오지만
            
    // 내부적으로는 f에 해당하는 유니코드 값을 저장한다.
     
    // 이런 유니코드 값은 
     
    int uniCode = c;
    // 위와 같이 char 타입 변수를 정수형 변수에 대입해보면 확인할 수 있다. 
            
    System.out.println(uniCode);
    // 102가 출력된다.
            
    // 이 점을 활용해 char 타입 변수에 아예 아스키 코드를 넣을 수도 있다.
            
    char cCode = 102;
    // 문자 자료형 데이터 타입에 숫자 102를 넣어보면
            
    System.out.println(cCode);
    // f가 출력된다.

     

    char 타입 변수는 유니코드 값을 저장한다는 점 때문에 유의할 부분이 하나 더 있다.

     

    1
    2
    3
    4
    //int cTemp = '';
    // 아무것도 들어가있지 않은 유니코드는 없기 때문에 '' 은 에러가 발생한다.
    int cTemp = ' ';
    // 공백에 해당하는 유니코드는 존재하기 때문에 이는 에러가 발생하지 않는다.

     

    이런 자료형은 형변환이 가능하다.

     

    다만 이 점을 기억해야 한다.

     

    작은 데이터 타입의 값을 큰 데이터 값으로 옮길 때는 묵시적으로 형변환이 되지만

    큰 데이터 값을 작은 데이터 값으로 옮길 때는 강제로 형변환을 해줘야 한다.

     

    코드로 보면 이런 것이다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    int x = 50000;
    long y = x;
    // int (4byte) 가 long (8byte)보다 작은 자료형이기 때문에
    // int type의 값을 long으로 옮겨 담을 때는
    // 묵시적으로 형변환이 일어난다.
        
    long y2 = 5;
    //int x2 = y2;
    // 에러 발생
        
    // 그러나 long 은 int보다 큰 자료형이기 때문에
    // 설령 그 안에 작은 값 ( 이 경우엔  5 ) 이 담겨 있어도
    // long의 값을 int에 옮겨 담으려하면 에러가 발생한다.
    // 컴파일러는 데이터 타입의 크기를 보고 판단하지
    // 변수에 담긴 값을 보고 판단하지 않기 때문. 이럴때는
        
    int x2 = (int)y2;
    // 위와 같이 변환시킬 타입의 이름을 명시해서
    // 강제 형변환을 시켜줘야 한다.
     
    // 이 때         
    long y3 = 21474836470L;        
    // int의 범위를 넘어서는 값을 넣고
     
    System.out.println(Integer.MAX_VALUE);
    // int 최대값 : 2147483647
     
    int x3 = (int)y3;
    // 강제 형변환을 시도하면
     
    System.out.println(y3);
    // 21474836470 출력
            
    System.out.println(x3);
    // -10 출력
     
    // 쓰레기 값이 들어가니 주의하자

     

    출처 :

     

    자바 입문 | 프로그래머스

    평가 4.8 28개의 평가 ★★★★★26 ★★★★1 ★★★1 ★★0 ★0 김연재 2019.10.06 13:55 자바뽀개기 2019.09.13 01:06 하유진 2019.09.10 11:19 정승철 2019.09.07 18:47 김치균 2019.09.01 13:54 리뷰 더보기

    programmers.co.kr

     

    반응형

    댓글

Designed by Tistory.