[JAVA] 자바기초 – 연산자 와 제어문

-연산자

자바에서 연산자는 데이터를 조작하고 계산하는 데 사용됩니다. 연산자는 피연산자라고 하는 하나 이상의 값을 가져와서 결과를 생성합니다.
자바의 연산자는 여러 유형으로 분류됩니다. 산술 연산자는 숫자 값을 사용하여 수학적 계산을 수행합니다. 이들은 더하기(+), 빼기(-), 곱하기(*), 나누기(/) 등이 있습니다.
비교 연산자는 두 값을 비교하고 논리적인 결과를 반환합니다. 예를 들어, ==는 두 값이 같은지를 비교하고, >는 왼쪽 피연산자가 오른쪽 피연산자보다 큰지를 비교합니다.
논리 연산자는 논리적인 연산을 수행하고 참과 거짓을 반환합니다. &&(논리 AND), ||(논리 OR), !(논리 NOT) 등이 있습니다.
대입 연산자는 값을 변수에 할당합니다. 예를 들어, =는 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당합니다.
비트 연산자는 이진수로 피연산자를 조작합니다. &(비트 AND), |(비트 OR), ^(비트 XOR) 등이 있습니다.
이외에도 자바에는 삼항 연산자(조건 ? 표현식1 : 표현식2)와 instanceof 연산자(객체의 유형을 확인) 등이 있습니다.
이러한 연산자들은 자바 프로그래밍에서 핵심적인 역할을 하며, 데이터 조작과 흐름 제어를 위해 자주 사용됩니다.

-항과 연산자

  • 항(operand) : 연산에 사용되는 값
  • 연산자(operator) : 항을 이용하여 연산하는 기호
연산자설명연산 예
단항 연산자항이 한 개인 연산자++num
이항 연산자항이 두 개인 연산자num 1 + num2
삼항 연산자항이 세 개인 연산자(5>3) ? 1 : 0

-대입 연산자

  • 변수에 다른 변수나 값을 대입하는 연산자
  • 이항 연산자 중 우선 순위가 가장 낮은 연산자들
  • 왼쪽 변수 = 오른쪽 변수 (또는 식, 값)

-부호 연산자

  • 단항 연산자
  • 변수의 부호를 유지 하거나(+) 바꿈(-)
  • 실제 변수의 부호가 변하려면 대입 연산자를 사용해야 함

-산술 연산자

  • % 나머지 구하는 연산자, 수자n 의 나머지 범위는 0 ~ n-1
연산자기능연산 예
+두 항을 더합니다5 + 3
앞에 있느 항에서 뒤에 있는 항을 뺍니다5 – 3
*두 항을 곱합니다5 * 3
/앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구합니다5 / 3
%앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구합니다5 % 3

– 복합 대입 연산자

연산자기능연산 예
+=두 항의 값을 더해서 왼쪽 항에 대입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)
<<=비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입num1 <<= 2 (num1 = num1 << 2)
>>=비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입(왼쪽에 채워지는 비트 값은 부호 비트와 동일)num1 >>= 2 (num1 = num1 >> 2)
>>>=비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입(왼쪽에 채워지는 비트 값은 0)num1 >>>= 2 (num1 = num1 >>> 2)
&=두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입num1 &= 2 (num1 = num1 & num2)
|=두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입num1 |= 2 (num1 = num1 | num2)
^=두 항의 ^비트 연산 후 그 값을 왼쪽 항에 대입num1 ^= 2 (num1 = num1 ^ num2)

-증가, 감소 연산자

연산자기능연산 예
++항에 값에 1을 더합니다.val = ++num; // 먼저 num값이 1 증하한 후에 val 변수에 대입 val = num++; //val 변수에 기존 num 값을 먼저 대입한 후 num값 1증가
항에 값에서 1을 뺍니다.val = –num;// 먼저 num값이 1 감소한 후에 val변수에 대입 val = num — ;// val 변수에 기존 num 값을 먼저 대입한 후에 num값 1감소

-관계 연산자

  • 이항 연산자
  • 연산의 경과가 true(참), false(거짓)으로 반환 됨, 비교연산자 라고도 함
  • 조건문, 반복문의; 조건식으로 많이 사용됨
연산자기능연산 예
>왼쪽 항이 크면 참 아니면 거짓num > 3
<왼쪽 항이 작으면 참 아니면 거짓num < 3
>=왼쪽 항이 오른쪽 항보다 크거나 같으면 참 아니면 거짓num >= 3
<=왼쪽 항이 오른쪽 항보다 작거나 같으면 참 아니면 거짓num <= 3
==두 개의 항의 값이 같으면 참 아니면 거짓num == 3
!=두 개의 항의 다르면 참 아니면 거짓num != 3

-논리 연산자

  • 관계 연산자와 혼합하여 많이 사용 됨
  • 연산의 결과가 true(참), false(거짓)으로 반환 됨
