22.11.30 배운 내용 정리
기본 자료형(정수, 문자, 실수, 논리 자료형)
변수 = 컴퓨터 내부의 메모리 공간에 저장됨
메모리 = 프로그램이 실행되는 작업 공간
int level = 10; = 4바이트(int형) 크기의 메모리 공간 이름(변수 이름)은 level이며 이 공간에 값 10을 넣는다는 뜻임
→ 이후에 level 변수를 연산에 사용하거나 값을 출력할 일이 있으면 이 공간에 있는 값을 가져와야 함.
(이때 변수 이름을 사용해서 값을 가져옴) 즉 '변수를 선언한다'는 것은 선언한 변수 이름으로 어떤 위치에 있는 메모리를
얼마만큼의 크기로 사용하겠다는 뜻임
기본 자료형의 종류
기본 자료형은 자바 라이브러리에서 기본으로 제공하며, 얼마만큼의 메모리를 어떻게 사용할 것인지가 이미 정해져있음
정수형 | 문자형 | 실수형 | 논리형 | |
1바이트 | byte | - | - | boolean |
2바이트 | short | char | - | - |
4바이트 | int | - | float | - |
8바이트 | long | - | double | - |
정수 자료형
정수 자료형 = 양수, 음수, 0을 나타내는 데 사용하는 자료형
정수는 byte형, short형, int형, long형 4가지 자료형으로 나타낼 수 있음
각 자료형은 메모리에서 사용하는 바이트 수와 용도가 다름
가장 많이 사용하는 정수 자료형은 int임
→ 컴퓨터에서 정수로 연산을 할 때 4바이트 단위로 처리하는 것이 가장 효율적이기 때문
자료형이 다른 정수끼리 더하면 두 정수를 더하기 전에 모두 int형으로 변환되고, 결과 값도 int형으로 저장됨
but 다른 자료형이 필요없는 것이 아님. 1바이트 단위로 데이터를 조작하는 경우도 있고,
다른언어(C, C++)와 호환이 가능하도록 short형을 사용하는 경우도 있음
※ 정수 자료형 유효 범위
자료형 | 바이트 크기 | 수의 범위 |
byte | 1 (1바이트 = 8비트) |
-2^7~2^7-1 (-128~127) |
short | 2 | -2^15~2^15-1 (-32,768~32,767) |
int | 4 | -2^31~2^31-1 (-2,147,483,648~2,147,483,647) |
long | 8 | -2^63~2^63-1 (2,147,483,648~) |
※ 주의할 점
int num1 = 12345678900;
long num2 = 12345678900;
= 두 문장 모두 오류 발생
첫 문장은 int로 표현할 수 있는 범위를 넘어섰기 때문에 오류 발생
두 번째 문장은 long을 그냥 쓰면 int형으로 변환하기 때문에 오류 발생
→ 이 경우엔 숫자를 long형으로 처리하라고 컴파일러에게 알려줘야함
→ long형을 나타내는 식별자인 L이나 l을 사용하려는 숫자 뒤에 붙여주면 됨
(int 범위 내부에 있는 값을 사용할 때는 식별자 필요 X)
ex. long num2 = 12345678900L;
문자 자료형
문자 세트 = 어떤 문자를 컴퓨터 내부에서 표현하려면 특정 정수 값으로 정하자고 약속하는데, 이런 코드 값을 모아 둔 것
문자 인코딩 = 문자를 정해진 코드 값으로 변환하는 것
문자 디코딩 = 코드 값을 다시 문자로 변환하는 것
아스키 코드 = 가장 기본이 되는 문자 인코딩으로 영문자, 숫자, 특수 문자 등을 나타내는 문자 세트임
→ 아스키 코드는 1바이트만 사용 : 영문자는 대문자, 소문자, 특수 문자, 기호를 포함해도 1바이트(2^8=256개)로 표현할 수 있기 때문
유니코드 = 각 언어의 표준 인코딩을 정의해 놓은 것으로 유니코드의 1바이트는 아스키 코드 값과 호환되고, 그밖의 문자를 2바이트나 그 이상의 조합으로 표현함
→ 자바는 유니코드에 기반하여 문자를 표현하기 때문에, 자바의 문자 자료형인 char형은 2바이트를 사용함
ex. char myChar = 'A'; 이때 문자를 변수에 대입하면 문자 그대로 저장되는 것이 아니라 그 문자에 해당하는 정수 값이 저장됨
프로그램에서 문자를 사용할 때는 항상 작은따옴표(' ')사용
문자를 여러 개 이은 문자열을 사용할 때는 큰따옴표(" ")사용
문자열은 "Hello"처럼 여러 개의 문자를 큰따옴표로 감싸 표현하고 기본 자료형으로는 표현할 수 없음
문자열 끝에는 항상 널 문자('\0')가 있으며, 이 널 문자는 문자열의 끝을 나타냄
문자와 문자열은 전혀 다른 값을 가짐. 즉 'A'와 "A"는 다른 값임
→ 'A'는 정수 값 65로 정해져 있는 문자이고, "A"는 "A\0"과 같이 쓰임
자바에서 문자열을 다룰 때 String 클래스 사용
유니코드를 표현하는 인코딩 방법은 크게 UTF-8과 UTF-16이 있음
UTF-8은 UTF-16에 비해 메모리 낭비가 적고 전송 속도가 빠름
인터넷에서는 UTF-8 많이 사용(각 문자마다 1~4바이트까지 사용하여 문자를 나타내는 방식)
자바의 기본 인코딩 방식은 UTF-16(모든 문자 2바이트로 표현)
char형은 문자 자료형이지만 컴퓨터 내부에서는 정수 값으로 표현되기 떄문에 정수 자료형으로 분류하는 경우도 있음
→ char형과 다른 정수 자료형의 차이점 : char형은 음수 값 표현 불가능
실수 자료형
실수는 정수와 표현 방식이 다름
부동 소수점 방식 = ex. 실수 값 0.1을 → 1.0 X 10^-1처럼 가수 부분(1.0)과 지수 부분(-1)을 나누어서 실수를 나타내는 방식
※ 밑수는 2, 10, 16 등을 주로 사용함
실수 자료형 종류 = float형, double형
float형 = 부호 1비트, 지수부 8비트, 가수부 23비트로 총 32비트(4바이트)사용 + 식별자 F또는 f사용
double형 = 부호 1비트, 지수부 11비트, 가수부 52비트로 총 64비트(8바이트)사용
자바에서 실수는 double형을 기본으로 사용 = 더 정밀한 실수 표현이 가능하기 때문
부동 소수점 방식의 오류 = 지수와 가수로 나타내는 부동 소수점 방식은 지수로 표현되는 값이 0을 나타낼 수 없음.
따라서 부동 소수점 값을 연산하면 약간의 오차가 발생할 수 있음
위 예제의 실행 결과는 1에 0.1을 10,000번 더했으므로 1001일 것 같지만 결과값은 예상과 다름
하지만 약간의 오차를 감수하고라도 더 넓은 범위의 실수 값을 표현하기 위해 부동 소수점 방식을 사용함
논리 자료형
논리 자료형 = 어떤 변수의 참, 거짓의 값을 나타내는 데 사용
논리 자료형 종류 = boolean형(프로그램 수행이 잘되었는지 여부, 값이 존재하는지 여부 등을 참거짓으로 나타낼 수 있음)
boolean형 선언 방식 = ex. boolean isMarried;
boolean형 변수는 1바이트로 값을 저장하며 true(참), false(거짓) 두 가지 값만 가짐
즉 boolean형 변수는 true나 false만 대입할 수 있고 그 결과 값도 true, false로 출력됨
자료형 없이 변수 선언하기(자바 10부터 생긴 문법)
자바 10부터는 자료형을 쓰지 않고도 변수 사용이 가능한데, 이를 '지역 변수 자료형 추론'이라 함
변수에 대입되는 자료를 보고 컴파일러가 추측하여 알 수 있기 때문에 자료형을 쓰지 않고 변수 사용이 가능한 것임
var을 사용하여 변수를 선언하면 num은 정수(int), dNum은 실수(double), str은 문자열(String)으로 컴파일됨
ex. var num = 10; → int num = 10;
var dNum = 10.0; → double dNum = 10.0;
var str = "hello"; → String str = "hello";
※ 자바에서 var를 사용할 때 유의할 점
① 한번 선언한 자료형 변수를 다른 자료형으로 사용 불가
ex. str = "test"; (O)
str = 3; (X)
→ str 변수는 이미 String으로 선언되었기 때문에 다시 정수 값을 넣을 수 없음
② var로 자료형 없이 변수를 선언하는 방법은 *지역 변수만 가능함
*지역 변수 = 프로그램의 { }내에서 사용할 수 있는 변수
'코딩 국비 학원 > Do it! 자바 프로그래밍 입문' 카테고리의 다른 글
[Do it! 자바 프로그래밍 입문]반복문, 클래스, 객체 (0) | 2022.12.03 |
---|---|
[Do it! 자바 프로그래밍 입문]비트 연산자, 조건문 (0) | 2022.12.02 |
[Do it! 자바 프로그래밍 입문]상수, 리터럴, 형 변환, 기본 연산자 (0) | 2022.12.01 |
[Do it! 자바 프로그래밍 입문] 진수, 변수 (0) | 2022.11.29 |
[Do it! 자바 프로그래밍 입문] 자바의 특성 (0) | 2022.11.28 |