자바(Java)의 기초 박살내기 - 데이터 타입(Data Type)


이번 시간에는 자료형이 대해서 알아보겠습니다. 자료형은 변수를 선언해주기전에 꼭 앞에 어떤 종류의 변수인지 구별해주는 역할을 합니다. 


 1. 자료형 


- 변수의선언 방법: 변수의 자료형 변수형 (ex: int a;)

- 자료형은 기본형 8가지와 참조형 3가지로 이루어져 있습니다.

- 자료형의 기본형이란 stack에 바로 사용할 수 있는 값을 저장합니다.

- 자료형의 기본형은 선언과 동시에 메모리 할당이 이루어지므로 바로 사용이 가능합니다.

- 자료형의 참조형이란 heap이나 static(클래스 또는 메서드)영역의 메모리 주소를 저장합니다.

- 자료형의 참조형은 선언만으로 사용할 수없고 메모리를 할당 받아서 데이터를 조작하거나 다른 자료형의 주소를 대입받은 후 조작을 가해야 합니다.(new 연산자 이용)

- 값할당(초기화) 방법 : 변수명 =

- 할당받은 값은 변수명만으로도 사용이 가능합니다.

- 변수명은 한글로 선언이 가능하지만 일반적으로는 사용하지 않습니다.



 2. 기본형과 참조형의 종류 


<자료형의 기본형 종류>

구분 

데이터형 

크기(Byte) 

범위 

 정수

  byte 

 1

-27  ~ 27-1 

 short

 2

-215  ~ 215-1 

 int

 4

-231  ~ 231-1 

 long

 8

 -263  ~ 263-1 

 문자형

 char

 2

영문자 1 'a' -> ASCII 0~65535

Java는 유니코드를 사용 함 

실수형 

 float

 4

유효자리 7자리(정밀도)  

 double

 8

유효자리 16자리(정밀도) 

 불

 boolean

1

true 또는 false 


<자료형의 참조형 종류>

- C언어에서 포인터와 유사한 개념으로 Class/Interface, String(문자열), Array(배열)이 있다.



 3. 자료형 - 기본형 예제 

<정수형, 실수형 예제>
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
public class Variable 
{
    public static void main(String args[])
    {
        int a;    // 정수형 int인 a선언
        a = 10;    // a의 값을 10으로 초기화
        System.out.println("a = " + a);
        
        a= 20;    // a의 값을 다시 20으로 초기화
        System.out.println("a = " + a);
        
        System.out.println("a + a = " + (a+a));
        
        int b = 30;    // 정수형 int인 b선언하는 동시에 30으로 초기화
        System.out.println("b = " + b);
        
        float f;    // 실수형 float인 f선언
        f = 0.123456789f;    // f의 값을 0.123456789로 초기화
                            // 여기서 뒤에 f를 붙으는것은 명시적 표현으로 float형이 됩니다.
        System.out.println("f = " + f);
        
        double d;    // 실수형 double인 d 선언
        d = 0.12345678901234567;    // d의 값을 0.12345678901234567로 초기화
                                    // 여기서 float형보다 double형이 범위가 넓다는걸 알수 있습니다.
        System.out.println("d = " + d);
    }
}
 
cs


<결과>


<문자형 예제>

- 문자형을 표현하는 방법은 3가지가 있습니다. 

(ASCII 코드 이용, UNICODE 이용, 문자 상수 직접대입)

- 문자형에는 제어문자라는 특별한 의미를갖는 문자가 있습니다.

\t: 탭 

\n: 줄바꿈 

\r: 첫칸으로 이동

\b: back space

\f: 페이지 바꿈 

\숫자: 8진수 

\u숫자: 16진수  

\\: \문자 

\', \": ' 또는 "(출력문에 "또는' 쓰는법) 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Character 
{
    public static void main(String args[])
    {
        char ch;    // 문자형 char인 ch 변수선언
        ch = 97;    // char형에 숫자를 쓰면 아스키코드값 출력
        System.out.println("ch = " + ch);
        
        ch = 'a';    // char형에 문자출력하려면 '문자' 쓰기
        System.out.println("ch = " + ch);
        
        ch = '\u0061';    // 유니코드 값을 넣어 a값넣기
        System.out.println("ch = " + ch);
        
        System.out.print("여기는 첫째 줄 ");
        System.out.print("입니다.\n");
        
        System.out.println("여기는 둘째 줄 입니다.");
        
        System.out.print("국어\t영어\t수학\n");
        System.out.println("----------------");
        System.out.println("80\t50\t100");
    }
}
cs


<결과>


<아스키코드표>