연산자기능연산 예
&&(논리 곱)두 항이 모두 참인 경우에만 결과 값이 참입니다. 그렇지 않은 경우는 거짓booleanVal = (5>3) && (5>2)
||(논리 합)두 항중 하나의 항만 참이면 결과 값은 참입니다. 두항이 모두 거짓이면 결과값은 거짓booleanVal = (5>3) || (5<2)
!(부정)참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꿉니다.booleanVal = !(5>3)
  • 논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true → 앞의 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음
  • 논리 합(||)은 두 항의 결과가 모드 false일 때만 결과가 false → 앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음
public class ShortCircuitEvaluation {
    public static void main(String[] args) {
        int num1 = 10;
        int i = 2;

        boolean value;
        value = ((num1 = num1 + 10) < 10) && ((i = i + 2) < 10);
        System.out.println(value);
        System.out.println(num1);
        System.out.println(i);
        
        value = ((num1 = num1 + 10) < 10) || ((i = i + 2) < 10);
        System.out.println(value);
        System.out.println(num1);
        System.out.println(i);
    }
}

-조건 연산자

  • 조건식의 결과가 true 인 경우와 false인 경우에 따라 다른결과 수행
  • if(조건문)을 간단히 표현할 때 사용 할 수 있음
연산자기능연산 예
조건식 ? 결과 1: 결과2;조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택됨int num = (5>3) ? 10 : 20;
import java.util.Scanner;

public class ConditionTest {
    public static void main(String[] args) {
        int max;
        System.out.println("두 수를 입력 받아서 큰 수를 출력하세요");

        Scanner scanner = new Scanner(System.in);
        System.out.println("input1:");
        int x = scanner.nextInt();
        System.out.println("input2:");
        int y = scanner.nextInt();

        max = (x > y) ? x: y;
        System.out.println(max);

    }
}

– 비트 연산자

  • 대입연산자와 다른 연산자가 함께 쓰임
  • 마스크 : 특정 비트를 가리고 몇 개의 비트 값만 사용할 때
  • 비트 켜기 : 특정 비트들만을 1로 설정해서 사용하고 싶을 때
  • (예)&00001111(하위 4비트 중 1 인 비트만 꺼내기)
  • 비트 끄기 : 특정 비트들만을 0으로 설정해서 사용하고 싶을 때
  • (예)|11110000(하위 4비트 중 0인 비트만 0으로 만들기)
  • 비트 토글 : 모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을 때
연산자기능연산 예
~비트의 반전(1의 보수)a = ~a;
&비트 단위 AND1 & 1 1반환 그 외는 0
|비트 단위 OR0|0 0반환 그 외는 1
^비트 단위 XOR두개의 비트가 서로 다른 경우에 1을 반환
<<왼쪽 shifta << 2 변수 a를 2비트 만큼 왼쪽으로 이동
>>오른쪽 shifta >> 2 변수 a를 2비트만큼 오른쪽으로 이동
>>>오른쪽 shift>>동일한 연산
채워지는 비트가 부호와 상관 없이 0임
public class BitTest {
    public static void main(String[] args) {

        int num1 = 5;   //00000101;
        int num2 = 10;  //00001010;

        System.out.println(num1 | num2);
        System.out.println(num1 & num2);
        System.out.println(num1 ^ num2);

        System.out.println(num1 << 2);
        System.out.println(num1);

        System.out.println(num1 <<= 2);
        System.out.println(num1);


    }
}

-제어문

자바에서 제어문은 프로그램의 실행 흐름을 조절하는 데 사용됩니다. 제어문은 조건에 따라 코드 블록을 실행하거나 반복하는 데 사용됩니다.
조건문은 조건식을 평가하고 결과에 따라 코드 블록을 실행합니다. 가장 일반적인 조건문은 if, else if, else입니다. 예를 들어, if (조건식) { // 코드 블록 } 형태로 사용됩니다.
반복문은 조건식이 참일 때 반복하여 코드 블록을 실행합니다. 자바에서 가장 널리 사용되는 반복문은 for, while, do-while입니다. for문은 초기화, 조건식, 증감식을 지정하여 반복을 제어합니다. while문은 조건식이 참일 때 반복을 실행하고, do-while문은 먼저 코드 블록을 실행한 다음 조건을 평가합니다.
제어문을 사용하여 프로그램의 실행 흐름을 조절하고 조건에 따라 다른 동작을 실행할 수 있습니다.

-조건문

-if문

import java.util.Scanner;

public class IfElseTest {
    public static void main(String[] args) {

        int age;
        System.out.println("나이를 입력하세요:");

        Scanner scanner = new Scanner(System.in);
        age = scanner.nextInt();
        if(age >= 8){
            System.out.println("학교에 갑니다.");
        }
        else{
            System.out.println("학교에 다니지 않습니다.");
        }
    }
}

– if-else, if-else 문

import java.util.Scanner;

public class IfElseIfElseTest {
    public static void main(String[] args) {
        
        int age;
        int charge;

        System.out.println("나이를 입력하세요:");
        Scanner scanner = new Scanner(System.in);
        age = scanner.nextInt();

        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 + "원 입니다.");


    }
}

