변수
메모리 공간에 부여하는 이름
자료형
데이터를 저장하기 위해 생성하는 메모리 공간은 목적에 따라 크기와 특징 다르게 생성
# 자료형 선언 방법
자료형 변수명;
ex) int a;
주의할 점
- 자료형은 반드시 사용하기 전에 선언
- 자료형은 반드시 한 번만 선언
# 변수 선언과 값 대입하기
자료형 변수명 = 값;
ex) int a = 3;
# 변수 선언과 값 대입 분리하기
자료형 변수명;
변수명 = 값;
ex)
int a; // a 라는 이름의 공간만 생성
a = 3;
int ourClassNum;
- 영문 소문자로 시작
- 영문 단어 2개 이상 결합할 시, 새로운 단어의 첫 글자 대문자 사용
- 메서드명 권장사항과 동일
메서드는 이름 뒤에 소괄호와 중괄호가 붙음
final int MY_DATA;
- 변수와 구분하기 위해 모두 대문자로 표기
- 단어가 여러 개 결합하면 가독성이 떨어지므로 밑줄을 사용해 분리
변수 생성은 개발자가 직접 생성하지만 메모리에서 변수를 삭제하는 작업은 JVM
이 알아서 진행
자신이 열린 중괄호의 쌍인 닫힌 중괄호를 만나면 메모리에서 삭제
{
int a; // 변수 a 의 생성 시점
{
a = 3;
}
} // 변수 a 의 소멸 시점
자료형의 크기
byte < short < char < int < long < float < double
자료형이 크다 작다의 의미는 자료형의 바이트 크기가 아니라 저장하는 값의 범위를 말하는 것
똑같은 정수를 저장하는데 자료형이 4개나 필요한 이유 > 메모리의 효율성
p63
자료형을 구분해야 하는 이유
기본 자료형과 참조 자료형의 값 저장 방식이 서로 다르기 때문
첫 번째 영역 : 클래스 영역 / 정적 영역 / 상수 영역 / 메서드 영역
두 번째 영역 : 스택 영역 ( 변수들이 저장되는 공간 )
세 번째 영역 : 힙 영역 ( 객체들이 저장되는 공간 )
기본 자료형 : 소문자로 시작
참조 자료형 : 대문자로 시작
기본 자료형 : 스택 메모리에 생성된 공간에 실제 변숫값을 저장
참조 자료형 : 실제 데이터값은 힙 메모리에 저장하고 스택 메모리의 변수 공간에는 실제 변숫값이 저장된 힙 메모리의 위칫값 저장
Upcasting 자동 타입 변환
크기가 작은 자료형을 큰 자료형에 대입 할 때
컴파일러가 자동으로 타입 변환 실행
Downcasting 수동 타입 변환
크기가 큰 자료형을 작은 자료형에 대입 할 때
데이터의 손실이 발생할 수 있으므로 컴파일러에 따른 자동 타입 변환은 일어나지 않으며 개발자가 직접 명시적으로 타입 변환을 수행해야 함
float value1 = 3; // int > float (Upcasting)
byte value2 = (byte)128; // int > byte (Downcasting)
정수형 자료형을 작은 범위의 자요형으로 캐스팅할 때는 범위의 반대쪽 끝에서부터 다시 시작하는 서큘러 구조를 보임
정숫값 128(127+1) 을 byte 자료형을 다운캐스팅 하면 byte 자료형의 범위에서 반대쪽 끝인 정숫값 -128로 변환
byte a = (byte)128; // -128
byte b = (byte)129; // -127
byte c = (byte) -129; // 127
byte d = (byte) -130; // 126
CPU 에서 연산 최소 단위가 int 이므로 int 보다 작은 자료형도 일단 int 로 읽어 와서 연산을 수행함
int 보다 작은 자료형 간의 연산은 int, int 보다 크거나 같은 자료형 간의 연산은 해당 자료형이 나온다고 생각하면 된다
연산 기호 : +, -, *, /, %
기능 : 사칙연산 및 나머지 연산
연산 기호 : ++, --
기능 : 값이 1씩 증가 및 감소
연산 기호 : &, |, ~, ^
기능 : 비트 AND, OR, NOT, XOR
연산 기호 : >>, <<, >>>
기능 : 비트 단위의 이동
연산 기호 : <, >, <=, >=, ==, !=
기능 : 값의 크기 비교
연산 기호 : +&&, ||, !, ^
기능 : 논리 AND, OR, NOT, XOR
변숫값의 범위를 지정할 때 수학식에서는 70 <= a < 80 과 같이 표현할 수 있지만,
자바 코드에서는 반드시 각각을 분리하고 논리 연산자로 연결 : a >= 70 && a < 80
연산 기호 : =, +=, -=, *=, /=, &=, |=, >>=, <<=, >>>=
기능 : 산술 연산 결과의 대입 ('연산자' + '=' 의 축약 표현)
연산 기호 : (참 또는 거짓) ? x:y
기능 : 참일 때 x, 거짓일 때 y
연산 결과를 기준으로 나누어 정리한 것
산술 연산자
산술 연산자에서 나누기를 진행할 때 int/int = int
5/2 의 값은 2.5가 아니라 2인 것
증감 연산자
int a = 3;
++a; // a 값에 1을 더하라는 명령 1개 (전위형, 후위형 차이 X)
System.out.println(a);
int a1 = 3;
int b1 = ++a1; // a1 값에 1을 더하기 (전위형) > a1 값을 b1 값에 대입
System.out.println(a1); // 4
System.out.println(b1); // 4
int a2 = 3;
int b2 = a2++; // a2 값을 b2 값에 대입 > a2 값에 1을 더하기 (후위형)
System.out.println(a2); // 4
System.out.println(b2); // 3
AND & 두 값이 모두 1일 때만 1인 연산자
OR | 두 값이 모두 0일 때만 0인 연산자
XOR ^ 두 값이 같을 때 0 , 두 값이 다를 때 1
NOT ~ 0은 1, 1은 0으로 반전하는 연산자
# AND 연산자 ex
00000011 > 3 (10진수)
& 00001010 > 10 (10진수)
---------------------------
00000010 > 2 (10진수)
# NOT 연산자 ex
값의 첫 번째 비트는 부호 비트 0 : 양수 / 1 : 음수
TIP ; 음수 연산은 양수를 기준으로 읽은 후 1 더한 다음 부호만 음수 부호를 붙여주면 됨
~ 00000011 > 3
----------------
11111100 > -4
TIP ; 음수 연산은 양수를 기준으로 읽은 후 1 더한 다음 부호만 음수 부호를 붙여주면 됨
Do it ! 자바 완전 정복 p 93 참조
- 등가 비교에서 같다 == 는 등호가 2개 있다는 것에 유의할 것
두 값이 동일한지의 여부를 확인한 후 동일 여부를 참 (true) 거짓 (false) 로 반환하는 연산자
- 등가 비교에서 비교 대상은 스택 메모리의 값을 비교하는 것
> 기본 자료형의 등가 비교 대상은 실제 데이터값이 되고
참조 자료형의 등가 비교 대상은 실제 데이터값이 위치한 번짓값이 되는 것
- 등호는 항상 오른쪽에 위치
비트 연산자와 매우 비슷하지만 피연산자로 boolean 값 true / false 값만 올 수 있음
Do it ! 자바 완전 정복 p 98 참조
비트 연산자와 거의 유사하므로 별도로 찾아볼 것
오른쪽 피연산자의 연산 결과를 왼쪽 변수 결과에 대입하는 연산자
a = a+b > a += b
a = a-b > a -= b
유일하게 3개의 피연산자가 있는 연산자
(참 또는 거짓) ? 참일 때 연산 결과 : 거짓일 때 연산 결과
int a = (true) ? 1: 2;
System.out.println(a); // 1
int b = (a % 2 == 0) ? 10 : 20;
System.out.println(b); // 20
삼항 연산자와 if 선택 제어문 사이의 변환
# 삼항 연산자를 이용한 표현
int a = 3;
int b = (a > 5) ? 10 : 20;
System.out.prinln(b); // 20
# if 선택 제어문을 이용한 표현
int a = 3;
int b;
if (a > 5) {
b = 10;
} else {
b = 20;
}
System.out.println(b); // 20
간단히 연산자에 대한 기본적인 것을 정리한 것이고 이후에 코딩 테스트나 예제 문제 풀이를 하며 보다 심도있는 스터디를 진행하는 것 권유