'자바의 신'의 1장, 2장, 3장은 자바 설치와 기본 문법에 대한 설명으로 한번 읽고 넘겼다.
변수(variable)
1. 변동이 심한; 가변적인 2. 변화를 줄 수 있는
변수(Variable)란 값(Value)을 저장할 수 있는 메모리의 공간을 의미한다.
쉽게 말해 값을 담을 수 있는 상자와 같으며, 이름에서 유추할 수 있듯이 변수는 말 그대로 '변하는 수'를 뜻한다.
자바에서는 4가지의 변수가 있다.
예시)
public class VariableTypeKor {
int 인스턴스_변수;
static int 클래스_변수;
public void method(int 매개_변수) {
int 지역_변수;
}
}
지역 변수 (local variables) | 중괄호 내에서 선언된 변수 | 지역 변수를 선언한 중괄호 내에서만 유효하다. |
매개 변수 (parameters) | 메소드에 넘겨주는 변수 | 메소드가 호출될 때 생명이 시작되고, 메소드가 끝나면 소멸된다. |
인스턴스 변수 (instance variables) | 메소드 밖에, 클래스 안에 선언된 변수, 앞에는 static이라는 예약어 없어야한다. | 객체가 생성될 때 생명이 시작되고, 그 객체를 참조하는 다른 객체가 없다면 소멸한다. |
클래스 변수 (class variables) | 인스턴스변수처럼 메소드 밖에, 클래스 내에 선언된 변수 중에서 타입 선언 앞에 static이라는 예약어가 있는 변수 | 클래스가 처음 호출될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸된다. |
자바의 자료형
자바의 자료형은 크게 2가지로 나뉘는데 기본자료형과 참조자료형이다.
참조 자료형은 내가 원하는대로 만들 수 있지만 기본 자료형은 추가로 만들 수 없다.
기본 자료형
기본 자료형은 총 8개로 숫자와 boolean타입 두 가지로 나뉜다.
기본 자료형에 대한 정리는 다음과 같다.
자료형 | 키워드 | 크기 | 기본값 | 표현범위 | ||
논리형 | boolean | 1bit | false | true or false | ||
문자형 | char | 2byte | \u0000 | 0 ~ 65,535 ( 0 ~ 2^16 - 1 ) | ||
정수형 | byte | 1byte | 0 | -128 ~ 127 ( -2^7 ~ 2^7 - 1 ) | ||
short | 2byte | 0 | -32,768 ~ 32,767 (-2^15 ~ 2^15-1) | |||
int | 4byte | 0 | -2,147,483,648 ~ 2,147,483,647 ( -2^31 ~ 2^31-1 ) |
|||
long | 8byte | 0 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808 ( -2^63 ~ 2^63-1 ) |
|||
실수형 | float | 4byte | 0.0 | -3.4E38 ~ +3.4E38 | ||
double | 8byte | 0.0 | -1.7E308 ~ 1.7E308 |
위의 표를 보면 알겠지만 정수형 중에서 char만이 unsigned이다.(표에서는 문자형으로 따로 나와있지만 정수형에 포함된다.)
signed, unsigned는 음수를 표현하고 안하고의 차이이다
signed - 부호를 가지는 값 (양수, 음수 구별)
unsigned - 부호를 가지지않는 값 (오직 양수만)
예시) byte로 예시를 들어보자
byte는 8bit의 signed 타입이다.
아래의 표와 같이 모든 공간에 1이 채워지면
2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2^7 X 1 + 2^6 X 1 + 2^5 X 1 + 2^4 X 1 + 2^3 X 1 + 2^2 X 1 + 2^1 X 1 + 2^0 X 1 = 255
가 된다.
하지만 byte의 표현범위는 -128 ~ 127 이기에 부호를 가질 수 있어 양수, 음수를 구분해야 한다.
그래서 8비트 중 가장 최상단 비트(MSB)의 값을 0이면 양수 1이면 음수로 구분할 때 사용하게 된다.
(만약 int로 가정하면 2^31을 양수, 음수 구분할 때 사용됨)
구분 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 | 값 | |
양수 최대값 |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 127 |
음수 최소값 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -128 |
만약 숫자 5를 byte로 선언했으면
-> 0000 / 0101
숫자 -5를 byte로 선언했으면
-> 1000 / 0101
<위의 기본자료형을 정리한 표에는 안 나온 특징 정리>
long
- 숫자를 명시적으로 초기화할 때는 숫자 맨 뒤에 'L'을 붙여야 한다.
short
- 32비트 범위를 넘어서는 값에 대해서는 정확성 보장하지 못한다.
- single-precision 32-bit IEEE 754 floating point(32비트 단정밀도)
- 부호 1자리 + 지수 8자리 + 가수 23자리 = 32비트
double
- 64비트 범위를 넘어서는 값에 대해서는 정확성 보장하지 못한다.
- single-precision 64-bit IEEE 754 floating point(64비트 단정밀도)
- 부호 1자리 + 지수 11자리 + 가수 52자리 = 64비트
기본자료형의 형 변환
- 형 변환은 서로 다른 타입 간의 자료형을 변환하는 작업이다.
- boolean타입을 제외하고 모든 기본자료형은 형 변환이 가능하다.
- 기본자료형 <->참조자료형 형 변환은 안된다.
- 숫자 값을 참조자료형으로 변경할 수 있는 방법이 전혀 없는 것은 아니다.(Integer, Long)
- byte(1바이트, 8비트) -> short(2바이트, 16비트)는 문제없지만
- short(2바이트, 16비트) -> byte(1바이트, 8비트) 1바이트를 버리게 되어 다른 결과를 볼 수 있다.
참고사이트 및 자료
자바의 신
'언어 > JAVA' 카테고리의 다른 글
10장 상속 (0) | 2021.10.19 |
---|---|
9장 패키지 / 접근제어자 (0) | 2021.09.21 |
8장 참조자료형 (0) | 2021.09.21 |
6장 조건문 / 반복문 (0) | 2021.09.19 |
5장 연산자 (0) | 2021.09.16 |