-switch 문

  • if – else if – else 문을 사용할 때 복잡하고 번거로운 부분을 가독성 좋게 구현
  • 비교 조건이 특정 값이나 문자열인 경우 사용
  • break 문을 사용하여 각 조건이 만족되면 switch 블럭을 빠져나오도록 함
  • default
import java.util.Scanner;

public class SwitchCaseTest {
    public static void main(String[] args) {

        int month;
        System.out.println("달을 입력하세요:");
        Scanner scanner = new Scanner(System.in);
        month = scanner.nextInt();

        int day = 0;

        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:
                System.out.println("error");
        }
        System.out.println(month + "월은" + day + "일 까지 있습니다.");
    }
}




import java.util.Scanner;

public class SwitchCaseTest2 {
    public static void main(String[] args) {

        int month;
        System.out.println("달을 입력하세요:");
        Scanner scanner = new Scanner(System.in);
        month = scanner.nextInt();

        int day = switch(month){

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

– 반복문

-while 문

  • 주어진 조건에 맞는 동안(true) 지정된 수행문을 반복적으로 수행함
  • 조건이 맞지 않으면 반복하던 수행을 멈추게 됨
  • 조건은 주로 반복 횟수나 값의 비교의 결과에 따라 true, false 판단 됨
public class WhileTest {
    public static void main(String[] args) {

        int num = 1;
        int sum = 0;
        while (num <= 10){
            sum += num;
            num++; //대입연산자 랑 같음 ++
        }
        System.out.println(sum);
        System.out.println(num);
        System.out.println(num+1);
        System.out.println(num);
    }
}

// 무한반복
while(true){
.....
}

-do while 문

while 문do-while 문for 문
수행조건이 참인 동안 반복 수행
조건이 맞지 않으면 수행되는 부분이 없음
조건이 참인 동안 반복 수행 수행문을 먼저 수행하고 조건 체크초기화, 조건체크, 증감 순으로 수행
쓰임조건식의 결과나 변수나 true, false 값인 경우 주로 사용조건식의 결과나 변수가 true, false 값인 경우 주로 사용특정 수의 범의, 횟수와 관련하여 반복되는 경우 주로 사용 배열과 함께 많이 사용됨
public class ForTest {
    public static void main(String[] args) {

        int num = 1;
        int sum = 0;
        while (num <= 10){
            sum += num;
            num++; //대입연산자 랑 같음 ++
        }
        System.out.println(sum);

        int i = 0;
        int count = 1;

        for(i = 0, sum = 0; i <= 10; i++){
            sum += i;
            //count++
            System.out.println(sum);
        }
    }
}

-중첩 반복문

  • 여러 겹으로 반복문을 겹쳐서 구현가능(단 수행시간에 문제가 발생할 수 있음)
  • 외부 반복문과 내부 반복문 간의 변수 값 변화에 유의 하며 구현하여야 함
public class NestedLoopTest {
    public static void main(String[] args) {
        int dan;
        int count;

        for(dan = 2; dan <= 9; dan++){
            for(count = 1; count <=9; count++){
                System.out.println(dan + "X" + count + "=" + dan * count);
            }
            System.out.println();
        }
        //for 문이 좀더 편함!
        dan = 2;
        count = 1;
        
        while (dan <= 9){
            count = 1;
            while (count <= 9){
                System.out.println(dan + "X" + count + "=" + dan * count);
                count++;
            }
            dan++;
        }
    }
}

-break 문

  • 감싸고 있는 제어문의 블록을 빠져 나오는 기능
  • 반복문에서는 주로 조건문(if)와 같이 사용하여 조건에 해당되는 경우 반복 수행을 멈추고 반복문 외부로 수행이 이동
  • 여러 반복문이 중첩되어 있는 경우엔 break 문이 포함되어 있는 반복문만 빠져나옴
public class BreakTest {
    public static void main(String[] args) {

        int sum = 0;
        int num = 1;

        for(num = 1; ; num++){
            sum += num;
            if (sum > 100) {
                break;
            }
        }
        System.out.println(sum);
        System.out.println(num);
    }

}

-continue 문

  • 반복문 내부에서 조건문(if)와 같이 사용하며, 조건이 맞는 경우(true 이면) 이후 반복문 블럭 내부의 다른 수행문들을 수행 하지 않음.
public class ContinueTest {
    public static void main(String[] args) {

        for (int i = 0; i <= 100; i++){
            if ((i % 3) == 0){
                continue;
            }
            System.out.println(i);
        }
    }
}

1 thought on “[JAVA] 자바기초 – 연산자 와 제어문”

댓글 남기기