변수와 메모리
변수를 선언한다는 것은 선언한 변수 이름으로 어떤 위치에 있는 메모리를 얼마만큼의 크기로 사용하겠다는 뜻입니다.
기본자료형과 메모리
자바에서 제공하는 자료형은 기본 자료형과 참조 자료형이 있습니다. 기본 자료형은 자바 라이브러리에서 기본으로 제공한다. 자료형에 따라 저장할 수 있는 값의 종류와 사용할 공간의 크기가 정해져 있다.
1바이트 : byte, boolean
2바이트 : short, char
4바이트 : int, float
8바이트 : long, double
정수 자료형
- 정수자료형은 양수, 음수, 0을 나타낼 수 있다.
- 정수자료형에는 바이트 크기별로 byte, short, int, long형 4종류가 있다.
- 정수 자료형 중 가장 많이 사용하는 것은 int형이다. (왜냐하면, 컴퓨터가 + - 연산을 할 때 4바이트를 기준으로 연산하기 때문이다.)
- 정수 자료형의 첫 번째 자리는 부호비트이다.
- 0이면 양수, 1이면 음수를 의미한다.
- 예를 들어 byte형 변수는 부호비트를 제외한 나머지 7비트로 -128~127까지 표현할 수 있다.
- 만약, 범위에 벗어나는 값을 대입하면 오류가 발생한다.
정수 자료형은 왜 4가지나 될까?
만약 내가 숫자 1~100 까지 저장할 변수가 1,000개가 필요하다면, 어떤 자료형을 사용해야할까요? byte 입니다. 왜냐하면 메모리 낭비를 최소화 할 수 있기 때문입니다. 변수가 적으면 대부분 int 형을 사용하지만 동영상이나, 음악 같은 스트리밍을 할 때는 끊기면 안되기 때문에 자료를 최대한 쪼개서 보내야 해서 자료형이 중요합니다.
문자 자료형
- 문자자료형은 문자 하나를 나타낼 수 있다. (문자열과는 전혀 다른 것이다!)
- ‘ ‘ 작은 따음표로 값을 감싸주어야 한다.
- String 은 문자열을 저장할 수 있는 참조 자료형이다. (참조 자료형은 클래스를 기반으로 한 객체 개념이다. 그래서 앞 글자가 대문자로 시작한다)
- " " 큰 따옴표로 값을 감싸주어야 한다.
인코딩 & 디코딩
- 컴퓨터는 문자를 이해할 수 없기 때문에 문자도 숫자로 변환해서 저장해야 한다.
- 문자를 정해진 코드 값으로 변환하는 것을 '문자 인코딩 encoding' 이라고 합니다.
- 가장 기본이 되는 문자 인코딩은 ASCII 코드입니다.
- 영문자는 대문자, 소문자, 특수 문자, 기호를 포함해 1바이트로 표현 가능해서 ASCII 코드는 1 바이트만 사용합니다.
- 하지만 한글 등 다른 언어는 2바이트 이상을 사용하게 되는데, 이때 각 언어의 표준 인코딩을 정의한 것이 '유니코드 unicode' 입니다.
- 자바는 유니코드에 기반하여 문자를 표현하기 때문에, 자바의 문자 자료형인 char형은 2바이트를 사용합니다.
- 문자를 변수에 대입하면 문자 그대로 저장되는 것이 아니라 그 문자에 해당하는 정수 값(ASCII 코드 값) 이 저장됩니다.
- char 형은 문자 자료형이지만 다른 자료형과 마찬가지로 컴퓨터 내부에서는 정수 값으로 표현되기 때문에 정수 자료형으로 분류하는 경우도 있습니다. 다른 정수형과의 차이점은 char 형은 음수 값을 표현할 수 없다는 것입니다.
- 유니코드를 표현하는 인코딩 방법은 크게 UTF-8 과 UTF-16 이 있습니다. 자바의 기본 인코딩 방식은 모든 문자를 2바이트로 표현하는 UTF-16 입니다. 그런데 모두 2바이트로 표현하면 1바이트로 표현할 수 있는 알파벳 같은 자료를 저장하는 경우에 메모리가 낭비될 수 있습니다. UTF-8 은 메모리 낭비가 적고 전송 속도가 빠릅니다. 이러한 특성으로 UTF-8 은 인터넷에서 많이 사용합니다.
- 반대로 코드 값을 다시 문자로 변환하는 것을 '문자 디코딩 decoding' 이라고 합니다.
실수 자료형
- 실수 값 3.14를 컴퓨터 내부에서 표현할 때는 정수 부분과 소수 부분을 따로 표현합니다.
- 부동 소수점 방식을 활용해서 소수점을 표현하게 됩니다.
- 실수 자료형에는 float 형과 double 형이 있다. (4바이트, 8바이트)
- float 자료형은 부호 1비트, 지수부 8비트, 가수부 23비트로 총 32비트(4바이트). float 형에 값을 대입할 때는 F 혹은 f 를 숫자 뒤에 붙여서 식별해주어야 합니다. 앞에서 배운 long형의 식별자인 l, L 과 비슷합니다.
- double 자료형은 부호 1비트, 지수부 11비트, 가수부 52비트로 총 64비트(8바이트). float 형에 비해 double 형이 더 정밀하게 실수를 표현할 수 있습니다.
- 부동 소수점 방식은 본연의 오류를 가지고 있습니다. 1 + 0.1 이 연산을 1만번 반복하면 1,001 일 것 같지만 1001.00000000159 와 같이 이상한 값이 나옵니다. 이런 오류가 발생하는 이유는 부동 소수점 방식에서는 지수에 0이 올 수 없기 때문입니다. 하지만 약간의 오차를 감수하고라도 더 넓은 범위의 실수 값을 표현하기 위해 부동 소수점 방식을 사용합니다.
논리 자료형
- 논리자료형은 참,거짓 값을 나타낼 때 사용한다.
- 결혼을 했는지? 값이 존재하는지? 와 같은 여부를 나타낼 때 주로 사용한다.
- boolean형은 true(참), false(거짓) 두가지 값만 가진다.
- 변수의 이름은 일반적으로 is~로 시작한다.
상수와 리터럴
- 상수는 프로그램에서 변하지 않는 수를 만들 때 사용한다.
- 예를 들어 원주율이나 1년은 12개월이라는 값 등이 있다.
- 상수는 한번 선언하면 변경할 수 없다.
- 상수 변수를 네이밍 할 때는 모두 다 대문자를 사용해야 하고, 언더바를 사용해서 표현해야 한다.
- 리터럴은 프로그램에서 변수에 대입하여 사용했던 모든 숫자, 문자, 논리값을 말한다.
- 리터럴은 프로그램이 시작할 때 시스템에 같이 로딩되어 특정 메모리 공간인 상수 풀(constant pool)에 놓입니다. 예를 들어, int num = 3; 문장에서 값 3이 메모리 공간 어딘가에 존재해야 num 변수에 그 값을 복사할 수 있습니다. 즉 숫자가 변수에 대입되는 과정은 일단 숫자 값이 어딘가 메모리에 쓰여 있고, 이 값이 다시 변수 메모리에 복사되는 것입니다.
- 자바에서 정수를 표현하는 메모리의 기본 크기는 4바이트입니다. 이는 상수 풀에서도 마찬가지입니다. 그래서 Long 형은 식별자 l 이나, L 로 이 리터럴은 long 형으로 저장되어야 한다는 것을 알려주는 겁니다.
- 실수도 마찬가지 입니다. 모든 실수 리터럴은 double형(8바이트)으로 처리됩니다.그래서 float 형의 리터럴에게는 float 형으로 처리하라는 식별자인 f 혹은 F 를 해주게 됩니다.
'[그린컴퓨터] Server > JAVA(기본)' 카테고리의 다른 글
기본 연산자 {항, 대입, 부호, 산술, 증가·감소, 관계, 논리·단락회로평가, 복합 대입, 조건} (0) | 2023.05.11 |
---|---|
형 변환 {정의, 묵시적 형 변환, 명시적 형 변환} (0) | 2023.05.10 |
변수 이름 정하는 규칙 {제약사항} (0) | 2023.05.09 |
변수란 무엇일까? {변수, 변수선언, 변수 초기화} (0) | 2023.05.09 |
자바를 쓰면 왜 좋을까요? {독립적, 객체지향, 안정성, 오픈소스} (0) | 2023.05.09 |