티스토리 뷰

[2] 자바 데이터 타입과 변수

1. 데이터 타입

  • bit : 데이터 표현의 기본 단위, 0 1
  • byte : bit가 8개 모이면 1byte가 되어 하나의 문자를 표현함

 

논리형(Logical)

  • boolean 형은 true와 false라는 두 literal 값이 있다.
    • literal : 각 자료형에서 사용할 수 있는 데이터 값을 의미
  • int 형과 boolean 형은 서로 형변환 불가능

 

문자형 (Text)

  • char는 정수형으로 형변환 가능, 0부터 값을 갖는 Unsigned 값임
  • 자바의 문자형은 16비트 유니코드 문자로 표현됨
    • 다른 언어는 8비트여서 아스키 값만 갖는다. 자바는 비영어권 문자도 고려.

정수형 (Integer)

  • 정수형 중 형을 명시하지 않는 int 형으로 기본 정의함

  • 정수형은 Decimal, Octal, Hexadecimal로 표현

  • 23     : 10진수 표기법
    023    : 8진수 표기법
    0xBAAC : 16진수 표기법
    
    long 형을 사용할 경우 문자 L이나 l을 사용한다.
    23L, 023L, 0xBAACL

 

실수형 (Floating double)

  • 형을 명시하지 않으면 double이 기본형으로 정의됨

  • 실수형 포맷은 표준인 IEEE 754를 채택하여 자바를 플랫폼 독립적인 언어로 만듦

  • 실수형 리터럴은 소수점과 지수로 표현된다.

  • E 또는 e (지수 표현)
    F 또는 f (float를 표현)
    D 또는 d (double을 표현)
    
    3.14    : 간단한 실수 값 (double 형)
    6.02E23 : 큰 실수 값
    1.718F  : float 형의 실수 값

 

데이터 타입의 범위 초과 시 발생하는 오류

  • 변수 초기화 시 데이터 타입의 범위를 초과하는 값을 저장하면 컴파일 시에 오류 발생
  • +, - 등의연산 결과로 값의 범위를 초과하는 경우에도 오류 발생

 

2. 변수의 선언과 초기화

  • 변수 선언 : JVM에게 데이터를 저장하기 위한 메모리 할당을 요청하는 것

    • 데이터가 필요로 하는 크기의 메모리 할당을 위해 데이터 타입을 명시해야 함
  • 인스턴스 변수, 지역변수

 

3. 형변환

  • 형 변환 시 작은 데이터

 

묵시적 형 변환 (Promotion)

  • 형변환 연산자를 사용하지 않아도 자동으로 형변환이 이루어지는 경우 - 자동 형변환

    • ex) 4byte int 형을 8byte double 형으로 자동 변환 가능
  • int age = 25;
    double avgAge = age; // double  avgAge = (double)age
                        // 형변환 연산자인 (double) 생략

public class PromotionTest {

    public static void main(String[] args) {

        byte b1 = 127;
        char c1 = '가';
        int i1;
        double d1;
        System.out.println("자동 형변환의 결과");

        i1 = b1; // byte=>int
                 // 127이라는 값이 1byte => 4byte로 표현됨
        System.out.println("i1 = b1의 형변환 : " + i1);

        i1 = c1; // char '가' => int 형
                 // '가' => 유니코드로 표현한 십진수값 44032
        System.out.println("i1 = c1의 형변환 : " + i1);

        d1 = i1; // int => double 형
                 // 44032 => 44032.0 (8바이트 실수)
        System.out.println("d1 = i1의 형변환 : " + d1);

        /*
            자동 형변환의 결과
            i1 = b1의 형변환 : 127
            i1 = c1의 형변환 : 44032
            d1 = i1의 형변환 : 44032.0
        */
    }
}

 

명시적 형변환 (Demotion)

  • 더 작은 범위를 나타내는 데이터 타입으로 변환되는 경우 (축소 형변환)

    • ex) 8byte double => 4byte int
public class DemotionTest {

    public static void main(String[] args) {

        byte b1;
        char c1;
        int i1 = 128;
        int i2 = 97;
        double d1 = 3.14;

        System.out.println("명시적 형변환의 결과");

        b1 = (byte) i1; // int => byte 명시적 형변환
                         // byte는 128을 표현할 수 없으므로 전혀 다른 값 -128이 저장됨
        System.out.println("b1 = (byte)i1 : " + b1);

        c1 = (char) i2; // int 97 => char 명시적 형변환
                         // 97 => 유니코드 97인 소문자 a
        System.out.println("c1 = (char) i2 : " + c1);

        i1 = (int) d1; // double=> int 명시적 형변환
                       // 3.14 => 3 (소수점 아래 제외한 정수 부분만)
        System.out.println("i1 = (int) d1 : " + i1);

        /* 
             명시적 형변환의 결과
            b1 = (byte)i1 : -128
            c1 = (char) i2 : a
            i1 = (int) d1 : 3
         */
    }
}

 

출처 - swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDAe6AATw5UW6&subjectId=AV18Zw6qIxwCFAZN

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
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
글 보관함