본문 바로가기
전공 수업/객체 지향 프로그래밍(Java)

[4주 차] - 연산자(Operator)와 반복문(for, while, do-while)

by TwoJun 2022. 9. 26.

    과목명 : 객체지향 프로그래밍(Object oriented programming)

수업일자 : 2022년 09월 21일 (수)

 

 

 

 

1. 연산자(Operator)

1-1. 정의

- 프로그램의 산술식이나 연산식을 표현하고 처리하기 위해 제공되는 다양한 기호를 의미합니다.

- 피연산자(Operand) :  연산자의 실질적인 작업이 되는 대상입니다.

 

 

 

1-2. 연산자의 종류

연산자의 종류 연산자
단항 연산자
(Unary operator)
+, -, ++, --, ~, !
이항 연산자
(Binary operator)
산술 연산자(Arithmetic operator) +, -, *, /, % <<,  >>, >>>
비교 연산자(Comparison operator) >, <, >=, <=, ==, !=
논리 연산자(Logical operator) &&, ||, (...)
삼항 연산자
(Ternary operator)
?, :
대입(할당) 연산자
(Assignment operator)
=

 

 

 

 

1-3. 연산자의 우선 순위 

(1)

- 식에 여러 개의 연산자가 존재할 때, 우선 순위가 높은 연산자부터 먼저 처리하게 됩니다.

- 우선 순위가 동일할 경우, 왼쪽에서 오른쪽 방향으로 처리합니다.

종류 연산 방향 연산자 우선순위
단항 연산자 <---- ++  --  +  -  ~  !  높음























 낮음
산술 연산자 ----> *  /  %
----> +  -
----> <<  >>  >>>
비교 연산자 ----> <  >  <=  >=  instanceof
----> == !=
논리 연산자 ----> &
----> ^
----> |
----> &&
----> ||
삼항 연산자 ----> ?  :
대입 연산자 <---- =  *=  /=  %=  +=  -=   <<==   >>==   >>>==
&=  ^=  |=

 

 

(2) 연산자의 우선 순위 여러 가지 특징

- 괄호의 우선 순위가 가장 높습니다.

- 우선 순위는, 산술 연산자 > 비교 연산자 > 논리 연산자 > 대입 연산자 순서입니다.

- 우선 순위는, 단항 연산자 > 이항 연산자 > 삼항 연산자 순서입니다.

- 단항 연산자, 대입 연산자를 제외한 모든 연산자들은 연산 진행 방향이 왼쪽에서 오른쪽입니다.

 

 

(3) 연산자 - 주의해야 할 점

- <<, >>, >>> 연산자의 경우 덧셈 연산자보다 우선 순위가 낮습니다.

- ||, |(OR) 논리 연산자는 &, &&(AND) 연산자보다 우선 순위가 낮습니다.

 

 

 

 

 

1-4. 증감 연산자(Increment and decrement operator) ++, --

- 증감 연산자는 피연산자의 값을 1 증가시키거나, 1 감소시킬 때 사용됩니다.

증감 연산자 설명
++a 우선 피연산자의 값을 1 증가시킨 후에 연산을 진행합니다.
a++ 우선 연산을 수행한 후 피연산자의 값을 1 증가시킵니다.
--a 우선 피연산자의 값을 1 감소시킨 후에 연산을 진행합니다.
a-- 우선 연산을 수행한 후 피연산자의 값을 1 감소시킵니다.
public static void main(String[] args) {
int number1 = 7, number2 = 7;
int result1, result2;

result1 = --number1 + 4;
result2 = number-- + 4;

System.out.println("전위 감소 연산자에 대한 결과 = " + result1 + ", number1 = " + number1);
System.out.println("후위 감소 연산자에 대한 결과 = " + result2 + ", number2 = " + number2);
}

// 전위 감소 연산자에 대한 결과 = 10, number1 = 6
// 후위 감소 연산자에 대한 결과 = 11, number2 = 6

 

 

 

 

1-5. 비교 연산자(Comparison operator)

- 비교 연산자는 피연산자 사이의 상대적인 크기를 판단하여 Boolean 값을 반환하는 연산자입니다.

연산 결과
a > b a가 b보다 크다면 true를 반환하고 그 외에는 false를 반환합니다.
a < b a가 b보다 작다면 true를 반환하고 그 외에는 false를 반환합니다.
a >= b a가 b보다 크거나 같을 때 true를 반환하고 그 외에는 false를 반환합니다.
a <= b a가 b보다 작거나 같을 때 true를 반환하고 그 외에는 false를 반환합니다.
a == b a와 b가 같다면 true를 반환하고 그 외에는 false를 반환합니다.
a != b a와 b가 다르다면 true를 반환하고 그 외에는 false를 반환합니다.

 

 

 

 

