본문 바로가기
공부기록/사전학습

Java 사전학습_2

by 루팽 2022. 10. 28.

<Java 사전학습_2>

  1. 자바의 여러 가지 연산자(5~6강)
  2. 제어 흐름 이해하기(7~8강)


1. 자바의 여러가지 연산자(5~6강)

항(operand)
연산에 사용되는 값

연산자(operator)
항을 이용하여 연산하는 기호

단항 연산자
항이 한 개

++num;


이항 연산자
항이 두 개

num1 + num2;


삼항 연산자
항이 세 개

(5>3)? 1 : 0;


대입 연산자
변수에 값을 대입하는 연산자
연산의 결과를 변수에 대입
우선 순위가 가장 낮은 연산자
오른쪽 변수(값)(rvalue)를 왼쪽 변수(lvalue)에 대입

int age = 24; //나이를 의미하는 age 변수에 값 24를 대입

totalScore = mathScore + engScore; //오른쪽 두 값을 먼저 연산 왼쪽 totalScore 변수에 대입


부호 연산자
단항 연산자
양수/음수의 표현, 값의 부호를 변경(+,-)
변수에 +,-를 사용한다고 해서 변수의 값이 변하는 것은 아님
변수의 값을 변경하려면 대입 연산자를 사용해야 함

산술 연산자
사칙연산에 사용되는 연산자(+, -, *, /, %)
% 는 나머지를 구하는 연산자(숫자 n의 나머지는 0~n-1 범위의 수, 특정 범위 안의 수를 구할 때 종종 사용)

증가 감소 연산자
단항 연산자
1만큼 더하거나 뺄 때 사용
항의 앞/뒤 위치에 따라 연산의 결과가 달라짐

++
항의 값에 1 더함

val = ++num; //먼저 num값이 1 증가한 후 val 변수 대입

val = num++; //val 변수에 기존 num 값을 먼저 대입한 후 num 값이 1 증가


--
항의 값에서 1을 뺌

val = --num; //먼저 num 값이 1 감소한 후 val 변수에 대입

vla = num--; //val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 감소

package assignment
public class OperationEx {
    public static void main(String[] args) {
        int num = 10;
        System.out.println(num++); //10, ++이 뒤에있으니 값을 표시한 다음 1을 더해라
        System.out.println(num); //11, 1이 더해진 값
    }
}


관계 연산자
이항 연산자
연산의 결과가 true(참), false(거짓)으로 반환됨
>, <, >=, <=, ==(두 값이 같으면 참), !=(두 값이 다르면 참)

package assignment;
public class OperationEx2 {
    public static void main(String[] args) {
        System.out.println(3>5); //false
        System.out.println(3<5); //true

        int num1 = 10;
        int num2 = 5;
        boolean flag = (num1 > num2);
        System.out.println(flag); //true
    }
}


논리 연산자
관계 연산자와 혼합하여 많이 사용
연산의 결과가 true(참), false(거짓)으로 반환됨

&&(논리 곱)
두 항이 모두 참인 경우 결과 값이 참

booleanval = 5 > 3) && (5 > 2);


||(논리 합)
둘 중 하나의 항만 참이면 결괏값이 참

booleanval = (5 > 3 ) || (5 < 2);


!(부정)
단항 연산자
참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꿈

booleanvla = !(5 > 3);


단락 회로 평가(short circuit evaluation)
논리 곱(&&)은 두 항이 모두 true일 때만 결과가 true >> 앞의 항이 false면 뒤 항을 평가하지 않아도 false
논리 합{||)은 두 항이 모두 false일 때만 결과가 false >> 앞의 항이 true면 뒤 항을 평가하지 않아도 true

package assignment;
public class OperationEx3 {
    public static void main(String[] args) {
        int num1 = 10;
        int i = 2;

        boolean value = ( ((num1 = num1 + 10) < 10) && ((i = i+2) > 10) );
        //앞의 값이 20<10으로 false이기에 뒤의 항은 연산안해도 false (&&논리곱-둘 다 true일때 true)
        System.out.println(value); //false
        System.out.println(num1); //20
        System.out.println(i); //2, 연산되지 않음

        boolean value2 = ( ((num1 = num1 + 10) > 10) && ((i = i+2) > 10) );
        //앞의 값이 20>10으로 true이기에 뒤의 항까지 연산
        System.out.println(value2); //false
        System.out.println(num1); //30
        System.out.println(i); //4
    }
}


복합 대입 연산자
대입 연산자와 다른 연산자를 함께 사용
프로그램에서 자주 사용하는 연산자

+=
두 항의 값을 더해서 왼쪽 항에 대입

 num1 += 2; //num1 = num1 + 2;와 같음


