[데이터타입]
프로그램에서는 변수, 상수에 값을 담기 위해서는 그 값의 타입에 맞는 변수를 사용해야 합니다.
이를 '데이터 타입' 이라고 합니다.
데이터 타입은 크게 R타입(Reference Type, 참조 타입)과 P타입(Primitive Type, 기본 타입)이 있습니다.
# 이중에 P타입에 대해서 보겠습니다.
기본타입은 다시 4가지로 분류됩니다. (pdf p.19 & 책 p.60 ----외우기** )
각 타입마다 메모리 크기가 엄격하게 제한됩니다.
정수 타입
- byte
- short
- int (기본타입)
- long
실수 타입
- float
- double (기본타입)
문자 타입_ 한글자 (A, 가..)
- char
논리 타입_ true 참 / false 거
- boolean
String
정수타입
[byte] -128 ~ 127
package jun02;
class Apple {
}
public class DataType02 {
// 파일명과 동일한 클래스 앞에 public을 붙여줍니다.
// 접근제어자
public static void main(String[] args) {
byte bNumber = 127; // 127까지만 가능, 그 이상은 형변환
byte bNumber2 = (byte) -129; // 값 허용범위 : -128 ~ 0 ~ 127
System.out.println(bNumber2); // 127 -> 표시 가능한 값들사이에서 돌고 돔.
}
}
[프로모션 / 캐스트]
프로모션 : 변수를 대입할 때 작은 타입을 큰 타입에 대입하는 형태 = 자동대입
캐스트 : 큰 타입을 작은 타입에 대입할 때 범위를 초과하므로 반드시 해야하는 연산
(type) 을 명시해서 값을 대입시킵니다.
이 때, 주의할 점은 상위 비트를 대입되는 타입에 맞게 잘라내기 때문에 값의 변화가 올 수 있습니다.
[short] -32,768 ~ 32,767
package jun02;
public class DataType02 {
public static void main(String[] args) {
short sNum = 32767 + 1; // 형변환 필요
short sNum = (short) 32767 + 1;
// short + int = int (결과값이 int가 되어버림)
// 아래처럼 괄호로 묶어서 먼저 계산한 뒤 결과값을 short로 저장해줘야 함
short sNum = (short) (32767 + 1);
System.out.println(sNum); // -32768
}
}
[int] -2,147,483,648 ~2,147,483,647
package jun02;
public class DataType02 {
public static void main(String[] args) {
int iNum = 2147483647; // 허용되는 최대숫자
int iNum = 2147483648; // 불가능
iNum2 = Integer.MAX_VALUE; // 최댓값
System.out.println(iNum); // 2147483647
iNum2 = Integer.MIN_VALUE; // 최솟값
System.out.println(iNum); // -2147483648
}
}
[long] –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
package jun02;
public class DataType02 {
public static void main(String[] args) {
long lNum = 9223372036854775807; // 불가능 (error)
long lNum = 9223372036854775807L; // 끝에 L 붙여줘서 long타입임을 표기해줘야 함
System.out.println(lNum); // 9223372036854775807
System.out.println(Long.MAX_VALUE); // 9223372036854775807
System.out.println(Long.MIN_VALUE); // -9223372036854775808
}
}
컴파일러는 기본적으로 정수 리터럴을 int타입으로 간주하기 때문에
int타입 허용범위를 벗어나는 경우는 대문자 L 표기!!! (long타입임을 컴파일러에게 알림) _ p. 62
[형변환연습]
int iNum = 2147483648; // 불가능, 형변환 필요
int iNum = (int) 2147483648L; // 1. L타입 표기후 int로 변환
long iNum = 2147483648L; // 2. L타입 표기후 long타입으로 선언
실수타입
[float] & [double]
package jun02;
public class DataType02 {
public static void main(String[] args) {
float fNum = 3.14; // 불가능 (error)
float fNum = 3.14F; // 끝에 F 붙여줘서 float타입임을 표기해줘야 함
double dNum = fNum;
iNum = (int) fNum;
// 정수보다 실수를 더 큰 수로 인지합니다.
int iNum = 2147483647;
iNum = fNum; // 불가능, 같은 4byte지만 타입이 다름!
}
}
*크기순서*
byte < short < int < long < float < double
[형변환연습]
iNum = lNum;
iNum = fNum;
lNum = fNum;
// 해보기
[Quiz]
여러분은 과수원을 경영하고 있습니다.
키우는 과일은 사과, 배, 오렌지 이며, 각각 하루 생산량은 5, 7, 5 개 입니다..
위 값을 기준으로 하루에 총 생산되는 과일의 수를 출력시키고,
하루를 기준으로 시간당 몇 개의 과일이 생산되는지를 출력해주세요.
예) 총 생산 갯수 : 17
시간당 생산 갯수 : 0.0014598
최대한 많은 변수를 만들어서 해주세요.
반드시 한 번의 리터럴과 캐스팅을 활용해주세요.
평균 변수는 모두 float 타입으로 선언해주세요.
package jun02;
public class DataType03 {
public static void main(String[] args) {
int apple, pear, orange, total;
float avg;
apple = 5;
pear = 7;
orange = 5;
total = apple + pear + orange;
System.out.println(total); // 17
avg = total / 24F; // 방법1
System.out.println(avg); // 0.7083333
avg = (float) (total / 24.0); // 방법2
System.out.println(avg); // 0.7083333
// **주의**
// avg = (float) (total / 24); // 오답
// System.out.println(avg); // 0
System.out.println("총 생산 갯수 : " + total); // 총 생산 갯수 : 17
System.out.println("시간당 생산 갯수 : " + avg); // 시간당 생산 갯수 : 0.7083333
// 숫자 + 숫자 = 계산됨
// 문자 + 숫자 = 연결됨
}
}
서로 다른 타입의 연산에서는, 큰 타입으로 변환된 후 연산이 실행됨.
avg = total / 24
(float) (int) / 24
따라서 (int) / 24 = (int) 가 되어 결과값이 0나옴 (주의**) _ 책 p.80
방법1.
avg = total / 24F
(int) / (float) 의 결과값은 float이므로 가능
or
avg = (float) total / 24
(float) / (int) 의 결과값은 float이므로 가능
방법2.
avg = (float) (total / 24.0);
(int) / (double) 의 결과값은 double이므로 (float) 타입으로 넘겨주면 가능.
'국비과정 > JAVA (기초)' 카테고리의 다른 글
20230602 _[2일차]_04. 연산자 (1) | 2023.06.04 |
---|---|
20230602 _[2일차]_03. 데이터타입2 (0) | 2023.06.04 |
20230602 _[2일차]_01. 변수 (0) | 2023.06.04 |
20230601 _[1일차]_03. 클래스 & 메소드 (0) | 2023.06.04 |
20230601 _[1일차]_02. 자바설치 & 이클립스설치 (0) | 2023.06.04 |