1-6. 논리 연산자(Logical operator)

- 논리 연산자는 주어진 식의 논리식을 판단하여 true, false를 결정할 수 있는 연산자입니다.

- AND, OR 연산은 모두 두 개의 피연산자를 가지는 이항 연산자이며 연산 방향은 왼쪽 > 오른쪽입니다.

- NOT 연산자는 피연산자가 단 하나뿐인 단항 연산자이며 연산 방향은 오른쪽 > 왼쪽입니다.

논리 연산자 설명
&& 논리식이 모두 true이면 true를 반환합니다. (논리 AND 연산)
|| 논리식 중에서 하나라도 true이면 true를 반환합니다. (논리 OR 연산)
! 논리식의 결과가 true라면 false, false라면 true를 반환합니다. (논리 NOT 연산)

 

- 아래의 표는 논리 연산자들의 결과를 나타내는 진리표(Truth table)입니다.

X Y X && Y X || Y !X
true true true true false
true false false true false
false true  false true true
false false false false true

 

 

 

 

 

 

2. 반복문(Iteration statements)

2-1. 정의

- 프로그래밍에서 반복문이란, 제어문(Control flow statements)의 한 종류로써 프로그램 내에서 특정한 부분의 로직이 반복적으로 수행될 수 있도록 하는 구문입니다.

 

- 반복문을 수행할 조건식과, 반복시킬 구문의 블럭 {}, 또는 문장으로 구성됩니다.

 

- 반복 횟수가 중요한 경우 for 문을 사용하고 그 외엔 while 문을 사용합니다.

 

- do-while 문은 기존 while 문의 변형으로, 반복 구문 블럭 {}이 최소한 한 번은 수행될 것을 보장합니다.

 

 

 

 

2.2 for 문

- 반복문 중 하나인 for 문은 초기화식, 조건식, 증감식, 반복 수행할 로직 블럭 {}으로 구성됩니다.

- 조건식이 true일 때만 반복 수행 블럭의 실행문이 실행됩니다.

 

- 반복문 내에 선언된 변수의 경우, 반복문 밖에선 해당 변수를 사용할 수 없습니다.

 

- 문법 :

for (초기식; 조건식; 증감식) {

                실행문1;

}

// 정수의 합을 저장할 변수 result 
int result = 0;

// 1부터 10까지 정수를 더하는 반복문 
for (int count = 1; count <= 10; count++) { result += count; }

// 결과 출력
System.out.println(result);    //55

 

 

 

2-3. 중첩 for 문

- for 문 내부에 또 다른 for 문을 포함시킬 수 있을 때 중첩된 for 문이라고 합니다.