-=
왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입

num1 -= 2; //num1 = num1 - 2;와 같음


*=
두 항의 값을 곱해서 왼쪽 항에 대입

num1 *=2; //num1 = num1 * 2;와 같음


/=
왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입

num1 /= 2; //num1 = num1 / 2;와 같음


%=
왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입

num1 %= 2; //num1 = num1 % 2;와 같음

package assignment;
public class OperationEx4 {
    public static void main(String[] args) {
        int num1 = 10;
        System.out.println(num1 += 1); //11, num1 = num1 + 1과 같음
        System.out.println(num1 %= 10); //1, num1 = num1 % 11;과 같음 (11을 10으로 나눈 후 그 나머지)

        num1 -= 1; //num1 = num1 - 1과 같음
        System.out.println(num1); //0,
    }
}


조건 연산자
삼항 연산자
조건 식의 결과가 true인 경우와 false인 경우에 따라 다른 식이나 결과가 수행됨
제어문 중 조건문을 간단히 표현할 때 사용할 수 있음

조건식 ? 결과1 : 결과2; //조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택됨

int num = (5 > 3) ? 10 : 20; //true이기에 10이 num에 대입

package assignment;
public class OperationEx5 {
    public static void main(String[] args) {
        int num1 = (5 > 3)? 10:20;
        System.out.println(num1); //10, true이기에 결과1 수행

        int num2 = (5 < 3)? 10:20;
        System.out.println(num2); //20, false이기에 결과2 수행
    }
}


비트 연산자
주로 자바보단 c언어에서 씀
정수에만 사용할 수 있다

연산자 설명
~ 비트의 반전(1의 보수) a = ~a;
& 비트 단위 AND 1 & 1 //둘 다 1일 때 1 반환, 그 외는 0
package assignment;
public class OperationEx6 {
    public static void main(String[] args) {
        int num1 = 5;  //0000 0101
        int num2 = 10; //0000 1010
        int num3 = 11; //0000 1011

        int result1 = num1 & num2; //두 비트가 모두 1인 경우만 1, 아니면 0
        System.out.println(result1); //0, 0000 0000

        int result2 = num1 & num3;
        System.out.println(result2); //1, 0000 0001
    }
}

연산자 설명
| 비트 단위 OR 0|0 //둘 다 0일때 0반환, 그 외는 1
package assignment;
public class OperationEx7 {
    public static void main(String[] args) {
        int num1 = 5;  //0000 0101
        int num2 = 10; //0000 1010

        int result1 = num1 | num2; //두 비트가 모두 0인 경우만 0, 아니면 1
        System.out.println(result1); //15, 0000 1111
    }
}

연산자 설명
^ 비트 단위 XOR 두 개의 비트가 서로 다른 경우 1 반환, 같을 경우는 0
<< 왼쪽 shift a<<2 //변수 a를 왼쪽으로 2비트 이동
>> 오른쪽 shift a>>2 //변수a를 오른쪽으로 2비트 이동
<<<, >>> 왼쪽, 오른쪽 shift <<, >>와 동일한 연산이지만, 채워지는 비트가 부호와 상관없이 0


마스크
특정 비트들은 가리고 몇 개의 비트들의 값만 사용할 때

비트 켜기
특정 비트들만을 1로 설정해서 사용하고 싶을 때
(ex. & 00001111 >>하위 4비트 중 1인 비트만 꺼내기)

비트 끄기
특정 비트들만을 0으로 설정해서 사용하고 싶을 때
(ex. | 11110000 >>하위 4비트 중 0인 비트만 0으로 만들기)

비트 토글
모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을 때

연산자 우선순위

우선순위 연산자 연산방향
1 일차식 () [] . >>
2 단항 ! ++ -- + - <<<
3 산술 % / * >>
4 산술 + - >>
5 비트이동 << >> >>
6 관계 < > <= >= >>
7 관계 == != >>
8 비트 곱 & >>
9 비트 차 ^ >>
10 비트 합 | >>
11 논리 곱 && >>
12 논리 합 || >>
13 조건 ? : >>
14 대입 = == += -= *= %= /= <<<

2. 제어 흐름 이해하기(7~8강)

조건문
주어진 조건에 따라 다른 수행문이 실행되도록 프로그래밍하는 것

if문

if(조건식) {
	수행문;
}


if-else문

if(조건식) {
	수행문1;
}
else{
	수행문2;
}

package assignment;
public class ifExample {
    public static void main(String[] args) {
        int age = 10;

        if (age >=8 ) {
            System.out.println("학교에 다닙니다.");
        }
        else {
            System.out.println("학교에 다니지 않습니다.");
        }
    }
}


