변수 = 변하는 수
변수 = 값을 저장할 수 있는 메모리상의 공간(이 값은 변경될 수 있음)
변수 선언 : 변수의 타입과 변수 이름을 설정
변수 초기화 : 메모리상의 공간에 쓰레기 값이 남아 있을 수 있기 때문에 변수 사용전 최초로 값을 저장하는 것
변수의 명명규칙
1. 대소문자가 구분됨
2. 길이 제한이 없음
3. 예약어 사용금지 (대소문자가 다르면 가능)
4. 숫자로 시작 금지
5. 특수문자는 '_' 와 '$'만 사용가능
자바 컨벤션
1. 클래스 이름의 첫 글자는 항상 대문자
2. 변수와 메서드 이름의 첫 글자는 항상 소문자
3. camel case 사용
4. 상수의 이름은 모두 대문자로 하고, 여러 단어인 경우 '_' 으로 구분
변수의 이름은 짧으면 좋지만 약간 길더라도 용도를 알기 쉽게 의미있는 이름으로 하는것이 좋다
변수 선언시 주석으로 변수에 대한 정보를 주는 것도 좋다
자료형
1. 기본형 : 실제 값을 저장 (boolean, char, byte, short, int, long, float, double)
2. 참조형 : 값이 저장되어 있는 주소를 값으로 저장
자바는 c와 달리 참조형 변수 간의 연산이 불가하여 연산에 사용되는 것은 모두 기본형
기본형 중 boolean 을 제외한 나머지 7개의 기본형은 서로 연산과 변환이 가능
자바의 정석 29p에서 cpu가 가장 효율적으로 처리할 수 있는 타입이 int 이기때문에 int를 자주 사용한다고 나와있는데 32bit 의 경우에 cpu가 한번에 4byte씩 읽어서 int가 가장 효율적이지만
64bit의 경우 cpu가 한번에 8byte씩 읽어서 long이 더 효율적일 것으로 보인다.
c 같은 경우에는 size_t 를 사용하면 32bit 환경에서는 4byte 크기로 64bit 환경에서는 8byte 크기로 사용이 되어 항상 효율적으로 사용이 가능하다고 하는데 java에서는 이런 타입이 따로 존재하는지 모르겠다.
상수 선언시 변수 선언 앞에 final 추가
상수는 선언과 동시에 초기화 해야함, 이후 값 변경 불가
상수는 리터럴에 의미있는 이름을 붙여 코드의 이해와 수정을 쉽게 만들어 줌
long 타입의 리터럴에는 접미사 'l' 또는 'L'을 붙인다
jdk 1.7 부터 리터럴 중간에 '_' 구분자를 넣을 수 있음 (100_000_000)
float 타입의 리터럴에는 접미사 'f' 또는 'F'를 붙인다
double 타입의 리터럴에는 접미사 'd' 또는 'D'를 붙이거나 생략 가능
p를 이용하여 실수 리터럴을 16진 지수형태로 표현 가능 (0x12p3 = (1x16^1 + 2x16^0) x 2^3)
변수의 타입과 변수에 저장될 리터럴의 타입이 다른 경우 변수가 더 넓은 범위 이면 가능하지만 변수가 더 좁은 범위인 경우에는 컴파일 에러 발생
문자 리터럴은 ''으로 감싸고
문자열 리터럴은 ""으로 감싼다
'' 안에는 하나의 문자가 꼭 있어야하고
"" 안에는 비어있는 경우 빈문자열이다
문자열은 덧셈 연산자를 이용하여 결합할 수 있다.
덧셈 연산자는 피연산자가 모두 숫자이면 두 수를 더하지만 한쪽이 문자열이면 다른 쪽도 문자열로 변환한 뒤 문자열을 결합한다 ("java" + 8.0 의 결과는 "java8.0")
scanner 클래스를 사용하여 화면에서 입력 받을 수 있음
scanner.nextLine() 으로 문자열 입력받고
Integer.parseInt(입력받은 문자열) 로 문자열을 int 타입의 값으로 변환가능
c와 달리 java에서는 char은 2byte이다
c는 아스키코드를 java는 유니코드를 사용하기 때문이다.
unsigned로 0~65535 범위를 저장할 수 있다.
실수형의 정밀도
float : 7자리
double : 15자리
정수형간의 형변환
큰 타입에서 작은 타입으로 변환시 값 손실 발생가능
작은 타입에서 큰 타입으로 변환시 남는 공간은 양수이면 0으로 음수이면 1로 채워짐
실수형 간의 형변환
double -> float : 두 타입의 범위 차이로 인해 무한대가 발생하거나 0이될 수도 있음
float -> double : 두 타입의 정밀도 차이로 인해 리터럴을 바로 double 타입으로 저장한 것과 float 타입으로 저장하고 형변환 한것의 값의 차이가 날 수 있음
정수형에서 실수형으로 형변환
실수형의 정밀도 제한으로 인한 오차가 발생할 수 있음
int는 최대 10자리 정밀도를 요구함 -> float로 형변환시 오차 발생 가능
실수형에서 정수형으로 형변환
소수점 이하의 값은 버려점 (반올림 없음)
정수 부분이 정수형 범위를 초과하는 경우 오버플로우 된 값으로 저장됨
자동 형변환
서로 다른 타입간의 대입이나 연산을 할 때 컴파일러가 생략된 형변환을 자동적으로 추가함
그러나 범위를 초과하는 값을 저장하려하면 에러 발생하므로 명시적 형변환이 필요함
자동 형변환은 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환됨