// 구구단을 출력하는 반복문
for(int number1 = 1; number1 <= 9; number1++) {
	for(number2 = 1; number2 <= 9; number2++ { System.out.printf("%d * %d = %d%n", number1, number2, (number1 * number2); }
}

 

 

 

 

2-4. while 문

- while 문은 특정 조건을 만족할 때까지 계속해서 주어진 반복문 로직을 수행합니다.

- 조건식의 연산결과가 true일 때 실행문이 수행됩니다.

 

- 문법 :

while (조건식) {

    실행문;

}

 

int count = 0;

// 반복문 while 문
while (count < 5) { 
    System.out.println("while문에 의한 count의 수는 " + (count + 1) + "입니다.");
    count++;
}

/*
while문에 의한 count의 수는 1입니다.
while문에 의한 count의 수는 2입니다.
while문에 의한 count의 수는 3입니다.
while문에 의한 count의 수는 4입니다.
while문에 의한 count의 수는 5입니다.
*/

 

 

 

 

2-5. do-while 문

- 일반적인 while 문은 반복 루프 진입 전, 조건식을 검사하여 true 여부를 판단하나 do-while문의 경우 먼저 반복문 루프를 한 번 수행하고 나서 조건식을 검사합니다.

 

- 문법:

do {

    조건식이 true일 때 반복적으로 수행하고자 하는 실행문;

} while (조건식);

int number1 = 1, number2 = 1;

// do-while 문
do {
    System.out.println("do-while 문이 " + number1 + "번째 수행 중입니다.");
    number2++;
    
    // number2의 값이 2이므로 아래의 조건식이 false가 됨에 따라 do-while문이 종료됨.
} while (number2 < 1);

// do-while문 종료 후 텍스트 출력
System.out.println("do-while 문이 종료된 후 변수 number2의 값은 " + number2 + "입니다.");


/*
do-while문이 1번째 수행 중입니다.
do-while문이 종료된 후 변수 number2의 값은 2입니다.
*/

 

 

 

 

2-6. break 문

- 소개할 break, continue 문은 일반적인 반복문의 흐름(루프)을 사용자가 직접 제어할 수 있도록 해 주는 제어 구문입니다.

 

- 반복문에서 break 문은 특정 반복문을 빠져나올 수 있는 역할을 수행합니다.

 

- 일반적으로 break 문은 조건문인 if 문과 함께 사용하여 특정 조건을 만족 시, 반복문을 탈출할 수 있도록 코드를 구성합니다.

// 1부터 100까지 정수의 합을 계산하는 코드

// 정수의 합을 저장할 변수 result
int result = 0;

int number = 1;

while (true) {
	result += number;
    
    // number가 100이라면 반복문 탈출
    if (number == 100) { break; }
    
    number++;
}

System.out.println(result);    // 5050

 

 

 

 

2-7. continue 문

- continue 문은 반복 루프 내에서 특정 조건 만족 시, 해당 반복 루프의 일정 부분을 건너뛰고(continue 문 뒤의 문장들은 수행되지 않습니다.) 바로 다음 조건식의 판단으로 넘어가게 됩니다.

 

- 일반적으로 반복 루프 내에서 특정 조건에 대한 예외 처리(Exception handling)를 하고자 할 때 사용됩니다.

// 100 이하의 정수에 대하여 5, 7의 배수만 출력하는 프로그램

for (int number = 1; number <= 100; number++) {
	if (number % 5 == 0 || number % 7 == 0) { System.out.println(number); }
    else { continue; }
}

/*
5
7
10
15
15
...
95
98
100
*/

 

 

 

 

2-8. 이름이 붙은 반복문과 continue, break

- 일반적으로 continue, break와 같은 제어문은 단 하나의 반복 루프를 제어(루프 건너뛰기, 루프 벗어나기)할 수 있습니다.

 

- 그러나, 특정 반복 루프 앞에 이름(Label)을 부여하고 break, continue 문 뒤에 해당 이름(Label)을 명시함으로써 러 반복 루프가 중첩된 상황에 대하여 반복 루프를 벗어나거나 건너뛰는 것이 가능합니다.

 

- 여러 반복 루프 로직에서 특정 반복 루프만 빠져나오고 싶은 경우 해당 방법을 이용할 수 있습니다.

// 특정 구구단 생략하기

// 반복 루프에 라벨 부여
MultipleLoop : 
for (int number1 = 1; number1 <= 9; number1++) {
    // 5단이 되면 반복 루프 탈출
	for (int number2 = 1; number2 <= 9; number2++) { 
    	if (number1 == 5) { break MultipleLoop; } 
    
    // 5단 전까진 모두 출력
    System.out.printf("%d * %d = %d%n", number1, number2, (number1 * number2));
    }
}

 

 

 

 

 

3. 실습 내용

3-1. n년 후의 복리율을 계산하는 프로그램

import java.text.DecimalFormat;

public class CompoundCalculate {
    public static void main(String[] args) {
        int coffeeMoney = 5000;

        // DecimalFormat
        DecimalFormat df = new DecimalFormat("###,###");

        // 복리율
        float compound = 0.05f;

        // 커피값 1년치 계산
        float resultMoney = (coffeeMoney * 365);


        for(int year = 1; year <= 10; year++) {
            System.out.println(year + "년 후의 금액은 " + df.format(resultMoney * (Math.pow(1 + compound, year))) + "원입니다.");
        }
    }
}

< 실행 결과 >

 

 

 

 

 

3-2. 특정 단에서 계산을 중단하는 구구단 프로그램

- 9단까지 계산할 수 있도록 로직을 구성했으나 3단까지만 출력하고 반복문을 종료시키는 간단한 예제입니다.

public class NumberMultiple {

    public static void main(String[] args) {

        // 구구단 반복문 수행
        for (int number1 = 1; number1 <= 9; number1++) {
            for (int number2 = 1; number2 <= 9; number2++) {
                System.out.printf("%d * %d =  %d%n", number1, number2, number1 * number2);
            }

            // 특정 단에서 멈추고자 하는 경우
            if (number1 == 3) break;
        }
    }
}

< 실행 결과 >

 

 

 

 

- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.

- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.

댓글