if-else if-else문
하나의 경우에 조건이 여러 개 해당하는 경우

if (조건1) {
    문장1;
}else if(조건2) {
    문장2;
}else if(조건3) {
    문장3;
}else {
    문장4;
}

package assignment;
public class ifExample2 {
    public static void main(String[] args) {
        int age = 9;
        int charge = 0;

        if(age < 8) {
            charge = 1000;
            System.out.println("미취학 아동입니다.");
        }
        else if(age < 14) {
            charge = 2000;
            System.out.println("초등학생입니다.");
        }
        else if(age < 20) {
            charge = 2500;
            System.out.println("중, 고등학생입니다.");
        }
        else {
            charge = 3000;
            System.out.println("일반인입니다.");
        }

        System.out.println("입장료는 " + charge + "원 입니다.");
        //초등학생입니다. 입장료는 2000원 입니다.
    }
}

else if는 앞의 경우에 만족하면 거기서 출력
만약 모두 if로 쓴다면 앞의 조건을 만족하든 말든 뒤의 것을 전부 계산해봄
위의 예제에서 전부 else if를 전부 if로 바꾼다면 “중, 고등학생입니다. 입장료는 2500원 입니다”가 출력됨

조건문과 조건 연산
간단한 if-else조건문은 조건 연산자로 구현할 수 있음

if-else로 표현

if ( a > b)
    max = 1;
else
    max = b;


조건 연산자로 표현

max = (a > b) ? a : b;


switch-case문
조건식의 결과가 정수 또는 문자열의 값이고 그 값에 따라 수행문이 결정될 때 if-else if-else문을 대신해 switch-case문 사용 가능
case값에 문자열도 사용 가능

if(rank == 1) {
	medalColor = ‘G’;
}
else if(rank ==2) {
	medalColor = ‘S’;
}
else if(rank ==3) {
	medalColor = ‘B’;
}
else {
	medalColor = ‘A’;
}

package assignment;
public class switchCase {
    public static void main(String[] args) {
        int rank = 1;
        char medalColor;

        switch(rank) {
            case 1: medalColor = 'G';
                    break; //break는 case문을 빠져나오는 역할, 쓰지않으면 break가 나올때까지 계속 수행됨
            case 2: medalColor = 'S';
                    break;
            case 3: medalColor = 'B';
                    break;
            default: medalColor = 'A';
    	}
    	System.out.println(rank +"등 메달의 색깔은 " + medalColor + "입니다."); //1등 메달의 색깔은 G입니다.
    }
}

package assignment;
public class switchCase2 {
    public static void main(String[] args) {
        int month = 10;
        int day;

        switch (month) {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            day = 31;
            break;
        case 2:
            day = 28;
            break;
        case 4: case 6: case 9: case 11:
            day = 30;
            break;
        default:
            day = 0;
            break;
        }
        System.out.println(month + "월은 " + day + "일 까지 있습니다.");
        //10월은 31일 까지 있습니다.
    }
}


반복문
주어진 조건이 만족할 때까지 수행문을 반복적으로 수행
while, do-while, for문이 있음
조건의 만족과 반복 가능 여부에 대해 정확한 코딩을 해야 함

while문
조건식이 참인 동안 수행문을 반복해서 수행
조건이 맞지 않으면 수행문 시작x

while(조건식) {
    수행문1;
	…
}
    수행문2;
	…

package loopexample;
public class WhileExample {
    public static void main(String[] args) {
        int num = 1;
        int sum = 0; //값 초기화

        while(num <= 10) {
            sum += num;
            num ++;
        }
        System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
        //1부터 10까지의 합은 55입니다.
    }
}


do-while
먼저 수행문을 한 번 수행하고 조건식 체크
조건이 맞지 않아도 무조건 1번은 수행이 됨
수행문이 반드시 한 번 이상 수행되어야 하는 경우 사용

do {
    수행문1;
    …
} while(조건식);
    수행문2;
    …

package loopexample;
public class WhileExample2 {
    public static void main(String[] args) {
        int num = 1;
        int sum = 0;

        do{
            sum += num;
            num ++;
        }while(num <= 10);

        System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
        //1부터 10까지의 합은 55입니다.
    }
}


for문
반복문 중 가장 많이 사용하는 반복문
주로 조건이 횟수인 경우 사용
초기화식, 조건식, 증감식을 한꺼번에 작성

for(초기화식; 조건식; 증감식) {
    수행문;
}

package loopexample;
public class ForExample {
    public static void main(String[] args) {
        int num;
        int sum;

        for(num = 1, sum = 0; num <= 10; num++) {
            sum += num;
        }
        
        System.out.println(sum); //55
        System.out.println(num); //11
    }
}