<유니코드 사이트>

https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_D000~DFFF


- char형 아스키코드와 문자에 관한 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class CharTest 
{
    public static void main(String args[])
    {
        char ch = 'A';    // char형 ch변수 선언과동시에  'A' 초기화
        System.out.println("ch = " + ch);    // 'A' 출력
        
        // 괄호안에 +는 연산이고 A는 아스키코드가 65이고
        // 그 안에서 +1 연산을 하므로 66이 리턴되어 출력된다.
        System.out.println("ch + 1 = " + (ch + 1));    
        
        // char형 변수 ch1에 미리 A문자에 +1 되어 계산되므로
        // 출력문에 변환 될 때는 A보다 아스키코드가 하나 큰 'B'가 나오게된다
        char ch1 = 'A' + 1;
        System.out.println("ch + 1 = " + ch1);
        
        // char형에 숫자가 들어갈경우 아스키코드 숫자에 해당되는 문자가 출력된다. 
        ch = 13;
        System.out.print("ASCII Code 13 = " + ch);
        System.out.print("한 줄이 떨어져서 출력 됩니다.");
    }
}
cs


<결과>




 4. Overflow & UnderFlow 


- Overflow : 데이터 타입이 저장할 수 있는 값의 범위를 초과한 경우로 가장 작은 숫자로 돌아가서 다시 올라가게 됩니다.

- Underflow데이터 타입이 저장할 수 있는 값의 범위보다 작은 값을 저장 한 경우로 가장 큰 숫자로 돌아가서 다시 내려가게 됩니다.


<예제>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class OverUnderflow 
{
 
    public static void main(String args[])
    {
        // byte 범위는 -128 ~ 127 사이의 정수이다. 
        byte num1 = 127;
        byte num2 = (byte)128;
        System.out.println("num1 = " + num1);
        System.out.println("num1 = " + num2);    // 범위를 초과했기 때문에 오버플로우
 
        num1 = -128;
        num2 = (byte)-129;
        System.out.println("num1 = " + num1);
        System.out.println("num1 = " + num2);    // 범위보다 낮기 때문에 언더플로우
    }
}
cs


<결과>



 5. Type Casting(형변환) 


- 형변환이란 변수 또는 상수의 값을 다른 타입으로 변환 하는것이다.

- 기본형은 기본형끼리 참조형은 참조형끼리만 형변환 가능하다.

- 기본형에서 boolean형만 형변환 불가능

- 참조형은 상속관계 클래스의 객체들 사이에서 형 변환을해서 사용 가능

- 자동 형 변환 : 형변환을 명시하지 않아도 형변환이 이루어 지는것

- 메모리 크기가 작은 자료형과자료형이 연산을 하면 큰 자료형으로 형 변환이 자동으로 행되서 연산 수행
- 산술 연산을 수행할 때 결과의 최소 단위는 int
- 형 변환이 작은 쪽에서 큰 쪽으로 일어나는 것을 promotion 이라고 합니다.
- byte < short< int < long < float < double
- charshort와 동일

   ex) byte b=10;

        int  a=20;

               - a+b ==> intbyte연산이므로 int로 형 변환이 일어난다. 


<형변환 예제>

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
package DataType2;
 
public class TypeCasting 
{
    public static void main(String args[])
    {
        byte b = 100;    // btye형 b 변수 100으로 초기화
        short s = 1000;    // short형 s 변수 1000으로 초기화
        int i = 10000;    // int형 i 변수 10000으로 초기화
        long l = 10L;    // long형 l 변수 10으로 초기화
        char c = 'A';    // char형 c 변수 'A'로 초기화
        float f = 3.14f;    // float형 f 변수 3.14로 초기화
        double db = 5.15d;    // double형 db 변수 5.15로 초기화
        boolean bo = true ;    // boolean형 bo 변수 true로 초기화
        
        System .out.println("b = " + b);
        System .out.println("s = " + s);
        System .out.println("i = " + i);
        System .out.println("l = " + l);
        System .out.println("c = " + c);
        System .out.println("f = " + f);
        System .out.println("db = " + db);
        System .out.println("bo = " + bo);
        
        f = (float)1.5;    // 또는 f = 1.5f
        System .out.println("f = " + f);
        
        f = (float)db;    // double값을 float형으로 
        System .out.println("f = " + f);
    }
 
}
 
cs


<결과>


- 지금까지 데이터 타입에 대해서 공부해 봤습니다. 이렇게 데이터 타입은 여러방법으로 쓰이고 있습니다. 다음 시간에는 연산자에 대해서 공부해 보겠습니다.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유