-연산자
자바에서 연산자는 데이터를 조작하고 계산하는 데 사용됩니다. 연산자는 피연산자라고 하는 하나 이상의 값을 가져와서 결과를 생성합니다.
자바의 연산자는 여러 유형으로 분류됩니다. 산술 연산자는 숫자 값을 사용하여 수학적 계산을 수행합니다. 이들은 더하기(+
), 빼기(-
), 곱하기(*
), 나누기(/
) 등이 있습니다.
비교 연산자는 두 값을 비교하고 논리적인 결과를 반환합니다. 예를 들어, ==
는 두 값이 같은지를 비교하고, >
는 왼쪽 피연산자가 오른쪽 피연산자보다 큰지를 비교합니다.
논리 연산자는 논리적인 연산을 수행하고 참과 거짓을 반환합니다. &&
(논리 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; |
& | 비트 단위 AND | 1 & 1 1반환 그 외는 0 |
| | 비트 단위 OR | 0|0 0반환 그 외는 1 |
^ | 비트 단위 XOR | 두개의 비트가 서로 다른 경우에 1을 반환 |
<< | 왼쪽 shift | a << 2 변수 a를 2비트 만큼 왼쪽으로 이동 |
>> | 오른쪽 shift | a >> 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); } } }
ㅊㅊ 잘보고 가요~