포스트

Day08 Eclipse IDE설정 및 Java프로그래밍 기초(변수)

1. Eclipse 설정

1.1 Esclipse 작업폴더 설정

  • 다른 IDE에서 작업중이 작업폴더를 Eclipse에서 설정하기
  • .settings/.project/.classpath를 설정팔이 있어야 eclipse가 프로젝트 폴더로 인식한다.



  • 프로젝트 내에 gradle.build 파일 수정
    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
    
    // project내에 build.gradle 열기
    
      plugins {
          // 자바 소스를 컴파일할 때 사용할 도구를 추가한다.
          // 뿐만 아니라 eclipse 플러그인과 결합해서
          // eclipse IDE의 자바 관련 설정 파일을 생성할 때도 사용한다.
          // 예) .classpath, .settings/*
          id 'java'  
    
    
          // 이클립스 관련 파일을 다룰 때 사용할 도구를 추가한다.
          // 예) .project
          id 'eclipse' 
      }
    
      // 기타 설정들 
    
      // Eclipse 프로젝트 이름을 설정하기
      eclipse {
          project {
              name = "java-lang" // 프로젝트 이름을 지정하지 않으면 폴ㄹ더 이름(예 : app)을 사용한다.
          }
          jdt {
            sourceCompatibility = 21
            targetCompatibility = 21
            javaRuntimeName = "JavaSE-21"
          }
      }
    
  • 터미널에 tasks에 입력되었는지 확인하기(프로젝트가 있는 상위 폴더에서 실행)
    • 터미널 명령어 : $gradle tasks



  • 터미널에 작업설정 파일 생성
    • 명령어 : $gradle eclipse



  • eclipse 실행후 Import -> General -> Existing Projects into Workspace



  • eclipse 설정 파일 삭제
    • eclipse setting이 잘못 되었거나, 수정이 필요할때 사용한다.
    • 명령어 : $gradle cleanEclipse

2. 변수

2.1 변수란?

  • 데이터를 저장하는 메모리를 말한다.

2.1 변수 선언과 할당

  • 변수를 메모리에 할당하기 위해서는 변수를 선언하고 값을 대입하여야 한다.

  • 메모리타입(데이터타입)과 메모리 명을 설정해야한다.

    //변수 선언하기

    // Data_type Memory_name; int a; float b; boolean t;

