본문 바로가기
개발자 꿈나무의 하루/01_Boot Camp

(네이버클라우드 부트캠프) 8일차 - Eclipse IDE설정 및 Java프로그래밍 기초(변수)

by kk_naks 2024. 6. 4.

1. Eclipse 설정

  1.1 Esclipse 작업폴더 설정

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

 

     - 프로젝트 내에 gradle.build 파일 수정

// 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;

     - 선언된 변수명에 값을 대입한다.

//변수 선언
int number;
//변수 할당
number = 7;

 

  2.2 Data type

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

 2.3 Data type의 역할 

     - 변수의 데이터 타입을 선언하는 이유는 메모리 사용을 제어 하기 위함이다.  

// data type의 역할 

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

// 같은 30을 담아도 data type에 따라 메모리에 담기는 2진코드가 다르다. 
// 컴퓨터는 2진코드를 통해 정보를 입력 받기 때문에
// int 30과 float 30이 다르다는 것을 data type으로 구별한다.

 

     - 변수의 데이터 타입의 최대 범위는 다음과 가타.

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 정수형 리터럴 메모리 크기에 따른 표기법

//# 정수 리터럴 - 메모리 크기에 따른 표기법
//- 정수를 저장할 메모리의 크기를 지정할 수 있다.
//- 메모리의 크기에 따라 표현할 수 있는 정수의 크기가 다르다.
//
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 부동소수점 리터럴 메모리 크기에 따른 표기법

//# 부동소수점 리터럴 - 유효자릿수
//- 정수처럼 메모리 크기(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자리가 되므로 정확한 계산이 어렵다!!!!