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);
	}
}	

좋은 웹페이지 즐겨찾기