-
변수(Variable)
- 변수 : 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름
- 자바에서 변수는 관례적으로 캐멀 표기법을 따른다.
ex) int mathScore; - 변수는 선언될 때가 아니라 값이 대입될 때 메모리에 할당된다.
- 초기화되지 않은 변수를 사용할 경우 컴파일 에러 발생 - 지역변수(local variable)는 되도록 초기화해주는 것이 좋다.
데이터 타입 별 데이터 저장
- 기본 자료형 변수: Stack 메모리에 값을 저장 (call by value)
- 참조 자료형 변수: Stack 메모리에 객체의 주소만 저장
- 객체는 Heap 메모리에 저장
변수 이름 작성 시 주의 사항
- 숫자로 시작 불가
- 특수 문자는 $와 _만 사용 가능
- 키워드 사용 불가
자료형(Data Type)
자료형(데이터 타입) : 데이터를 저장(표현)하는 기준
기본 자료형(Primitive Data Type)
- 논리형 : boolean = true, false
- 1 byte 단위로 저장 (자바의 메모리는 최소 단위가 byte이기 때문에 true, false(1 bit)만 표현하더라도 최소 단위인 byte(8 bite)로 메모리를 할당한다.) - 문자형 : char(2바이트 유니코드 기반 : 0 ~ 65535)
- 작은따옴표('')로 단일 문자를 대입하거나 유니코드를 직접 입력하여 작성한다.
예) char c1 = 'A'; 또는 char c1 = 65;
- 빈 문자로 초기화할 때는 ''로 입력하면 컴파일 에러가 발생하므로 공백 한 칸(' ')으로 입력한다.
- 유니코드를 기반으로 하여 영어 이외의 언어도 표현이 가능하다.
- 실제로 저장되는 값은 문자에 대응하는 유니코드 값(정수)이므로 정수형으로 분류하기도 한다. - 정수형
byte(1 바이트 : -128 ~ 127)
short(2 바이트 : -32,768 ~ 32767)
int(4 바이트 : -2,147,483,648 ~ 2,147,483,647; 약 20억)
long(8 바이트 : 대략 ±900경) - 실수형
- 자바는 부동소수점 방식으로 float 타입과 double 타입의 값을 메모리에 저장한다.
float(4 바이트)
- dobule에 비해 소숫점 이하의 값의 정확도가 떨어진다.
double(8 바이트)
참조 자료형(Reference Data Type)
- 클래스, 인터페이스, 배열
- 프로그래머가 정의한 데이터 타입(대문자로 시작)
리터럴(Literal)
리터럴 : 코드에서 프로그래머가 직접 입력한 값
- 정수형은 byte, short의 표현 범위를 넘어가면 int로 인식한다. long 타입으로 값을 부여하려면 값 뒤에 "l" 또는 "L"을 붙여줘야 한다.
- 실수형은 기본적으로 double로 인식한다. float 타입으로 값을 부여하려면 값 뒤에 "f"를 붙여줘야 한다.
진수 별 리터럴 작성 방법
- 2진수 : 0b 또는 0B로 시작
int x = 0b1011l; (10진수 : 11) - 8진수 : 0으로 시작
int x = 013; (10진수 : 11) - 16진수 : 0x 또는 0X로 시작 0 ~ 9까지는 숫자, 이후부터는 알파벳으로 작성(A ~ F, a ~ f)
int x = 0xB3 (10진수 : 179)
실수 리터럴
- 알파벳 e 또는 E를 사용하여 10의 거듭제곱을 다음과 같은 리터럴로 대입할 수 있다.
double d1 = 7e3; //7.0 x 10³ = 7000
double d2 = 0.35E-3; //0.00035
이스케이프 문자(escape sequence)
이스케이프 : 특수문자로 키보드에서 제어기능을 담당하는 키들을 표현해주는 것
자주 사용하는 이스케이프 문자
이스케이프 문자 설명 \" " 문자 출력 \' ' 문자 출력 \\ \ 문자 출력 \u16진수 16진수 유니코드에 해당하는 문자 출력 \t 탭만큼 띄어쓰기 \n 줄바꿈 \r 캐리지 리턴
텍스트 블록
- 큰따옴표를 3개로 감싸진 문자열을 작성하면 이스케이프하지 않아도 작성한 문자열 그대로 저장된다.
- Java 13부터 지원
- 텍스트 블록에서 Enter 키를 입력하지 않고 "\n"을 입력해도 줄바꿈이 되고, 줄바꿈을 하지 않으려면 "\"를 붙이면 된다.
형변환
- 자바는 데이터 타입에 민감한 언어이다.
자동 형변환
- 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생한다.
- 정수 타입이 실수 타입으로 대입될 때 정수는 실수로 변환된다.
- 값의 허용 범위는 char 타입이 byte 타입보다 크지만 char 타입은 음수를 포함하지 않으므로 byte 타입이 char 타입으로 자동 형변환이 발생하지 않는다.
- 기본 타입의 허용 범위 비교
byte < short, char < int < long < float < double
연산 시 자동 형변환
1. int 타입 이하 변수의 정수 연산
피연산자를 int 타입으로 형변환 후 연산 수행
결과는 int 타입이 되므로 int 타입 변수로 저장 가능2. int 타입보다 큰 변수가 포함된 정수 연산
피연산자를 long 타입으로 형변환 후 연산 수행
결과는 long 타입이 되므로 long 타입 변수로 저장 가능3. 동일한 실수 타입 변수끼리의 실수 연산
결과는 연산 전 타입을 유지4. double 타입의 변수가 포함된 실수 연산
피연산자를 double 타입으로 형변환 후 연산 수행
결과는 double 타입이 되므로 double 타입 변수로만 저장 가능
정수 타입 변수도 모두 double 타입의 실수로 형변환이 된다.
※ 연산 결과는 피연산자의 타입에 의해 결정되므로 자동 형변환되는 경우를 고려하여 연산 수행 전에 피연산자를 얻고자하는 자료형으로 강제 형변환해야 한다.
<실수가 포함된 연산 결과를 정수로 저장>int i = 10;double d = 3.7;int result = i + (int)d; //10 + 3 = 13cs
<정수가 포함된 연산 결과를 실수로 저장>int i = 3;double d = 4;//double result = i / d; //0double result = (double)i / d; //0.75cs 5. 문자열을 포함한 숫자의 연산
괄호 안의 수식을 먼저 계산한 후 왼쪽부터 차례대로 숫자를 계산하고, 문자열과 만나면 숫자를 문자열로 형변환한다. 예) 1 + 2 + "3" + (4 + 5) → 3 + "3" + 9 → "33" + 9 → 339
결과는 문자열로 저장된다.
강제 형변환(Casting)
- 값의 허용 범위가 큰 타입에서 허용 범위가 작은 타입으로 변경할 때와 같이 데이터가 소실될 위험이 있는 경우에는 컴파일러가 자동 형변환하지 않는다.
- 데이터가 소실되더라도 형변환을 하려면 형변환 연산자를 사용하여 강제 형변환을 하면 된다.
예) int i = (int) 3.141592;
pintf() 메소드의 형식 문자열 포맷
printf("형식 문자열", 값1, 값2, ...)
<형식 문자열의 포맷>
포맷: % [argument_index$] [flags] [width] [.precision] conversion 내용: 값의 순번 자릿수 맞춤 문자열 전체 자릿수 소수 자릿수 변환 문자 예시: % 1$ 0 10 .2 f - %, converson(변환 문자)는 필수로 작성하고, 이외는 생략 가능하다.
- 대입할 값이 여러 개인 경우에는 [argument_index$] 자리에 순번을 입력해줘야 한다.
예) %1$010..2f - 실수를 소수점 포함하여 총 10자리, 소수점 이하 2자리, 왼쪽 빈 자리는 "0"으로 채워서 출력
0000123.45
- 변수 : 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름