각 반복문의 쓰임
while문
하나의 조건에 대해 반복수행이 이뤄질 때 사용
조건이 맞지 않으면 수행문이 수행되지 않음
주로 조건식이 true, false로 나타남

do-while문
하나의 조건에 대해 반복수행이 이뤄질 때 사용
단, 수행문이 반드시 한 번 이상 수행됨

for문
수의 특정 범위, 횟수와 관련한 반복 수행에서 주로 사용

무한 반복

while(true){
    수행문;
}

do{
    수행문;
}while(true);

for(;;){
    수행문
}


중첩된 반복문-반복문 내부에 또 반복문이 사용됨

package loopexample;
public class ForExample2 {
    public static void main(String[] args) {
        int dan;
        int times;

        for(dan = 2; dan <= 9; dan++) {
            for(times = 1; times<=9; times++) {
                System.out.println(dan + "X" + times + "=" + dan*times);
            }
            System.out.println(); //단마다 한 줄 띄기
        }
    }

package loopexample;
public class WhileExample3 {
    public static void main(String[] args) {
        int dan = 2;
        int times = 1;

        while(dan <= 9) {
            times = 1; //초기화 해야 9단까지 돌아감
            while(times<=9) {
                System.out.println(dan + "X" + times + "=" + dan*times);
                times++;
            }
            dan++;
            System.out.println(); //단마다 한 줄 띄기
        }
    }
}

package loopexample;
public class ForExample3 {
    public static void main(String[] args) {
        for(int i = 0; i <10; i++) {
            System.out.println("Hello, world");
        }

        System.out.println();

        for(int i = 1; i <=10; i++) {
            System.out.println("Hello, world");
        }
        //똑같이 10개 출력되지만, 0부터 시작하는 걸 더 선호함!
    }
}


continue문
반복문과 함께 쓰임
반복문 내부 continue문을 만나면 이후 반복되는 부분을 수행하지 않고 조건식이나 증감식을 수행함

package loopexample;
public class ContinueExample {
    public static void main(String[] args) {
        int total = 0;
        int num;

        for(num = 1; num <= 100; num++) { //100까지 반복
            if ((num % 2) == 0) { //num이 짝수일떄(나머지가 0일떄)
                continue; //이후 수행을 생략하고 num++ 수행
            }
            total += num; //num값이 홀수인 경우에만 수행
        }
        System.out.println(total); //2500
    }
}


break문
반복문에서 break문을 만나면 더 이상 반복을 수행하지 않고 반복문을 빠져나옴
중첩된 반복문 내부에 있는 경우 가장 가까운 반복문 하나만 빠져나옴

package loopexample;
public class BreakExample {
    public static void main(String[] args) {
        int sum = 0;
        int num = 1;

        while(true) {
            sum += num;
            if(sum > 100)
                break; //sum이 100보다 크면 반복문을 나가라
            num++;
        }
        System.out.println(sum); //105
        System.out.println(num); //14, 14에서 100을 넘는다
    }
}

package loopexample;
public class BreakExample2 {
    public static void main(String[] args) {
        int sum = 0;
        int num = 0;

        for(num = 0; ; num++) { //조건식을 생략하는 대신 break문을 사용
            sum += num;
            if(sum >= 100) //종료조건
                break; //반복문 중단
        }
        System.out.println(num); //14
        System.out.println(sum); //105
    }
}

package loopexample;
public class ForExample4 {
    public static void main(String[] args) {
        int dan = 2;
        int times = 1;

        while(dan <= 9) {
            if((dan % 2) != 0) {  //짝수단만 출력 (%나머지, != 두 값이 다를때)
                dan++;
                continue;
            }
            times = 1;
            while(times <= 9) {
                System.out.println(dan + "X" + times + "=" + dan*times);
                times++;
            }
            dan++;
            System.out.println();
    	}
    }
}

package loopexample;
public class ForExample5 {
    public static void main(String[] args) {
        int dan = 2;
        int times = 1;

        while(dan <= 9) {
            times = 1;
            while(times <= 9) {
                if(times > dan) break; //dan보다 times가 크면 멈추기
                System.out.println(dan + "X" + times + "=" + dan*times);
                times++;
            }
            dan++;
            System.out.println();

        }
 	//2X1=2 2X2=4 3X1=3 3X2=6 3X3=9 ... 
    }
}

'공부기록 > 사전학습' 카테고리의 다른 글

Java 사전학습_4  (1) 2022.11.02
Java 사전학습_3  (1) 2022.10.31
Java 사전학습_1  (1) 2022.10.25
Oracle  (1) 2022.10.22
DATABASE1~MySQL  (1) 2022.10.20

댓글