DBDAY 06
게으른 계산(Lazy Evaluation)
SCE: Short-Circuit Evaluation
A && B를 계산할 때
A가 거짓이면, B의 결과에 상관 없이 결과가 항상 거짓이 되기 때문에
B는 연산이 이루어지지 않는다.
A || B를 계산할 때
A가 참이면, B의 결과에 상관 없이 결과가 항상 참이 되기 때문에
B는 연산이 이루어지지 않는다.
비트 연산자 (bit-wise operator)
a & b: (and) a,b가 모두 1 이면 결과도 1, 그 외에는 0
a | b: (or) a가 1이거나 또는 b가 1이면 결과는 1, a,b 모두 0일 때만 0
a ^ b: (xor) a와 b 둘 중 하나만 1이 있는 경우는 1, 그 외에는 0
결국 둘이 같으면 0, 다르면 1
~a : (not) a가 1이면 0, a가 0이면 1로 바꿔줌
0000 1010 n1
0000 0111 n2
────────── &
0000 0010=> 2
0000 1010 n1
0000 0111 n2
────────── |
0000 1111 15
0000 1010 n1
0000 0111 n2
────────── ^
0000 1101 13
비트 이동(shift) 연산자:
>>, <<
0 0 0 0 1 0 1 0 : 10
↘↘↘↘ ↘↘↘↘
0 0 0 0 0 1 0 1 : 5
Debug (디버깅) 순서
step1 : breakpoint 설정
step2 : debug 시작
step3 :
step over
resume
1) 프로그램의 흐름
2) 변수값의 변화
3) 호출관계 흐름
step4 : debug 종료 (terminate)
산술 연산의 결과 타입
일단 피연산자가 reference type 이면, unbox 후 형변환 수행됨. 그리고 나서
피연산자중 하나라도 double 이면 다른쪽이 double 이 된다.
그렇지 않으면 피연산자중 하나라도 float 이면 다른 쪽이 float 가 된다.
그도 아니면 피연산자중 하나라도 long 이면 다른 쪽을 long 으로 바꾼다.
그도 아니면 양쪽 피연산자 모~ 두 int 로 바꾼다.
if, if ~ else 조건문
구문1:
if (조건식) {
조건식이 true 일때 실행되는 문장(들)
...
}
구문2:
if (조건식) {
조건식이 true 일때 실행되는 문장(들)
...
} else {
조건식이 false 일때 실행되는 문장(들)
...
}
if ~ else if ~ else조건식
구문3:
if (조건식1) {
조건식1 이 true 일때 실행되는 문장(들)
...
} else if (조건식2) {
조건식1 이 false 이고
조건식2 이 true 일때 실행되는 문장(들)
...
} else if (조건식3) {
조건식2 가 false 이고
조건식3 이 true 일때 실행되는 문장(들)
...
} else {
위의 모든 조건식 모두 false 일때 수행하는 문장(들)
..
}
삼항 연산자 (ternary operator)
(조건식) ? 선택1 : 선택2
(조건식)이 true 이면 선택1이 선택되고,
(조건식)이 false 이면 선택2가 선택됨.
String 비교, char 비교
문자열 비교는 절대로 == 를 사용하지 말자
문자열 비교는 equals(), equalsIgnoreCase() 사용!
char 는 기본적으로 정수값 (아스키 코드값) 이라 일반 산술 비교 가능
ex) str1.equals(str2)
실수값은 정밀도(precision) 의 문제가 있기 때문에
산술계산 결과값 등의 '같은값 여부' 비교는 하지 말자
switch - case 조건문
switch (조건값){
case 값1:
...
case 값2:
...
default:
...
}
해당 조건의 case문을 찾아서 거기서부터 break를 만날 때까지 실행을 함.
break를 만나게 되면 switch 문장을 종료.
해당하는 case가 없으면 default 문장을 실행함.
※ 모든 switch 조건문은 if - else if - else로 바꿀 수 있다. (할수 있어야 한다)
switch (조건) {case1: case2:}
(조건)에 따라서 해당 case로 이동
(조건)에 사용될 수 있는 자료 타입은
1. int로 변환 가능한 타입들: byte, short, int, char
2. enum 타입(enum 자료형은 Java 5 버전부터 소개)
3. String 타입 (Java 7