Chapter 02. 변수와 자료형(2)
수강 날짜 : 2021-07-27(2일차)
강의명 : 04 문자자료형
강의명 : 05 실수와 논리 자료형
강의명 : 06 상수와 리터럴, 형변환
문자 자료형
내부적으로는 비트의 조합으로 표현
인코딩 - 각 문자에 따른 특정한 숫자 값(코드 값)을 부여
디코딩 - 숫자 값을 원래의 문자로 변환
문자 세트
문자세트 : 문제를 위한 코드 값 (숫자 값)
아스키 : 1 바이트로 영문자, 숫자, 특수문자 등을 표현 함
유니코드 : 한글과 같은 복잡한 언어르 표현하기 위한 표준 인코딩
UTF-8, UTF-16이 대표적
문자를 변수에 저장하면? 문자에 해당하는 코드 값이 저장됨
문자형 변수 선언과 사용하기
- 문자를 위한 데이터 타입 : char
- 내부적으로 숫자로 표현되므로 숫자를 넣어도 문자가 출력
character set: 문자를 숫자로 변환한 값의 세트
encoding: 문자가 숫자로 변환되는 것
decoding: 숫자에서 다시 문자로 변환되는 것
ASKII code: 알파벳과 숫자 특수 문자등을 1바이트에 표현하는데 사용하는 문자세트
UNICODE: 전 세계 표준으로 만든 문자 세트
UTF-8: 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음
UTF-16: 2바이트로 문자를 표현
실수와 논리 자료형
실수는 double자료형이 기본
float를 사용할 때는 f, F 식별자를 사용함
실수에는 무한대의 숫자들이 있다. 무한대의 소숫점과 문한대의 정수 부분이 있다. 이러한 것을 컴퓨터로 표현하기 어렵다.
그래서 이를 표현하기 위해 2가지 방식으로 표현한다.
부동 소수점 방식
- 실수는 정수 보다 정밀하기 때문에 정수와는 다른 방식으로 표현해야 함
- 부동 소수점 방식으로 실수 값 0.1표현
1.0 * 10^(-1) - 지수부와 가수부로 표현 함
- 컴퓨터에서는 밑수를 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)
지역 변수 자료형 추론
변수에 대입되는 값을 보고 컴파일러가 추론
주의사항
- 자바 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);
}
}
Author And Source
이 문제에 관하여(Chapter 02. 변수와 자료형(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fe26ming/Chapter-02.-변수와-자료형2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)