📔 학습한 내용을 정리하기 위해 작성하는 게시글입니다.
데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미한다. 즉, 메모리 공간에 부여되는 이름이다.
자바에서 변수, 상수, 메서드의 이름을 지을 때 반드시 지켜야 하는 공통 사항이다.
변수명
- 영문 소문자로 시작
- 영문 단어가 2개 이상 결합할 때는 새로운 단어의 첫 글자를 대문자로 표기
※ 낙타 표기법(camel case
) 사용
상수명
- 변수와 구분하기 위해 모두 대문자로 표기
- 영문 단어가 2개 이상 결합할 때는 밑줄( _ )을 사용해 분리
메서드명
- 변수명과 동일. 단, 이름 뒤에 소괄호(())와 중괄호({})가 붙음
📌 변수 이름은 해당 변수에 저장될 데이터의 의미를 담아야 한다.
1) 변수의 선언만 하는 방법
: 먼저 변수를 선언하여 메모리 공간을 할당받고, 나중에 변수를 초기화하는 방법
타입 변수이름;
2) 변수의 선언과 동시에 초기화하는 방법
1. 타입 변수이름[, 변수이름];
2. 타입 변수이름 = 초깃값[, 변수이름 = 초깃값];
변수의 위치에 따라 네 가지 유형으로 구분할 수 있다.
클래스부에 선언된 변수들로 객체의 속성에 해당.
인스턴스 변수와 클래스 변수로 구분됨.
클래스가 인스턴스될 때 초기화되는 변수.
인스턴스를 통해서만 접근할 수 있음.
메서드에 인자로 전달되는 값을 받기 위한 변수.
메서드 내에서는 지역변수 처럼 사용됨.
메서드 내에서 선언된 변수.
멤버변수와 동일한 이름을 가질수 있으며 지역변수가 우선.
static
으로 선언된 변수.
인스턴스 생성없이 클래스이름.변수명으로 사용가능.
main()
메서드에서 참조 가능.
데이터를 저장하기 위해 생성하는 메모리 공간은 목적에 따라 크기와 특징이 다른데, 이를 자료형(data type
)이라고 한다. 즉, 메모리 공간의 자료형에 따라 저장할 수 있는 값의 종류와 특징이 결정된다.
자바에서 제공하는 자료형은 타입에 따라 크게 기본 자료형과 참조 자료형으로 구분할 수 있다.
값이 들어 있으면 기본자료형이고, 주소가 들어 있으면 참조 자료형이 된다.
기본 자료형은 자바 라이브러리에서 기본으로 제공하며, 각 자료형이 사용할 공간의 크기인 바이트 수가 정해져 있다.
자바에서는 8가지 기본 자료형을 제공한다.
[ 기본 자료형 8가지]
정수형 | 문자형 | 실수형 | 논리형 | |
---|---|---|---|---|
1바이트 | byte | - | - | boolean |
2바이트 | short | char | - | - |
3바이트 | int | - | float | - |
4바이트 | long | - | double | - |
📌 부동 소수점 방식의 오차
실수의 표현 방식은 1)고정 소수점(fixed point)방식과 2)부동 소수점(floating point)방식이 있다.
(현재 대부분의 시스템에서는 부동 소수점 방식으로 실수를 표현)
float형 타입은 소수 6자리까지, double형 타입은 소수 15자리까지만 오차 없이 표현할 수 있다. 그 이상의 소수 부분을 표현할 때는 언제나 작은 오차가 발생한다.
자료형 변수 = 값;
자료형 선언
int a; //a는 int형 변수
String b; //b는 String형 변수
대입연산자(=)를 중심으로 양쪽의 자료형이 같아야 한다.
1) 자료형을 이렇게 구분해야 하는 이유는 기본 자료형과 참조 자료형의 값 저장 방식이 서로 다르기 때문이다.
기본 자료형과 참조 자료형은 실제 데이터값이 저장되는 위치가 다르다.
두 자료형 모두 변수의 공간이 스택 메모리에 생성되지만,
클래스 영역, 정적 영역, 상수 영역, 메서드 영역 | 스택 영역 | 힙 영역 |
---|
↑ 자바의 메모리 구조
스택(stack) 영역 : 변수가 저장되는 공간
힙(heap) 영역 : 객체가 저장되는 공간
기본 자료형은 스택 메모리에 실제 변숫값을 저장하고,
참조 자료형은 스택 메모리에 실제 변숫값이 저장된 힙 메모리의 위칫값을 저장한다. 참조 자료형의 실제 데이터값은 힙 메모리에 저장된다.
2) 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해서이다.
3) 메모리의 효율성 때문이다. (정수의 경우, 자료형이 4개가 있다.)
final int AGES = 30; //AGES가 상수
final
예약어를 사용해 선언하며, 값이 없을 수 없으므로 반드시 선언과 동시에 반드시 초기화해야 한다.final int AGES = 30; //30이 리터럴
constant pool
)에 놓인다.자바에서 리터럴은 타입에 따라 다음과 같이 구분한다.
1) 정수형 리터럴 (Integer literals)
: 123, -456과 같이 아라비아 숫자와 부호로 직접 표현
대입식 | 정수 리터럴의 자료형 인식 |
---|---|
byte a = 3 ; | byte에 저장할 수 있는 값이 byte 자료형에 대입되면 byte로 인식 (byte = byte) |
short a = 3 ; | short에 저장할 수 있는 값이 short 자료형에 대입되면 short로 인식 (short = short) |
int a = 3 ; | int와 같거나 int보다 큰 정수 자료형(long)에 정숫값이 입력되면 크기에 관계없이 int로 인식 (int = int) |
long a = 3 ; | long 자료형에 대입되는 정숫값은 크기에 상관없이 int로 인식되지만, 자동 타입 변환이 발생해long으로 변환 (long = long) |
byte a = 130 ; | byte에 저장할 수 없는 범위의 정숫값이 입력되면 int로 인식 (byt = int) → 오류 발생 |
2) 실수형 리터럴 (floating-point literals)
: 3.14, -45.6과 같이 소수 부분을 가지는 아라비아 숫자로 표현
대입식 | 실수 리터럴의 자료형 인식 |
---|---|
float a = 3.5F ; | 뒤에 F가 붙었으므로 float로 인식 (float = float) |
double a = 5.8 ; | 실수 리터럴은 기본적으로 double로 인식 (double = double) |
double a = 5 ; | int로 인식하지만 자동 타입 변환해 double로 인식 (double = double) |
float a = 3.5 ; | 실수 리터럴은 기본적으로 double로 인식 (float = double) → 오류 발생 |
3) 논리형 리터럴(boolean literals)
: true나 false로 표현
4) 문자형 리터럴(character literals)
: 'a', 'Z'와 같이 작은따옴표('')로 감싸진 문자로 표현
5) 문자열 리터럴(string literals)
: "자바", "홍길동"과 같이 큰따옴표("")로 감싸진 문자열로 표현
6) null 리터럴(null literals)
: 단 하나의 값인 null로 표현
종류 | 리터럴 | 접미사 |
---|---|---|
논리형 | true, false | 없음 |
정수형 | 123, 0b0101, 077, 0xFF, 100L | L (long) |
실수형 | 3.14, 3.0e8, 1.4f, 0x1.op-1 | f (float), d (double, 생략 가능) |
문자형 | 'A', '1', '\n' | 없음 |
문자열 | "ABC", "123", "A", "tree" | 없음 |
자료형 A 변수명 = (자료형 A) 값
long 변수명 = 값 + L;
long 변수명 = 값 + l;
float 변수명 = 값 + F;
float 변수명 = 값 + f;
1) 자동 타입 변환(묵시적 타입 변환, implicit conversion)
2) 수동 타입 변환(명시적 타입 변환, 강제 타입 변환, explicit conversation)
: 자바에서는 값의 허용 범위가 작은 타입에서 큰 타입으로 저장될 때 자동으로 타입이 변환된다. (컴파일러가 자동으로 수행)
업캐스팅(up-casting)
: 작은 자료형을 큰 자료형에 담으면 개발자가 타입 변환 코드를 넣어 주지 않더라도 컴파일러가 자동으로 타입 변환을 실행한다. (타입 변환 생략 가능)
: 사용자가 타입 캐스트 연산자(())를 사용하여 강제적으로 수행하는 타입 변환
다운캐스팅(down-casting)
: 큰 자료형을 작은 자료형에 대입하는 행위
→ 데이터 손실이 발생할 수 있으므로 컴파일러에 따른 자동 타입 변환은 일어나지 않으며, 개발자가 직접 명시적으로 타입 변환을 수행해야 한다.
타입 변환을 할 수 없는 경우
char 타입에는 음수가 없기 때문에 음수를 갖는 타입을 char 타입으로 변환하면 컴파일 에러가 발생한다.
📌 자료형의 크기
byte(1) < short(2)/char(2) < int(4) < long(8) < float(4) < double(8)
boolean을 제외한 나머지 기본 자료형은 서로 연산할 수 있다. 이때 연산은 같은 자료형끼리만 가능하다.
CPU에서 연산 최소 단위가 int이므로 int보다 작은 자료형도 일단 int로 읽어와서 연산을 수행한다.(결과값도 int)
같은 기본 자료형 간의 연산 결과
연산 | 결과 |
---|---|
type 자료형 + byte 자료형 | int 자료형 |
short 자료형 + short 자료형 | int 자료형 |
int 자료형 + int 자료형 | int 자료형 |
long 자료형 + long 자료형 | long 자료형 |
float 자료형 + float 자료형 | float 자료형 |
double 자료형 + double 자료형 | double자료형 |
서로 다른 기본 자료형 간 연산 결과
연산 | 결과 |
---|---|
type 자료형 + short 자료형 | int 자료형 |
byte 자료형 + int 자료형 | int 자료형 |
short 자료형(업캐스팅) + long 자료형 | long 자료형 |
int 자료형(업캐스팅) + float 자료형 | float 자료형 |
long 자료형(업캐스팅) + float 자료형 | float 자료형 |
float 자료형(업캐스팅) + double 자료형 | double자료형 |
<Do it! 자바 완전 정복>
<Do it! 자바 프로그래밍 입문>
<자바의 정석>
https://dinfree.com/lecture/language/112_java_1.html
http://www.tcpschool.com/java/java_datatype_variable
https://sseoui.tistory.com/m/4
https://philipbox.tistory.com/m/64
https://wildeveloperetrain.tistory.com/m/75