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자리가 되므로 정확한 계산이 어렵다!!!!
'개발자 꿈나무의 하루 > 01_Boot Camp' 카테고리의 다른 글
(네이버클라우드 부트캠프) 10일차 - Java프로그래밍 기초(연산자) (0) | 2024.06.07 |
---|---|
(네이버클라우드 부트캠프) 9일차 - 실습프로젝트 (1) | 2024.06.05 |
(네이버클라우드 부트캠프) 7일차 - Java프로그래밍 기초(문자집합 & 수) (0) | 2024.06.03 |
(네이버클라우드 부트캠프) 6일차 - Java프로그래밍 기초(패키지, 자료형) (0) | 2024.05.31 |
(네이버클라우드 부트캠프) 5일차 - Bytecode작성 및 Java실습(class,main()) (0) | 2024.05.30 |