값의 기본형 참조형
기본형(Primitive type): 오직 8개
문자: char(하나의 문자만을 저장할 수 있음)
숫자
- 정수: byte(1/이진데이터), short(2/c언어 호환. 안쓰임), int(4/자주사용), long(8/아주 큰 정수)
- 실수: float, double
논리: boolean(true/false 만 있으며, 조건식 / 논리적 계산에 사용)
종류 / 크기(byte) 1 2 4 8 논리형 boolean 문자형 char(유니코드: 2byte) 정수형 byte short int long 실수형 float (부동소수점: floating point) double 실제 값 저장
int, double → default 타입
표현 범위
예시: byte
byte b; // byte = 1 byte(8bit) 이 중 1bit = 2진수 한자리(0/1) b= 3; // 실제로는 10진수가 아닌 2진수로 저장됨
bit
2 bit = 4개 표현 가능(2^2) n bit로 표현할 수 있는 값의 개수 = 2^n개 n bit로 표현할 수 있는 부호없는 정수 범위 = 0~2^n-1 (0부터 시작하기 때문) n bit로 표현할 수 있는 부호있는 정수 범위 = -2^n-1 ~ 2^n-1 - 1 ex) n=8인 경우 -2^7 ~ 2^7-1 (-128~127)
byte
byte -2^7 ~2^7-1 (맨 왼쪽 비트를 값의 부호를 나타내는데 사용(부호비트 혹은 sign bit. 0=양수, 1=음수) -> 실제 값 표현에는 7비트 사용
short
-2^15~2^15-1 (S / 15 bit)
char
0~2^16 - 1 (문자 코드가 2진수로 저장됨) ( 16 bit )
int
-2^31 ~ 2^31-1 // -20억 ~ 20억 정도 (S / 31 bit)
long
-2^63~2^63-1 // 800경 정도(넘어갈 경우 BigInteger 클래스 사용) 64bit=8byte=(S / 63bit)
float(32bit, 4byte)
- 오차가 발생함 → 정밀도가 중요(몇자리까지 정확하게 표현할 수 있는지 = 7자리)
- ```
1.4E-45 ~ 3.4E38 (E38 = 10^38)// 표현할 수 없는 범위
1.4E-45 ~ 1.4E45// 정밀도 (가수에 따라 달라짐)
10^7 < 2^24 < 10^8( S / E(8) / M(23) )
( 부호 / 지수 / 가수 )
3.4E38 중 3.4 = 가수, E38 = 지수// 사용 가능한 값의 범위
-3.4E38 ~ -1.4E-45
1.4E-45 ~ 3.4E38double(64bit = 8 byte)
- 정밀도 15자리 ⇒ 정밀도 중요한 경우 double 사용
- ```
4.9E-324 ~ 1.8E308
( S / E(11) / M(52) )
참조형(Reference type)
- 기본형을 제외한 나머지(String, System 등)
- 수가 정해져 있지 않음(편의상 새로 만들 수 있음)
- 메모리 주소 저장(4 type(40억, 4기가 정도 메모리 다룰 수 있음. 32bit JVM) 또는 8 byte(64bit JVM: 160경 byte, 1600만 TB))
Date today; // 참조형 변수 today에 선언 today = new Date(); // today에 객체 주소 저장
형식화된 출력 - printf()
println()의 단점
출력 형식 지정 불가
실수 자리수 조절 불가: 소수점 n 자리만 출력하려면?
System.out.println(10/3); // 3이 출력(정수/정수=정수 System.out.println(10.0/3);) // 3.3333333333333335
10진수로만 출력: 8진수, 16진수로 출력하려면?
System.out.printf("%.2f", 10.0/3); // 3.33 System.out.printf("%d", 0x1A); // 26 System.out.printf("%x", 0x1A); // 1A
printf()의 지시자
| | 지시자 | 설명 |
| --- | --- | --- |
| 논리 | %b | 불리언(boolean) 형식으로 출력 |
| 정수 | %d | 10진(decimal) 정수의 형식으로 출력 |
| 정수 | %o | 8진(octal) 정수의 형식으로 출력 |
| 정수 | %x, %X | 16진(hexa-decimal) 정수의 형식으로 출력 |
| 실수 | %f | 부동 소수점(floating-point)형식으로 출력 |
| 실수 | %e, %E | 지수(exponent) 표현식의 형식으로 출력 |
| 문자 | %c | 문자(character)로 출력 |
| 문자 | %s | 문자열(string)으로 출력 |
- Java API → Formatter 클래스 확인
```
printf("age:%d year:%d\n", 14, 2017);
// 출력
age: 14 year:2027\n이 화면에 출력됨
// \n = 개행문자 (OS마다 표기가 다를 수 있음 %n은 OS를 가리지 않아 사용 권장)
```
- 정수를 8, 16진수로 출력
```
%d // 10진수
%o // 8진수
%x // 16진수
Integer.toBinaryString(15); // 2진수
```
- 8진수, 16진수에 접두사 붙이기(#)
```
%#d // 15 = 017
%#o // 15 = 0xf
%#x // 15 = 0XF
```
- 실수 출력을 위한 지시자 %f → 지수 형식(%e), 간략한 형식(%g)
화면으로부터 입력받기(Scanner)
Scanner
화면으로부터 데이터를 입력받는 기능을 제공하는 클래스
Scanner 사용
import문 추가
import java.util.*;
Scanner 객체의 생성 필수
Scanner scanner = new Scanner(System.in);
- System.in: 화면 입력
- 파일로부터 입력도 받을 수 있음
Scanner 객체를 사용
int num = scanner.nextInt() // 화면에서 입력받은 정수를 num에 저장 String input = scanner.nextLine() // 화면 입력 내용을 input에 저장 int num = Integer.parseInt(input) // 문자열(input)을 숫자(num)로 변환
- 문자 → 숫자: Integer.parseInt
- 숫자 → 문자: 숫자 + “”
정수형의 오버플로
최대값 + 1 → 최소값
최소값 - 1 → 최대값
오버플로: 표현 가능한 범위를 넘는 것
부호 없는 정수(4bit)
- 표현 범위: 0~15가 반복
부호 있는 정수(4bit)
- 표현 범위: -8~7가 반복
예
short(2byte = 16bit = 2^16 = 65536) -32768~32767 char(2byte) 0~65535
10진수
- 0
9 (0(10-1)) - 00
99 (0(10^2-1)) - 000
999 (0(10^3-1)) - 0000
9999 (0(10^4-1))
- 0
2진수
- 0
1 (0(2-1)) - 00
11 (0(2^2-1)) - 000
111 (0(2^3-1))
- 0
n비트로 표현할 수 있는 정수 개수: 2^n개
n=16일 경우
short타입의 표현 범위: -2^15 ~ 2^15-1
char 타입의 표현 범위: 0~(2^16-1)
타입간 변환
- 문자 - 숫자
- 숫자 → 문자: 3 + ‘0’
- 문자 → 숫자: 3 - ‘0’
- 문자열로의 변환
- 숫자 → 문자열: 3 + “” (빈 문자열)
- 문자 → 문자열: ‘3’ + “” (빈 문자열)
- 문자열 → 숫자: Integer.parseInt(”3”)
- 문자열 → 숫자: Double.parseDouble(”3.14”)
- 문자열 → 문자: “3”.charAt(0)
'Programming' 카테고리의 다른 글
[Java]연산자(2) (0) | 2023.05.25 |
---|---|
[Java]연산자(1) (0) | 2023.05.25 |
Python Django(장고)란? (0) | 2023.01.18 |
Node.js 프로젝트에서 환경변수 관리하기(파일로 분리) (0) | 2023.01.17 |
MacOS에서 MySQL Workbench 설치 및 데이터베이스 생성하기 (0) | 2023.01.16 |