{#code_1717487665585}



  • 선언된 변수명에 값을 대입한다.
1
2
3
4
//변수 선언
int number;
//변수 할당
number = 7;



2.2 Data type

  • 자바에서 데이터 타입은 크게 기본타입(Primitive Type)과 참고타입(Reference Type)로 나뉜다.



2.3 Data type의 역할

  • 변수의 데이터 타입을 선언하는 이유는 메모리 사용을 제어 하기 위함이다.
1
2
3
4
5
6
7
8
    // data type의 역할 

    int i = 30;    // memory : 0X0000001E
    flaoat f = 30; // memory : 0X41F00000

    // 같은 30을 담아도 data type에 따라 메모리에 담기는 2진코드가 다르다. 
    // 컴퓨터는 2진코드를 통해 정보를 입력 받기 때문에
    // int 30과 float 30이 다르다는 것을 data type으로 구별한다.
  • 변수의 데이터 타입의 최대 범위는 다음과 같다.
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
package study.lang.variable;

    public class Test01 {
        public static void main(String[] args) {
            // 각 데이터 타입의 최대값과 최소값을 출력합니다.
            System.out.println("--- byte ----");
            System.out.println("max : " + Byte.MAX_VALUE + ", min : " + Byte.MIN_VALUE);
            // max : 127, min : -128

            System.out.println("--- short ----");
            System.out.println("max : " + Short.MAX_VALUE + ", min : " + Short.MIN_VALUE);
            // max : 32767, min : -32768

            System.out.println("--- int ----");
            System.out.println("max : " + Integer.MAX_VALUE + ", min : " + Integer.MIN_VALUE);
            // max : 2147483647, min : -2147483648

            System.out.println("--- long ----");
            System.out.println("max : " + Long.MAX_VALUE + ", min : " + Long.MIN_VALUE);
            // max : 9223372036854775807, min : -9223372036854775808

            System.out.println("--- float ----");
            System.out.println("max : " + Float.MAX_VALUE + ", min : " + Float.MIN_VALUE);
            // max : 3.4028235E+38, min : 1.4012984643261213E-45

            System.out.println("--- double ----");
            System.out.println("max : " + Double.MAX_VALUE + ", min : " + Double.MIN_VALUE);
            // max : 1.7976931348623157E+308, min : 4.94065648E-324

            System.out.println("--- char ----");
            System.out.println("max : " + Character.MAX_VALUE + ", min : " + 0);
            // max : 65535, min : 0
        }
    }

2.4 정수형 리터럴 메모리 크기에 따른 표기법

  • 정수 표기법은 다음과 같다.
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
    //# 정수 리터럴 - 메모리 크기에 따른 표기법
    //- 정수를 저장할 메모리의 크기를 지정할 수 있다.
    //- 메모리의 크기에 따라 표현할 수 있는 정수의 크기가 다르다.
    //
    public class Test {
      public static void main(String[] args) {
        //## 4바이트 정수
        //접미사를 붙이지 않고 그냥 숫자를 표현하면 4바이트 크기의 메모리에 저장되는 정수를 표현한다.
        System.out.println(2147483647); // 4바이트 양의 정수 최대값
        System.out.println(-2147483648); // 4바이트 음의 정수 최소값

        //4바이트 메모리 크기를 초과하면 컴파일 오류가 발생한다.
        //System.out.println(2147483648);
        //System.out.println(-2147483649);

        //## 8바이트 정수
        //4바이트 메모리를 벗어나는 정수 값을 표현할 때 사용한다.
        //숫자 뒤에 L 또는 l을 붙인다.
        //보통 대문자를 붙인다. 왜? 소문자 l은 숫자 1과 헷갈리기 때문이다.
        System.out.println(2147483648L);
        System.out.println(-2147483649L);

        //## 4바이트 또는 8바이트 정수의 최대값과 최소값
        //자바에서는 각 데이터 유형에 따라 최대/최소 값을 알아볼 수 있도록 특별한 명령을 제공한다.
        System.out.println(Integer.MAX_VALUE); // 4바이트로 표현할 수 있는 정수 최대값
        System.out.println(Integer.MIN_VALUE); // 4바이트로 표현할 수 있는 정수 최소값
        System.out.println(Long.MAX_VALUE); // 8바이트로 표현할 수 있는 정수 최대값
        System.out.println(Long.MIN_VALUE); // 8바이트로 표현할 수 있는 정수 최소값

        //## 주의!
        //- 다음은 크기가 다른 정수이다.
        System.out.println(100); // 4바이트 크기의 정수 값
        System.out.println(100L); // 8바이트 크기의 정수 값
      }
    }

    /*
    # 메모리 크기와 정수의 범위
    1 비트: 2**1
      - 음수가 없는 경우: 0, 1
    2 비트: 2**2
      - 음수가 없는 경우: 00(0), 01(1), 10(2), 11(3) (0 ~ 3)
      - 음수가 있는 경우: 00(0), 01(1), 10(-2), 11(-1) (-2 ~ 1)
    4 비트: 2**4
      - 음수가 없는 경우: 0 ~ 2**4 - 1 = 0 ~ 15
      - 음수가 있는 경우: -2**3 ~ 2**3 - 1 = -8 ~ 7
    8 비트: 2**8
      - 음수가 없는 경우: 2**8 = 0 ~ 2**8-1 = 0 ~ 255
      - 음수가 있는 경우: -2**7 ~ 2**7-1 = -128 ~ 127
    16비트: 2**16
      - 음수가 없는 경우: 0 ~ 2**16-1 = 0 ~ 65535
      - 음수가 있는 경우: -2**15 ~ 2**15-1 = -32768 ~ 32767
    32비티: 2^32
      - 음수가 없는 경우: 0 ~ 2**32 - 1 = 4,294,967,296
      - 음수가 있는 경우: -2**31 ~2**31 - 1 = -2,147,483,648 ~ 2,147,483,647
    64비트: 2^64 =
      - 음수가 있는 경우: 약 -900경 ~ 900경

    ## 정리
    - 4바이트 정수 리터럴
      예) 100

    - 8바이트 정수 리터럴
      정수 뒤에 접미사 L 또는 l을 붙인다.
      예) 100L (주로 사용)
      예) 100l
     */

2.5 부동소수점 리터럴 메모리 크기에 따른 표기법

  • 부동소수 표기법은 다음과 같다.
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
    //# 부동소수점 리터럴 - 유효자릿수
    //- 정수처럼 메모리 크기(4바이트 또는 8바이트)에 따라 표현할 수 있는 부동소수점의 범위가 다르다.
    //- 단 IEEE 754 명세에 따라 2진수로 변환되기 때문에 
    //  정확하게 '소수점 이상 얼마까지 소수점 이하 얼마까지' 식으로 정의할 수 없다.  
    //  대신 '유효자릿수'라는 방식으로 대략적으로 값의 범위를 표현한다. 
    //
    public class Test {

      public static void main(String[] args) {

        //## 4byte(float) 부동소수점의 유효자릿수
        //소수점을 뺀 후 7자리 숫자까지는 거의 정상적으로 저장된다.
        System.out.println(999.9999f);
        System.out.println(999999.9f);
        System.out.println(9.999999f);
        System.out.println("----------------------------");

        //유효자릿수가 7자리를 넘어가는 경우 값이 잘려서 저장될 수 있다.
        System.out.println(987654321.1234567f);
        System.out.println(9.876543211234567f);
        System.out.println(987654321123456.7f);
        System.out.println("----------------------------");

        //## 8byte(double) 부동소수점의 유효자릿수
        //소수점을 뺀 후 16자리 숫자까지는 거의 정상적으로 저장된다.
        System.out.println(987654321.1234567);
        System.out.println(9.876543211234567);
        System.out.println(987654321123456.7);
        System.out.println("----------------------------");

        //유효자릿수가 16자리를 넘어가는 경우 값이 잘려서 저장될 수 있다.
        System.out.println(987654321.12345678);
        System.out.println(9.8765432112345678);
        System.out.println(987654321123456.78);
        System.out.println("----------------------------");

        //## 부동소수점을 저장할 때 정확하게 저장되지 않는 예
        System.out.println(7 * 0.1); //결과: 0.7000000000000001
        //- 이유
        //  - IEEE-754 규격에 따라 부동소수점을 2진수로 바꾸다보면
        //    정확하게 2진수로 딱 떨어지지 않는 경우가 있다.
        //    CPU, OS, 컴파일러, JVM의 문제가 아니다.
        //  - IEEE-754의 방법에 내재되어 있는 문제다.
        //- 해결책
        //  - 시스템에서 필요한 만큼 소수점 이하 자리수를 적절히 짤라 사용하라!
      }
    }

    //## 결론!
    //- 32비트(float) 메모리에 부동소수점을 저장할 때는 유효자릿수 7자리까지는 거의 가능하다. 
    //- 64비트(double) 메모리에 부동소수점을 저장할 때는 유효자릿수 15자리까지는 거의 가능하다.
    //- 그래서 32비트 float을 단정도(single-precision)라 부르고,
    //  64비트는 두 배 정밀하게 값을 저장한다고 해서 배정도(double-precision)이라 부른다.
    // 12345.67 + 12.34567을 연산하면 전체 자리수가 10자리가 되므로 정확한 계산이 어렵다!!!!
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.