hyeonga_code

Java_14_자료형, 변수, 상수, 오버플로우, 언더플로우 본문

Java

Java_14_자료형, 변수, 상수, 오버플로우, 언더플로우

hyeonga 2023. 9. 15. 05:59
반응형

 

- 자료형, 변수, 상수
    - 변수
        - 하나의 값을 저장하기 위한 공간
        - 규칙
            - 대소문자를 구분합니다.
            - 하나 이상의 글자로 길이의 제한은 없으나 16자 이상 넘어가지 않습니다.
                - 저장되는 값과 연관된 단어로 작성하는 것이 좋습니다.
            - 문자, '$', '_' 로 시작해야 합니다.
            - 변수 값과 혼동을 방지하기 위해 숫자는 첫글자로 사용하지 않습니다.
            - 숫자, 문자, '$', '_' 를 포함할 수 있습니다.
            - 공백은 사용할 수 없습니다.
            - 예약어는 식별자로 사용할 수 없습니다.
                - eclipse에서 붉은색으로 표시되는 부분입니다.
                int, long, byte, char, short, float, double boolean
                if, else, switch, case, default, for, do, while, break, continue
                class, abstract, interface, extends, implements, enum, new, this, super, instanceof
                void, return
                private, protected, public
                true, false, null
                try, catch, finally, throw, throws
                package, import, transient, volatile, synchronized, native, final, static, stricfp, assert
        - 값의 중복을 피하기 위해 사용합니다.

    - 상수_Constant
        - 값을 저장하면 변경할 수 없는 공간의
        - 'final' 키워드를 사용하여 선언합니다.
        - 상수는 모두 대문자로 작성합니다.

    - Literal_리터럴
        - 데이터를 표현하는 방법입니다.
        - 고정된 값 자체를 표현할 때 사용합니다.
        - 문자열, 정수, 실수 데이터 등을 표현합니다.
        - 논리, 시퀀스, 매핑, None 도 포함됩니다.

            - 숫자  _ 사칙연산이 가능합니다.
                -------------------------
                     10           int
                     10l          long
                    3.14        double
                    3.14f        float
            - 문자  _ 숫자로 변환되므로 연산이 가능합니다.
                -------------------------
                    "Hello"     string
                      'A'         char
            - 논리  _ AND, OR
                -------------------------
                    true        Boolean
                    false       Boolean
            - None
                -------------------------
                    null        값 없음
            - 2/8/16 진수
                -------------------------
                    0b1010      2 진수
                    0144        8 진수
                    0x64        16 진수

            - 이에 포함되지 않는 이미지, 소리, 영상 등은 숫자로 변환하여 처리해야 합니다.
            - 변수에는 숫자, 문자, 논리로만 가능합니다.
                - 이를 데이터 타입이라고 합니다.
'BaseType.java
===== 

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package basic;
//모든 클래스는 패키지 안에 생성합니다.
 
import java.math.BigDecimal;
import java.math.BigInteger;
 
public class BaseType {
    // 모든 함수_메소드는 클래스 안에 작성합니다.
 
    public static void main(String[] args) {
        // Java의 모든 코드는 함수 안에 작성합니다.
 
        // 리터럴
        int c = 1234;
        long d = 123456;    
            // 오류가 발생되지 않지만 내부적으로는 문제가 있는 코드입니다.
        long d2 = 123456l;    
            // d는 정수형이므로 long 표기법으로 소문자 l을 작성해주어야 합니다.
            // d 가 허용되는 이유
            // Compiler가 자동으로 정수형 뒤에 소문자 l을 추가하는 묵시적인 작업이 있기 때문입니다.
        
        // 최대값 출력하기
        System.out.println(Long.MAX_VALUE);     // > 9223372036854775807
            // Long은 클래스 타입입니다.
        System.out.println(Integer.MAX_VALUE);  // > 2147483647
        
        // 최대값보다 큰 수
        BigInteger e = new BigInteger("10000000000000000000000");   
            /* 
              - 빨간 밑줄이 생기는 이유 : 함수의 접근 경로를 알 수 없어 참조할 수 없는 것입니다.
              > 'import java.math.BigInteger;'
                  - java 패키지 내의 math 클래스에 선언된 BigInteger 함수를 참조하겠습니다.
                
             - BigInteger는 기본형 데이터 타입에서 처리할 수 없는 크기입니다.
                     - Heap 공간에 값을 저장해야합니다. 
                - Heap 공간에 값을 저장하기 위해서는 'new'를 사용합니다.
                - Stack 공간에 값을 저장하기 위해서는 대입연산자 '='를 사용합니다.
            */
        System.out.println(e);      // > 10000000000000000000000
 
        
        // BigInteger e2 = new BigInteger(10000000000000000000000);    
            // 오류 : The literal 10000000000000000000000 of type int is out of range 
            // 따옴표가 없는 경우 Compiler가 정수형 표기법으로 인식하면서 오류가 발생합니다.
 
        // 최대값보다 큰 수
        BigInteger e2 = new BigInteger("1");
 
        // BigInteger 연산
        BigInteger result = e.add(e2);  // e의 값에 e2의 값을 더합니다.
        System.out.println(result); 
            // 연산자는 Stack에 존재하는 데이터만 적용됩니다.
 
        double g = 0.1 + 0.1 + 0.1;
        System.out.println(g);    // > 0.30000000000000004
            /* 
             - CPU는 2진수로 연산을 진행합니다.
                0.1 > 1/10 > 1/2^3    
             - 유효숫자 : 의미를 가지고 있는 숫자입니다.
                - 소수점 첫 번째 자리까지 보장되고 나머지 값은 버리게 됩니다.
            */
        
        // 10진수로 나누어 나머지 값이 없게 작성하기
        BigDecimal bb = new BigDecimal("0.1");
            // 'import java.math.BigDecimal;' 경로를 추가해야 합니다.
        BigDecimal result2 = bb.add(bb.add(bb));
            // 연산자를 사용할 수 없으므로 다른 방식으로 연산합니다.
            // 앞에 데이터 타입을 선언하는 이유는 Compiler에게 인식시켜주기 위함입니다.
        System.out.println(result2);        // > 0.3
    }
}
 
