자바의정석 - 자바(연산자,조건문, 반복문, 배열)
연산자
연산자가 연산을 수행하려면 반드시 연산의 대상이 있어야하는데, 이것을 피연산자(operand) 라고 한다.
피연산자로 상수, 변수 또는 식 등을 사용할 수 있다.
- 연산자 : 연산을 수행하는 기호(+,-,*,/ 등..)
- 피연산자 : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)
아래는 공부하면서 주로 사용하지 않았고, 개념이 잡히지 않았던 연산자만 정리해볼 예정이다.
그 외의 기본적인 사칙연산, 대입연산, 증감연산과 같은 것은 생략!
등가비교 연산인 ==, !=
은 기본적으로 if문을 사용할때 많이 쓴다.
int a = 0;
// case 1
if(a == 0) {
//... true
}
// case 2
if(a != 1 ) {
//... true
}
위와 같인 등가비교 true | false
로 return 받을 수 가 있다.
단, 문자열은 ==, != 을 사용하면 안된다.
String a = "abc";
// case 1
if(a.equals("abc")) {
//... true
}
// case 2
if(a.equals("ABC")) {
//... false
}
// case 3
if(a.equalsIgnoreCase("ABC")){
//... false
}
문자열의 비교의 경우 3가지 경우만 알면 보편적으로 사용할 수 있다.
같은 문자이지만 서로 다른 객체라서 ==, !=
연산을 사용 시 false를 반환한다.
==, !=
이 아닌equlas("stinrg...")
을 통하여 비교를 하면 된다.equlas("stinrg...")
은 대,소문자 구분이 되기에 비교대상이 대,소문자가 상이할 경우false
를 return 한다.a.equalsIgnoreCase("STRING...")
대, 소문자를 구분하지 않고 문자열을 비교하기 위해서는 equalsIgnoreCase를 사용하면 된다.
비트 연산자
피연산자를 비트단위로 논리 연산한다. 피연산자로 실수는 허용하지 않으며, 오로지 정수만 허용한다.
(OR연산자) 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻으며, 그 외에는 0을 얻는다. - & (AND연산자) 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻으며, 그 외에는 0을 얻는다.
- ^ (XOR연산자) 피연산자 값이 서로 다를 때만 1을 결과로 얻으며, 같을 때는 0을 얻는다.
- ~ 피연산자를 2진수로 표현했을 때, 0은 1로 1은 0으로 바꾼다.
비트연산자 중에 " ~ " 연산자
의 경우 개념을 알면 보수의 전환이 편하다.
int a = 1;
System.out.println(a);
System.out.println(Integer.toBinaryString(a));
System.out.println(~a);
System.out.println(Integer.toBinaryString(~a));
System.out.println(~a+1);
// 출력 값
1 // 10진수 a
1 // 2진수 a 00000000000000000000000000000001 의 값이다.
-2 // 10진수 a의 반전
11111111111111111111111111111110 // 2진수 a의 반전
-1 // ~a+1으로 처리를 하게되면 a 값의 보수 처리가 된다.
**쉬프트 연산자 ** “” « » “” 을 사용하여 2진수로 자리수가 왼쪽, 오른쪽으로 이동을하여 이동된 자리는 “ 0 “으로 넣어준다.
int a = 1;
System.out.println(a << 1);
System.out.println(a << 2);
System.out.println(a << 3);
System.out.println(Integer.toBinaryString(a << 1));
System.out.println(Integer.toBinaryString(a << 2));
System.out.println(Integer.toBinaryString(a << 3));
// 출력 값
// 10진수로 출력 시
2
4
8
// 2진수로 출력 시
10 // 10진수 1을 2진수 자리로 1개 이동처리 된 상태
100 // 10진수 1을 2진수 자리로 2개 이동처리 된 상태
1000 // 10진수 1을 2진수 자리로 3개 이동처리 된 상태
쉬프트 연산의 경우 활용 처는 2진수의 값을 10 진수로 변환처리 할 때 사용하면 적합해 보인다.
1의 정수 값을 N만큼 이동 처리 시 2의 N승
의 10진수 값이 return 된다.
만일, 2진수의 값을 10진수로 변환해야할 경우 2진수를 String으로 Array or List에 담아 자리수 별로 곱해주면 10진수 변환이 된다.
int a = 100;
String b = Integer.toBinaryString(a);
System.out.println(a);
System.out.println(b);
int c = 1;
int[] binary = {1,1,0,0,1,0,0};
int[] convert = new int[binary.length];
for (int i=0; i<binary.length; i++) {
convert[i] = c << i;
System.out.print(convert[i]+"\t");
}
// 출력 값
100
1100100
[1,2,4,8,16,32,64] // 출력된 원소를 활용하여 2진수 자리와 곱셈 처리를하여 합산을 하면 10진수가 나온다.
다른 2진수 -> 10진수 변환 방법도 있겠지만, 위의 방식으로 활용할 수도 있을 것 같다.
조건문과 반복문
조건문에는 IF와 Switch가 있다.
처리해야할 경우의 수가 많을 떄는 if문보다 switch문이 효율적이지만, switch문은 if문 보다 제약이 많다.
[제약사항]
switch문의 조건식 결과는 정수 or 문자열이어야 한다.
case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.
if(조건식) {
} else if (조건식) {
} else {
}
switch (조건식) {
case 값1 :
break;
case 값2 :
break;
case 값3 :
break;
default :
}
// 참고) switch문의 case 하위에 break가 없다면 조건식 하위의 case는 모두 실행을 한다.
반복문에는 For와 While, do-While이 있다.
- for반복문에는 초기화, 조건식, 증감식이 있다.
- while문에는 for와 동일한 형식이다. 하지만 초기화작업은 상단에서 먼저 해야한다.
- do-while문에는
do {}
먼저 수행한 후에 조건식을 편가한다. while은 조건이 틀리경우 반복내용이 하나도 없을 수 있지만, do-while의 경우에는 무조건 한번은 실행하고 반복을 하게 된다.
```java for(초기화; 조건식; 증감식) { // 조건식이 참일 경우 반복내용.. }
while (조건식) { // 조건식이 참일 경우 반복내용.. }
do { // 조건식이 참일 경우 반복내용.. } while (조건식);
반복문에는 추가적으로 알아야될 사항으로는 **break와 continue**가 있다.
break의 경우 바로 인접한 반복문을 빠져나가며, continue의 경우 반복문의 끝으로 이동한다. (조건을 skip할때 사용)
```java
for(초기화; 조건식; 증감식) {
if(조건식) {
} else {
break;
}
}
// 반복문(for) 안의 조건문(if) 가 거짓(false)일 경우 반복문은 중단하게 된다.
for(초기화; 조건식; 증감식) {
if(조건식1) {
} else if (조건식2) {
continue;
} else {
}
}
// 반복문(for) 안의 조건문(if)의 조건식1이 참일 경우 조건식을 처리하지만,
// 조건식2가 참일경우 아무런 동작을 하지 않고 반복문의 하단으로 이동하며,
// 반복문의 조건식이 아직 만족하지 않을경우 loop 수행을 한다.
위에 설명한 break와 continue은 인접한 반복문을 빠져나가고 skip한다고 하였다.
그렇다면, for문이 중첩이 되어있고, 이럴때 break가 있으면 어떻게 될까?
for(초기화; 조건식; 증감식) { // 1번 반복문
for(초기화; 조건식; 증감식) { // 2번 반복문
if(조건식) {
break;
}
}
}
// 위의 경우 두번째 반복문안의 조건문이 "참"일 경우 2번 반복문을 빠져나가며 1번 반복문의 다음이 진행된다.
loop : for(초기화; 조건식; 증감식) { // 1번 반복문
for(초기화; 조건식; 증감식) { // 2번 반복문
if(조건식) {
break loop;
}
}
}
// 위의 경우 두번째 반복문안의 조건문이 "참"일 경우 바로 1번 반복문이 종료가 되게된다.
개인적으로 연산자와 조건문, 반복문에 대해 기본적으로 자주 접하여 다 아는(?) 부분은 생략하며, 오랜만에 보거나 생소한 내용을 위주로 정리를 해보았다.
Leave a comment