Deperecated/JAVA

JAVA 기본서 공부 -2 <변수&자료형>

누알라리 2019. 12. 19. 00:17

1. 변수란?

  • 데이터의 저장과 참조를 위해 할당된 메모리 공간.
  • 결국 변수를 선언해서 데이터를 저장하고, 그 변수를 이용해 이리저리 써먹는것이 코딩의 기본.

2. 프로그래밍에서의 실수

  • 소수점 이하의 값이 존재하는 숫자

3. JAVA의 기본 자료형(Primitive data type)

자료형 메모리 크기 데이터
bool 1 바이트 true or false
char 2 바이트 모든 유니코드 문자
byte 1 바이트 정수
short 2 바이트 정수
int 4 바이트 정수
long 8 바이트 정수 
float 4 바이트 실수
double 8 바이트 실수

4. 정수의 표현 방식

  • " 몇 바이트로 정수를 표현할 것인가? " -> 정수는 1,2,4,8바이트로 표현할 수 있다.

양의 정수 표현 방식

정수의 부호 컴퓨터의 표현 방식

가장 왼쪽에 존재하는 비트는 부호를 나타냄.

나머지 비트는 데이터의 양적인 크기를 나타냄

양의 정수 값에 "2의 보수"를 취하면 그것이 양의 음의 정수가 된다.

 

*2의 보수하는법

1. 1의 보수를 구한다.( 0과 1을 바꿔준다)

2. 1을 더한다

3. N바이트의 계산 결과는 N바이트 이므로, 올림 수는 그냥 버린다.

5. 실수의 표현 방식.

  • 실수의 계산에는 오차가 존재할 수 밖에 없다. 왜? 표현할 수 있는 값의 범위를 넓히고, 정미롣를 포기했기 때문에.

6. 정수 자료형의 이해

  • 정수 자료형에는 byte, short, int, long이 있다.
  • 정수 자료형을 선택할 때는 데이터가 쓰이는 곳이 "연산" 중심인지, "데이터 그 자체" 중심인지 파악하자.
질문 답변
메모리 공간만 보면 33+22 연산은 2바이트 정수로도 표현할 수 있으니 short 자료형을 쓰는게 더 좋은 코드 아닌가요?

아닙니다!

왜?

일반적으로 CPU는 int형 정수연산을 "가장 고속으로 처리하게끔" 설계 되어 있기 때문입니다.

따라서 자바는 "정수형 연산"을 진행할 때, 모든 피연산자를 int형으로 변환하는 과정을 거칩니다.

(하지만 int형보다 큰 long에서는 데이터 손실이 일어나기 때문에 형 변환이 일어나지 않습니다.)

그럼 byte랑 short는 왜 있음?

근데 위의 경우는 "연산"에 촛점을 맞춘 경우이고,

연산 보다는 "데이터 그 자체"에 더 집중해야할 때가 있다.

 

예를 들어, 게임 메쉬의 3차원 좌표들은 연산보다는 데이터 자체가 의미가 더 크기 때문에 byte, short, float이 쓰인다.

7. 실수 자료형의 이해

  • 실수 자료형에는 float, double이 있다.
  • 실수 자료형을 선택할 때는 정밀도에 있다.
  • 애초에 실수는 폭을 넓히고 정밀도를 줄였는데, 실수를 표현하는데 사용되는 바이트 수가 많아질수록 오차가 줄어든다. 따라서 표현하고자 하는 값이 요구하는 정밀도를 기준으로 자료형을 선택한다.
  • 근데 기본적으로 오차는 항상 발생한다.

8. e(E) 표기법

  • JAVA는 소수부가 큰 실수 표현의 편의를 위해 e표기법을 지원한다.
  • e(+-)n을 10의 (+-)n승으로 표현하는 것이다.

9. 문자 표기법의 이해

  • 하드웨어는 기본적으로 오로지 숫자만을 인식하고 표현할 수 있는 장치이다.
  • 따라서 문자를 숫자로 표현하는 몇몇 표준이 만들어졌는데, JAVA는 이중에서도 "유니코드" 표준을 사용한다.
  • 유니코드는 문자 하나를 2바이트로 표현하는 문자체계이다.
  • JAVA는 유니코드 지원으로 인해 한글을 영어, 일본어 등등과 동일한 수준으로 컨트롤 할 수 있다!
  • 문자는 char num1 = 'Hyunndy_블로그' 처럼 작은 따옴표로 표현되고, 실제로 저장되는건 문자의 유니코드 상수 값이다.

'Deperecated > JAVA' 카테고리의 다른 글

JAVA관련 토막 지식.  (0) 2019.12.19
JAVA 기본서 공부 - 4 <연산자>  (0) 2019.12.19
JAVA 기본서 공부 -3 <상수>  (0) 2019.12.19
Java 기본서 공부 - 1 <자바 개발환경>  (0) 2019.12.15
Java와 C++의 차이점.  (0) 2019.12.15