cs




- 자료형 : 변수나 상수 등에 넣을 데이터를 담는 그릇
    - 8bit = 1byte
    - 최근에는 다양한 데이터타입을 사용하지 않고 int, double을 주로 사용합니다.
        - Python의 경우 자료형이 따로 없습니다.
    - 데이터베이스에서는 효율성을 높이기 위해 다양하고 정밀하게 사용합니다.
    - 기본형_Primitive type
        - 논리형 _ boolean(1)
            - true/false : 1Byte (1bit만확인)
            - 이 외의 값을 입력하는 경우 오류
            - 조건식과 논리적 계산에 사용됩니다.
        - 문자형
            - 변수 하나 당 하나의 문자를 저장합니다.
            - char      2byte   _ 부호 비트가 없습니다.
                [0 - 65535]
        - 정수형
            - byte      1byte
                [-128 - 127] 
                - 이진 데이터를 처리하기 위해 사용합니다.
            - short     2byte
                [-32,768 - 32,767]
                - c언어와의 호환을 위해 추가되었습니다.
            - int       4byte   ***
                [-2^31 - 2^31-1]
                - 최근 컴퓨터의 성능이 좋아지면서 int를 사용합니다.
            - long      8byte
                [-2^63 - 2^63-1]
        - 실수형
            int x = 5;
            int y = 0;
            double x/y >> infinity 출력됩니다.
            - float
                - 4byte
                - 1.m * 2^(e-127)
                    - 1.m != 0
                    - 2^(e-127) != 0
                    - 정수, 소수, 지수
                    - 비트 수가 적어도 훨씬 더 큰 수를 비교할 수 있습니다.
                    - 정수보다 실수가 더 큰 자료형입니다.
                    - 실수에서의 0f는 0의 근사값입니다.
                    - 소수점 이하의 숫자는 크기와 무관하고 숫자의 정확성을 뜻합니다.
                    - 소수점이 길수록 정확한 숫자에 가깝다는 의미입니다.
            - double
                - 8byte
                - float에는 변수 값의 뒤에 f를 붙여 사용
    - 참조형_Reference type
        - 종류
            - 문자열_String
            - 클래스형_System
            - Date
            - BigDecimal
        - 값을 참조하는 데이터 타입입니다.
        - 참조형은 대문자로 시작하므로 Class 임을 알 수 있습니다.
        - 참조형 데이터는 Heap 영역에 저장됩니다.
        - Scope 범위를 벗어나면 자동으로 지워지지 않고 접근할 수 없는 쓰레기 값이 됩니다.
            - 필요할 때마다 쓰레기 값을 지우는 작업을 해야합니다.
            - GC_Garbage Collector
                - Compiler가 아닌 JVM에서 자동으로 지우는 작업을 진행합니다.
                - 'Preferences' > 'General' > 'Show heap status' 에서 설정한 것과 같습니다.
                - 클래스를 활용하여 선언하는 변수들의 경우 쓰레기 값을 생성할 확률이 높습니다.

    - Overflow_오버플로우
        - 선언된 데이터 타입의 최댓값을 초과하는 경우 오류가 발생합니다.
        - 이를 방지하기 위해 데이터 타입은 여유있게 선언하는 것이 좋습니다.
    - Underflow_언더플로우
        - 선언된 데이터 타입의 최솟값 미만으로 떨어지는 경우 오류가 발생합니다.
        - 문자형
            - 0-65535 : 2byte
            - 문자열간의 연산은 정수형으로 변환하여 연산합니다.
        - 기본형은 소문자로 시작합니다.
        - 기본형은 사이즈가 정해져 있습니다.
        - Scope 범위를 벗어나면 자동으로 지워집니다.

'BaseType.java'
=====

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
package basic;
//모든 클래스는 패키지 안에 생성합니다.
 
public class BaseType {
    // 모든 함수_메소드는 클래스 안에 작성합니다.
 
    public static void main(String[] args) {
        // Java의 모든 코드는 함수 안에 작성합니다.
        
        byte a = 127;
        a = a + 1;    // Type mismatch: cannot convert from int to byte
        byte b = 128;    // Type mismatch: cannot convert from int to byte
        // 오버플로우가 발생합니다.
 
        boolean a = true;
        // 논리 자료형 _ true, false
        int b = 10;
        // 정수 자료형
        float c = 10.23f;
        // 실수 자료형
        double d = 10.2233;
        // 실수 자료형
        System.out.println(a);    // true
        System.out.println(b);    // 10
        System.out.println(c);    // 10.23
        System.out.println(d);    // 10.2233
    }
}
cs

 

반응형