1. 기본형
기본형
: 데이터의 가장 기본이 되는 타입
- 논리, 문자, 정수, 실수형으로 나뉨
- 논리형: boolean
- 문자형: char
- 정수형: byte, short, int, long
- 실수형: float, double
기본형의 종류와 크기
- 논리형
- true / false
- 조건식과 논리적 계산에 적용
- 문자형
- 문자 저장. 변수 당 하나의 문자만을 저장할 수 있음 (여러 개의 문자는 String)
- 정수형
- 정수 값 저장
- 주로 int, long을 사용하며 byte는 이진 데이터를 다루는데 사용
- 실수형
- 실수 값 저장
기본형의 표현 범위
- 1bit 에는 0과 1이 들어갈 수 있음
- 1bit는 0, 1 -> 2개
2bit는 00, 10, 01, 11 -> 4개
- 1bit는 0, 1 -> 2개
- n비트로 표현할 수 있는 값의 개수: 2^n 개
n비트로 표현할 수 있는 부호없는 정수의 범위: 0~2^n-1
n비트로 표현할 수 있는 부호있는 정수의 범위: -2^(n-1)~2^(n-1)-1
실수형의 표현 범위
- S: 부호 (양수 or 음수 표현)
- E: 지수 (2의 지수 표현)
- M: 가수 (소수점 이하 표현)
- 실수형은 정수형과 저장방식이 달라 오차가 발생함
- float이 int보다 더 큰 범위의 값을 저장할 수 있음
메모리에 값이 저장되는 과정
- 변수 b에 10진수 3을 저장하면 컴퓨터는 이것을 2진수로 변환해 메모리에 저장
- 타입마다 값이 저장되는 형식에 맞게 변환되어 저장됨
문자가 저장되는 과정
- 컴퓨터는 아스키 코드표를 기준으로 매칭하여 문자를 저장
아스키코드
- 128개의 문자조합을 제공하는 7비트 부호
- 알파벳, 숫자, 특수기호, 그 외 컴퓨터에 필요한 몇 가지만이 정의
유니코드
- 각 나라별 언어를 모두 표현하기 위해 나온 코드 체계
- 문자마다 고유한 코드 값을 제공하는 새로운 개념의 코드
- 16비트로 표현 (최대 65,536자 표현 가능)
UTF-8
- 유니코드를 사용하는 인코딩 방식 중 하나
- 영문/숫자/기호는 1바이트로, 한글/한자는 3바이트로 표현
- 전세계 모든 글자들을 한꺼번에 표현 가능
- 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지 사용
정수형 오버플로우
- 정수형은 해당 변수타입의 최솟값, 최댓값 범위를 넘어가면 값을 순환함
public class Variable3_1 {
public static void main(String[] args) {
// 부호가 있는 경우
short sMin = -32768;
short sMax = 32767;
// short 타입에서 최솟값 범위를 넘었을 때
// sMin - 1 = 32767
System.out.println("sMin = " + sMin);
System.out.print("sMin - 1 = ");
System.out.println((short)(sMin - 1));
// short 타입에서 최댓값 범위를 넘었을 때
// sMax + 1 = -32768
System.out.println("sMax = " + sMax);
System.out.print("sMax + 1 = ");
System.out.println((short)(sMax + 1));
// 부호없는 경우
char cMin = 0;
char cMax = 65535;
// short 타입에서 최솟값 범위를 넘었을 때
// cMin - 1 = 65535
System.out.println("cMin = " + (int)cMin);
System.out.print("cMin - 1 = ");
System.out.println((int)(--cMin));
// short 타입에서 최댓값 범위를 넘었을 때
// cMax + 1 = 0
System.out.println("cMax = " + (int)cMax);
System.out.print("cMax + 1 = ");
System.out.println((int)(++cMax));
}
}
문자와 숫자간의 변환
- 숫자 → 문자
- 숫자 + '0' → 문자
- 문자 → 숫자
- 문자 - '0' → 숫자
public class Variable3_2 {
public static void main(String[] args) {
int num = 5;
char ch = '5';
// 숫자 -> 문자
System.out.println("num = " + num);
// '0'이 48이기 때문에 결과값을 char 타입으로 변환 필요
System.out.println("num + '0' = " + (char)(num + '0'));
// 문자 -> 숫자
System.out.println("ch = " + ch);
System.out.println("ch - '0' = " + (ch - '0'));
// '5'에서 숫자 5로 변환되었기 때문에 결과값 6
System.out.print("ch - '0' + 1 = ");
System.out.print(ch - '0' + 1);
}
}
문자열로의 변환
- 숫자 → 문자열
- 숫자 + "" → 문자열
- 문자 → 문자열
- 문자 + "" → 문자열
public class Variable3_3 {
public static void main(String[] args) {
int num = 5;
char ch = '5';
// 숫자 -> 문자열
System.out.println("num + \"\" = " + num + "");
// num이 "5"로 변환되었기 때문에 "5" + "5"로 결과값은 "55"
System.out.println("num + \"\" + \"5\" = " + num + "" + "5");
// 문자 -> 문자열
System.out.println("ch + \"\" = " + ch + "");
// ch가 '5'에서 "5"로 변환되었기 때문에 "5" + "8"로 결과값은 "58"
System.out.println("ch + \"\" + \"8\" = " + ch + "" + "8");
}
}
문자열을 숫자, 문자로 변환
- 문자열 → 숫자
- Integer.parseInt("문자열");
- Double.parseDouble("문자열");
- 문자열 → 문자
- "문자열".charAt(0)
public class Variable3_4 {
public static void main(String[] args) {
String str1 = "100";
String str2 = "3.14";
String str3 = "8";
// 문자열 -> 숫자
System.out.println("Integer.parseInt(str1) = " + Integer.parseInt(str1));
// Integer.parseInt() 는 int 타입만 가능
//System.out.println("Integer.parseInt(str2) = " + Integer.parseInt(str2));
System.out.println("Double.parseDouble(str2) = " + Double.parseDouble(str2));
// 문자열 -> 문자
System.out.println("str1.charAt(0) = " + str1.charAt(0) + str1.charAt(1) + str1.charAt(2));
System.out.println("str3.charAt(2) = " + str3.charAt(0));
}
}
2. 참조형
- 기본형을 제외한 나머지 타입 (ex; String, System)
- 참조형 변수는 null 또는 메모리 주소를 저장
- null: 어떤 객체의 주소도 저장되지 않음을 의미
- 타입에 관계없이 변수의 크기가 항상 4byte (JVM이 64bit일 경우 8byte)
- 4byte는 2진수, 대략 40억개로 40억byte(4GB)의 메모리를 다룰 수 있음
import java.util.Date;
public class Variable3_5 {
public static void main(String[] args) {
Date date; // 참조형 변수 date 선언
date = new Date(); // date에 객체의 주소를 저장, new는 객체를 생성하는 명령어
System.out.println(date);
}
}
3. 문자와 문자열의 차이
public class Variable4_1 {
public static void main(String[] args) {
char ch1 = 'A'; // 문자
//char ch2 = 'AB';
//char ch3 = ''; // 빈 문자 불가능
String s1 = "ABC"; // 문자열
String s2 = ""; // 빈 문자열 가능
String s3 = "A"; // 문자 한 개도 문자열
// 아래 두 표현식 모두 사용 가능하지만 ss2 방식은 거의 사용하지 않음
String ss1 = "AB";
String ss2 = new String("AB");
System.out.println("ss1 = " + ss1);
System.out.println("ss2 = " + ss2);
}
}
4. 문자열 결합
public class Variable4_2 {
public static void main(String[] args) {
String s1 = "A" + "B"; // "AB"
System.out.println("s1 = " + s1);
// 문자열은 문자열하고만 결합 가능하기 때문에 숫자를 문자열로 바꾼 후 결합함.
String s2 = ""+ 7;
System.out.println("s2 = " + s2);
// 문자열 결합 순서에 의한 차이 확인
String s3 = "" + 7 + 7;
// "" + 7 + 7 => "7" + 7 => "7" + "7" = "77"
System.out.println("s3 = " + s3);
String s4 = 7 + 7 + "";
// 7 + 7 + "" => 14 + "" => "14"
System.out.println("s4 = " + s4);
}
}
5. 두 변수의 값 교환
public class Variable4_3 {
public static void main(String[] args) {
int x = 10, y = 20;
// x와 y값 교환
x = y; // x = 20;
// 변수는 하나의 값만 저장할 수 있기 때문에 기존의 x의 값 10은 사라지고 20이 됨.
y = x; // y = 20;
System.out.println("x = " + x); // 20
System.out.println("y = " + y); // 20
System.out.println();
int a = 10, b = 20;
int tmp; // 교환할 때 중간다리 역할을 할 변수 선언
tmp = a; // a = 10, tmp = 10
a = b; // b = 20, a = 20
b = tmp; // tmp = 10, b = 10
System.out.println("a = " + a); // 20
System.out.println("b = " + b); // 10
System.out.println("tmp = " + tmp); // 10
}
}
'내일배움캠프(Sparta) > Java Handbook' 카테고리의 다른 글
[Java Handbook] Part 2-2 (0) | 2023.09.12 |
---|---|
[Java Handbook] Part 2-1 (0) | 2023.09.12 |
[Java Handbook] Part 1-3 (0) | 2023.09.11 |
[Java Handbook] Part 1-2 (0) | 2023.09.11 |
[Java Handbook] Part 1-1 (0) | 2023.09.11 |