단 하나의 값을 저장할 수 있는 메모리상의 공간.
int number;
int = 변수의 타입
number = 변수의 이름
-> int 타입의 number라는 변수명을 가진 변수를 선언했다!
변수 타입 : 변수에 저장될 값이 지닌 타입을 지정함.
변수명 : 변수에 이름을 붙여준 것이다.
변수는 앞서 말했듯, 메모리상의 공간이다.
이 공간에 이름을 붙여 구분을 지어준 후에 '이 이름에 값을 저장해줘, 혹은 이 이름의 값을 가져와 줘' 를 통해 메모리 공간을 사용할 수 있다!
선언된 number를 이용해 과정을 살펴보자면
1) int age; 변수 선언
2) type 크기(여기서는 int만큼의)에 따른 메모리 공간이 확보된다.
3) 메모리 공간에 변수 이름을 짓고(number), 이를 호출해 접근하거나 이용한다!
변수를 선언한 후에는 꼭 초기화를 해줘야 한다.
메모리는 여러 프로그램이 공유하는 자원이므로, 전에 다른 프로그램에 의해 저장된 '알 수 없는 값(쓰레기 값)' 이 남아있을 수 있기 때문이다.
변수를 사용하기 전 처음으로 값을 꼭 저장해주자!
int number; // 선언 완
int a;
int b;
number = 0; //0이라는 값을 대입해 number를 초기화 해줬다
a = 0;
b = 0;
int age = 99; // 선언과 동시에 초기화도 가능하다.
같은 타입의 여러 변수를 선언하거나 초기화 할 때, 콤마','를 통해 한 줄에 선언이 가능하다!
int a, b;
int a = 0, b = 0;
초기화를 할 때 사용한 '='(대입연산자)는 우변의 모든 계산이 끝난 후에 제일 마지막에 수행된다.
int x = 10;
int y = 20;
x와 y의 값을 서로 바꿔보자!
-> 값을 임시 저장할 변수를 선언하고, 바꿔주면 된다.
덧셈 연산자 '+'
1) 두 값을 더해준다.
2) 문자열과 숫자를 하나로 결합해준다.
문자열을 나타내는 큰따옴표("")와 같이 이용 시, 왼쪽에서 오른쪽으로 연산 순서가 진행된다는 것만 기억하면 된다.
추가적인 권장규칙
크게 문자와 숫자로, 숫자는 정수와 실수로 나뉜다.
기본형 - 실제 값을 저장한다. 연산 가능, 8개 타입
참조형 - 어떤 값이 저장되어 있는 주소를 값으로 가진다. 참조형 변수끼리의 연산 불가, 기본형 빼고 다
참조형 예시
Date today = new Date();
연산자 new를 통해 Date 객체 주소를 생성하고,
그 주소를 today 변수에 저장한다.
-> 참조변수 today를 통해 생성된 객체 Date를 사용할 수 있게 되었다.
기본형(primitive type)
논리형, 문자형, 정수형, 실수형으로 이루어져 있다.
1) 논리형(boolean)
2) 문자형(char)
3) 정수형(byte, short, int, long)
4) 실수형(float, double)
각 타입 변수가 표현할 수 있는 값의 개수: 2^n개
부호 없는 정수 범위 : 0 ~ 2^n - 1
부호 있는 정수 범위 : -2^(n-1) ~ 2^(n-1)-1
n은 비트의 수
int -> 2^31 10진수 기준 10자리(약 21억)
long -> 2^63 10진수 기준 19자리
실수형은 정밀도를 고려해야한다.
float : 10진수 기준 7자리까지 정밀하게 표현
double : 10진수 기준 15자리까지 정밀하게 표현
이 이상은 오차가 발생한다.
상수
값을 저장할 수 있는 공간, 저장 시 다른 값으로 변경 불가final int MAX_SPEED = 10; // 선언, 초기화. final로 상수 선언 해서 값 변경 불가
리터럴
값 자체, 상수의 다른 이름
리터럴의 타입과 접미사
정수형 - L(long)
실수형 - f(float), d(double, 생략 가능)
안붙어있으면 기본 자료형을 따른다고 생각하면 된다
printf 다양한 표현식
실수형
%전체자리.소수점아래자리f
System.out.printf("d=%14.10f%n", d);
전체 14자리 중 소수점 아래 10자리만 출력
소수점도 한 자리를 차지한다.
소수점 아래의 빈자리는 0으로 채우고, 정수 빈자리는 공백으로 채워 전체 자리수를 만든다.
문자열
System.out.printf("[%20s]%n", "helloWorld");
System.out.printf("[%-20s]%n", "helloWorld");
System.out.printf("[%.8s]%n", "helloWorld";
실수형과 유사하게 표현된다.
20 -> 최소 20글자 출력공간 확보, 우측정렬
-20 -> 위와 동일, 좌측정렬
.8 -> 왼쪽에서 8글자만 출력한다.
오타있으세요 고갱님