오늘 희한한 소스(첨에 봤을땐 이해가 가지 않았다.)보고서 새로운걸 깨달았다.
먼서 소스 공개 원본 : http://codepad.org/Fb8Uo9Yu
누군가는 너무나 기초적인 연산자만 배우면 된다는데 전혀 이해가 가지 않았다.
(>=),(==) 이 연산자는 무엇인가? 비트 연산자도 아닌데 저것들은 뭐지?
위의 구문을 자바로 풀어보면 다음과 같다.
public class operator {
public static void main(String[] args)
{
int i,j;
boolean l;
boolean k;
i=10;
j=5;
k=(i>=j);
l=(i==j);
System.out.println(k && l);
System.out.println(k||(!l));
}
}
자바에서는 확연하게 들어오는데 연산자의 경우 확실히 boolean형으로 지정을 해줘야 만 한다.(아니면 컴파일 에러가 난다.)
k=(i>=j) 의 경우 i가 j보다 크거나 같으면 true, 아니면 false인 구문이고
l=(i==j) 는 i와 j가 같으면 true 아니면 false 구문이다.
설마 이런걸 몰랐냐고? -_- 아니. 비교연산자는 알고 있었지만 비교연산자가 어떻게 돌아가는지를 이해하지 못했던 것이다.
비교 연산자 앞에는 당연히 if, while 문이 있어야 한다고 생각해 왔다는 고정관념이 기초적인 문제도 못풀게 만든것. (삼항연산자는 제외, 삼항연산자는 그것 자체로 연산자이기때문에 그것도 당연하다고 생각했음;;)
if문은 단순히 비교 연산자에 따라서 아래의 구문을 실행 할것인지 아닐것인지를 결정하는 하나의 함수일뿐
연산자 비교는 무조건 if문안에서 하는것이 아니라는것.
물론 위의 소스는 가독성은 떨어지게 만들었지만 아마 if문을 썼다면 오히려 소스의 코드가 길어져서 쓸데없는 메모리를 먹을수도 있는 소스이기도 하다.(간단한 소스에서는 문제가 안되지만 게임소스에서는 상당히 중요하기에 저렇게 많이 쓰나 보다.- 추측)
- 참고로 if문을 어셈블러로 뜯어보면 jump,mov, 변수 메모리까지 많이 잡아먹는다.
- 나는 독학으로 언어를 배웠다. 정확히는 남의 소스를 전부 다 외웠다. -_- 그래서 기초가 상당히 부족한 상태에서 바로 실전으로 넘어갔기 때문에 오히려 기초적인게 정말 후달리다...오늘의 사례가 바로 증거;;
'app > java' 카테고리의 다른 글
java BigInteger 사용하기 (0) | 2012.02.23 |
---|---|
java replace / replaceFirst / replaceAll $ 주의 할점. (0) | 2012.02.13 |
-Djava.endorsed.dirs= 을 찾을수 없습니다. 두번째! (0) | 2011.05.24 |
java postpix 후위연산자 (0) | 2011.05.06 |
java class 파일 디컴파일 프로그램 (2) | 2011.03.14 |