참조 : Do it Java 완전정복
http://www.yes24.com/Product/Goods/103389317
변수와 자료형
- 데이터를 저장하려면 메모리에 값을 저장할 공간을 생성하고 이름을 부여해야한다.
- 변수 - 메모리 공간에 부여하는 이름
- 자료형(data type) - 메모리 공간은 목적에 따라 크기와 특징이 다름
- 자료형에 따라 저장할 수 잇는 값의 종류와 특징이 결정된다.
자료형 선언하기
- 변수를 사용하기 전에 반드시 자료형을 선언해야한다.(스크립트언어는 자료형 선언 않고도 변수사용가능)
- 자료형 선언 방법 : 자료형 변수명; ex) int a;
- 자료형은 반드시 한 번만 선언해야 한다.
- 변수의 자료형 선언시, 메모리에는 선언된 자료형의 데이터만 저장할 수 있는 공간이 만들어지는데, 메모리에서 한 번 만들어진 공간은 사라질 수는 있어도 데이터를 저장하는 기능은 변경할수 없기 때문이다.
변수 사용하기
변수 선언과 함께 값 대입하기
- 자료형 변수명 = 값; ex) int a = 3;
변수 선언과 값 대입 분리하기
- 자료형 변수명; ex) int a; 변수명 = 값; ex) a = 3;
이름 짓기
- 변수는 대입된 값 변경 가능, 상수(항상 똑같은 값)는 변경 불가
이름 지을때 필수 사항
- 변수,상수 메서드 이름 지을 때 반드시 지켜야 하는 공통 사항
- 특수 문자는 밑줄(_)과 달러($)표기만 사용가능
- 첫 번째 글자로 숫자 사용 불가
- 예약어 사용 불가 ex) int , public, static
변수명 지을 때 권장 사항
- 영문 소문자로 시작
- 영문 단어를 2개이상 결합시, 새로운 단어 첫 글자 대문자로 (낙타표기법)
- ex) myWork, maxValue, bestPosition
상수명 지을 때 권장 사항
- 모두 대문자로 표기
- 단어 여러개 결합시, 밑줄()을 사용 ex) final int MY_DATA;
메서드 권장사항 → 변수명과 동일
변수의 생존기간
- 변수는 개발자가 직접 생성하지만, 메모리에서 변수를 삭제하는 작업은 JVM이 알아서 한다.
- 생성된 변수는 자신이 선언된 열린 중괄호{의 쌍인 닫힌 중괄호}를 만나면 메모리에서 삭제됨
- 변수의 생성시점은 값을대입한 시점이 아니라 선언한 시점이다.
자료형의 종류
- 자바 메모리 구조( 3가지 영역)
클래스 영역 | | |
---|
정적 영역 | 스택 영역(변수) | 힙 영역(객체) |
상수 영역 | | |
메서드 영역 | | |
기본 자료형과 참조자료형 차이
자료형의 이름 규칙
- 기본자료형 8개의 이름은 모두 소문자로 시작
- 참조자료형은 모두 대문자로 시작
실제 데이터값의 저장 위치
- 기본 자료형은 스택 메모리에 생성된 공간에 실제 변숫값을 저장하는 반면,
- 참조자료형은 실제 데이터값은 힙 메모리에 저장하고, 스택메모리의 변수 공간에는 실제 변숫값이 저장된 힙 메모리의 위칫값을 저장한다.
- 자바는 힙 메모리에 직접 접근 불가, 반드시 위칫값을 저장하고 있는 참조변수가 필요
기본 자료형의 메모리 크기와 저장할 수 있는 값의 범위
| 자료형 | 자료의 크기 |
---|
부울대수 | boolean | 1byte |
정수 | byte | 1byte |
정수 | short | 2byte |
정수 | int | 4byte |
정수 | long | 8byte |
실수 | float | 4byte |
실수 | double | 8byte |
문자(정수) | char | 2byte |
- 대입 연산자(=)를 중심으로 양쪽의 자료형이 똑같아야 한다.
정수 자료형 -byte, short, int, long
- 리터럴(literal) : 코드에 직접 작성한 값
- 크기가 작은 자료형을 큰자료형에 대입하면 컴파일러 가 자동 타입변환(type casting)을 수행
- byte와 short 범위 내 정숫값 - byte/short 자료형으로 인식
- 크기 상관없이 int,long에 정수 리터럴 입력시 int 자료형으로 인식.
- 정수 리털링뒤에 L(또는 l)을 붙여 표기하면 long 자료형으로 인식
실수 자료형 - float, double
- float의 정밀도는 소주점 7자리, double의 정밀도는 소수점 15자리정도
- 실수 리터럴을 double 자료형으로 인식, 단 F(or f)를 실수 리터럴 뒤에 붙이면 float 자료형으로 인식
문자 자료형
- char는 문자를 저장하는 자료형, 작은따옴표(’’)안에 표기.
- 메모리는 2진수 값만 저장할 수 있기 때문에 원래 문자를 기록할수 없다.
- 모든 문자를 특정 정숫값으로 바꿔저장. (유니코드)
- char에 문자에 해당하는 정숫값과 더불어 유니코드 값을 직접 입력가능
기본 자료형 간의 타입 변환
- boolean을 제외한 기본 자료형 7개는 자료형을 서로 변환 가능 → 타입변환
- 자료형 간의 타입 변환 방법
- 자료형 A 변수명 = (자료형 A) 값 ex) int value1 = (int)5.3; → 5로변경
- long 변수명 = 값 + L;
- long 변수명 = 값 + l;
- float 변수명 = 값 + F;
- float 변수명 = 값 + f;
자동타입 변환과 수동 타입 변환
- 업캐스팅 : 크기(범위)가 작은 자료형을 큰 자료형에 대입
- 컴파일러가 자동으로 타입 변환 실행(자동 타입 변환)
- 다운캐스팅 : 큰 자료형을 작은 자료형에 대입하는 행위
- 데이토 손실 발생할수 있어, 개발자가 직접 명시적으로 타입 변환 수행해야함
- 자료형 크기(저장하는 값의 범위) : byte < short/char< int < long < float < double
- 모든 정수 리터럴 값은 int자료형으로 인식됨, but byte short의 저장 범위내 값은 자동변환
- 정수형 자료형을 작은 범위의 자료형으로 캐스팅할때는 범위의 반대쪽 끝에서부터 다시 시작하는 서큘러 구조 보임. → byte 자료형으로 다운캐스팅시 -128로 변환 ex) byte a = (byte)128; // -128 btye b =(byte) 129 // -127
기본 자료형 간의 연산
- boolean을 제외한 나머지 기본 자료형은 서로 연산 가능
- 모든 연산은 같은 자료형끼리만 가능하며 연산 결과 역시 같은 자료형이 나온다.
- 단, int보다 작은 자료형간의 연산 결과는 int가 나온다.