과목명 : 객체지향 프로그래밍(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;
}
}
}
< 실행 결과 >
- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.
- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.
'전공 수업 > 객체 지향 프로그래밍(Java)' 카테고리의 다른 글
[6주 차] - 배열(Array)의 선언과 생성, 초기화, 다차원 배열 (2) | 2022.10.07 |
---|---|
[5주 차] - 조건문(if, if-else, else-if, switch 문), 난수를 생성하는 Math.random() 메서드 (0) | 2022.09.29 |
[3주 차] - 변수(Variable)와 상수(Constant), 문자와 문자열(String) (0) | 2022.09.21 |
[2주 차] - Eclipse 개발 환경 설정, 간단한 프로그램 작성하기 (0) | 2022.09.15 |
[1주 차] - 수업 개요 (2) | 2022.08.31 |
댓글