수강 날짜 : 2021-07-27(2일차)
강의명 : 04 문자자료형
강의명 : 05 실수와 논리 자료형
강의명 : 06 상수와 리터럴, 형변환
내부적으로는 비트의 조합으로 표현
인코딩 - 각 문자에 따른 특정한 숫자 값(코드 값)을 부여
디코딩 - 숫자 값을 원래의 문자로 변환
문자 세트
문자세트 : 문제를 위한 코드 값 (숫자 값)
아스키 : 1 바이트로 영문자, 숫자, 특수문자 등을 표현 함
유니코드 : 한글과 같은 복잡한 언어르 표현하기 위한 표준 인코딩
UTF-8, UTF-16이 대표적
문자를 변수에 저장하면? 문자에 해당하는 코드 값이 저장됨
문자형 변수 선언과 사용하기
character set: 문자를 숫자로 변환한 값의 세트
encoding: 문자가 숫자로 변환되는 것
decoding: 숫자에서 다시 문자로 변환되는 것
ASKII code: 알파벳과 숫자 특수 문자등을 1바이트에 표현하는데 사용하는 문자세트
UNICODE: 전 세계 표준으로 만든 문자 세트
UTF-8: 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음
UTF-16: 2바이트로 문자를 표현
실수는 double자료형이 기본
float를 사용할 때는 f, F 식별자를 사용함
실수에는 무한대의 숫자들이 있다. 무한대의 소숫점과 문한대의 정수 부분이 있다. 이러한 것을 컴퓨터로 표현하기 어렵다.
그래서 이를 표현하기 위해 2가지 방식으로 표현한다.
부동 소수점 방식
부동 소수점 방식의 오류
지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다.
실습
package variable;
public class DoubleTest {
public static void main(String[] args) {
double dNum = 3.14;
float fNum = 3.14f;
System.out.println(dNum);
System.out.println(fNum);
}
}
3.14는 기본적으로 double로 처리 되기 때문에 float fNum = 3.14로 적을 경우 에러가 발생한다.
저번 시간에 long의 경우와 비슷한 경우이다.
부동 소수점 방식의 오류 직접 확인하기
package variable;
public class DoubleTest {
public static void main(String[] args) {
double dNum = 1;
for(int i = 0; i < 10000; i++) {
dNum += 0.1;
}
System.out.println(dNum);
}
}
계산의 결과가 우리가 원하는 값이 아니다.
논리형 실습
public class BooleanTest {
public static void main(String[] args) {
boolean isMarried = false;
System.out.println(isMarried);
}
}
자료형 없이 변수 사용하기 (자바 10)
지역 변수 자료형 추론
변수에 대입되는 값을 보고 컴파일러가 추론
주의사항
var num = 10; // int num = 10
이런 식으로 된다. 자바 10버전 신기능
실무에서 아직 안쓰인다. 하지만 곧 지나면 가능할 것이다.
알아만 두되 사용하지는 않는다.
상수 : 변하지 않는 수 final 키워드 사용
리터럴 : 프로그램에서 사용하는 모든 숫자, 값, 논리 값
ex) 10, 3.14, 'A', true
모든 리터럴은 상수 풀(constant pool)에 저장되어 있음
상수 풀에 저장될 떄 정수는 int, 실수는 double로 저장 됨
형 변환
서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어남
묵시적 형 변환 실습
package variable;
public class ImplicitConversion {
public static void main(String[] args) {
byte bNum = 10;
int iNum = bNum; //작은 곳에서 큰 곳으로 묵시적 변환
System.out.println(bNum);
System.out.println(iNum);
int iNum2 = 20;
float fNum = iNum2; //실수가 더 정밀한 수이기 떄문에 문제없이 묵시적 변환이 실행된다.
System.out.println(fNum);
double dNum;
dNum = fNum +iNum;
System.out.println(dNum);
}
}
명시적 형 변환 실습
package variable;
public class ExplicitConversion {
public static void main(String[] args) {
int i = 1000;
byte bNum = (byte)i;
System.out.println(bNum);
double dNum1 = 1.2;
float fNum = 0.9F;
int iNum1 = (int) dNum1 + (int) fNum;
int iNum2 = (int)(dNum1 + fNum);
System.out.println(iNum1);
System.out.println(iNum2);
}
}
명시적 형 변환이 일어날 경우 손실이 발생 할 수 있음을 유의할 것
2진수, 8진수, 16진수
각 숫자 자리 마다 일정 수의 승을 두어 숫자를 관리하는 방법들
실습
package variable;
public class BinaryTest {
public static void main(String[] args) {
int num = 10;
int bNum = 0B1010;
int oNum = 012;
int xNum = 0XA;
System.out.println(num);
System.out.println(bNum);
System.out.println(oNum);
System.out.println(xNum);
}
}