연산자
- 하나의 값 또는 여러 개의 값을 피연산자로 하여 새로운 값을 만들어내는 기호
산술 연산자
- 사칙연산에 사용되는 연산자인 +, -, *, /와 나머지 연산자 % 를 포함
연산자 | 기능 | 예시 | 결과값 |
---|
+ (덧셈 연산자) | 두 항의 값을 더한 값을 반환 | 7 + 3 | 10 |
- (뺄셈 연산자) | 좌항의 값에서 우항의 값을 뺀 값을 반환 | 7 - 3 | 4 |
* (곱셈 연산자) | 두 항의 값을 곱한 값을 반환 | 7 * 3 | 21 |
/ (나눗셈 연산자) | 좌항을 우항으로 나눈 값을 반환 | 7 / 3 | 2 |
% (나머지 연산자 또는 모듈로 연산자) | 좌항의 값을 우항의 값으로 나눈 나머지를 반환 | 7 % 3 | 1 |
- 나눗셈 연산자 및 나머지 연산자를 사용할 때에는 우항에 0이 위치할 수 없음
- 어떤 수를 0으로 나눌 수 없음
- 0으로 나누면 DivideByZeroException 발생
- 나눗셈 연산자를 사용할 때, 좌항, 우항 모두 int형이라면 그 결과도 int형이고 소수점 이하의 값은 버려짐
- 좌항이나 우항 중 하나라도 실수 타입의 값이 존재한다면 실수 타입으로 자동으로 형변환되어 계산됨 -> 소수점이 버려지지 않고 온전한 값이 결과값으로 반환됨
증감 연산자
- 변수의 값을 1씩 증가 혹은 감소시키는 연산자
- 연산 순서가 증감 연산자의 위치에 따라 달라질 수 있음
- 증감 연산자가 피연산자보다 앞에 있는 경우 -> 전위형 증감 연산자
- 증감 연산을 먼저 수행한 후, 그 결과값을 적용시킴
- 증감 연산자가 피연산자보다 뒤에 있는 경우 -> 후위형 증감 연산자
- 기존의 값을 먼저 적용시키고 그 다음에 증감 연산 수행
int num = 1;
++num;
num++;
복합 대입 연산자
- 사칙 연산자와 대입 연산자를 함께 조합하여 복합 대입 연산자로 활용
- 증가 혹은 감소시키고자 하는 값이 1보다 크다면 증감 연산자를 사용할 수 없음 => 복합 대입 연산자 사용
num += 2;
비교 연산자
- boolean 타입으로 평가될 수 있는 조건식에 사용
- 대소 비교 연산자(>, <, >=, <=)와 등가 비교 연산자(==, !=)로 분류됨
대소 비교 연산자
- boolean을 제외한 나머지 기본 타입에 모두 사용 가능
- 이항 비교만 가능
- Ex. num이 1보다 크거나 같고 10보다 작다를 표현할 때, 1 <= num < 10이 아닌 1 <= num && num < 10과 같이 논리 연산자를 이용해야 함
등가 비교 연산자
- 모든 타입에 사용할 수 있는 연산자
- 두 항의 값이 동등한지의 여부를 판단할 때 사용
- 기본 타입과 참조 타입 간에는 등가 비교 연산자 사용 불가
- 값이 동등하면 true, 그렇지 않으면 false를 반환
논리 연산자
- AND 연산자 &&, OR 연산자 ||, NOT 연산자 !를 포함
- boolean 타입을 반환
- 논리 연산자의 연산 결과
- AND 연산자(&&) : 피연산자 둘이 모두 true일 때만 true를 반환, 나머지는 false를 반환
- OR 연산자(||) : 피연산자 둘 중 하나라도 true면 true를 반환, 둘 다 false라면 false를 반환
- Not 연산자(!) : true와 false를 반대로 바꾸는 연산자
b1 | b2 | b1 && b2 | b1 || b2 | !b1 |
---|
false | false | false | false | true |
false | true | false | true | true |
true | false | false | true | false |
true | true | true | true | false |
연산자 우선순위
우선순위 | 연산자 | 내용 |
---|
1 | (), [] | 괄호 / 대괄호 |
2 | !, ~, ++, -- | 부정 / 증감 연산자 |
3 | *, /, % | 곱셈 / 나눗셈 연산자 |
4 | <, <=, >, >= | 대소 비교 연산자 |
5 | && | AND 연산자 |
6 | || | OR 연산자 |
7 | ?: | 조건 연산자 |
8 | =, +=, -=, /=, %= | 대입 / 할당 연산자 |
콘솔 입출력(I/O)
- 콘솔에 값을 출력하기 위해서는 System.out.print(), System.out.println(), System.out.printf() 메서드를 활용
콘솔 출력
System.out.print()
- 소괄호 안의 내용을 콘솔에 출력만 하고 줄바꿈을 하지 않음
System.out.println()
- 소괄호 안의 내용을 콘솔에 출력하고 줄바꿈을 함
System.out.printf()
- 지시자(specifier, 형식 지정자)를 이용해 변수의 값을 여러 형식으로 출력
- 지시자
- 값을 어떤 형식으로 출력할 것인지 지정하기 위해 사용
- 실제로 출력되는 값이 아닌 값을 변환해 자신의 위치에 출력해주는 기능
- f : formatted의 약자
지시자 | 출력 포멧 |
---|
%b | boolean |
%d | 10진수 |
%o | 8진수 |
%x, %X | 16진수 |
%c | 문자 |
%s | 문자열 |
%n | 줄바꿈 |
콘솔 입력
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
System.out.println(input);
}
}
-
import java.util.Scanner;
- Scanner : 데이터를 입력받는 기능을 구현한 프로그램
- java.util 위치에 저장되어 있음
- Scanner를 사용할 때에는 java.util에 있는 Scanner를 불러와야 함
-
Scanner scanner = new Scanner(System.in);
- Scanner 클래스의 데이터 입력 기능은 Scanner 클래스 자체가 아닌 Scanner 클래스를 통해 만든 객체에 존재
- 데이터 입력 기능을 사용하려면 Scanner 클래스를 통해 객체를 만들어야 함
- new
- 클래스를 통해 객체를 만들어낼 때 사용하는 연산자
- 인스턴스 : 그 결과물로 만들어진 객체
- 클래스에 new 연산자를 적용하여 인스턴스를 만든다 -> '클래스를 인스턴스화한다'라고 표현함
-
String input = scanner.nextLine();
- Scanner 클래스를 인스턴스화한 인스턴스에는 nextLine() 메서드 존재
- 콘솔을 통해 문자열 데이터를 입력받는 기능 수행
- nextInt()
- nextFloat()
제어문
- 제어문
- 조건문, 반복문을 통틀어 제어문이라고 함
- 조건문
- 반복문
- 일반적인 코드의 흐름은 위에서 아래를 향함
- 제어문을 사용하면 코드의 흐름을 개발자가 원하는 방향으로 변경할 수 있음
조건문
if문
if(조건식) {
}
- if문의 소괄호 안에 boolean 값으로 평가될 수 있는 조건식을 넣음
- 중괄호 안에 실행 블록에는 조건식이 참일 때 실행되는 코드를 적음
if...else문
- 조건식에 따라 실행 블록을 선택
- if문의 조건식이 true라면 해당 블록이 실행되고 조건식이 false라면 다음으로 넘어가 else if문의 조건식 검사
- else if문의 모든 조건식도 false라면 else 블록이 실행됨
if(조건식1) {
}
else if (조건식2) {
}
else {
}
switch문
- 변수가 어떤 값을 갖느냐에 따라 실행문이 선택됨
- 변수의 값에 따라 실행문이 결정되므로 경우의 수가 많아질수록 if문보다 코드가 간결해질 수 있음
switch(변수) {
case 값1:
break;
case 값2:
break;
case 값3:
break;
default:
break;
}
- 괄호 안의 값과 동일한 값을 갖는 case로 가서 실행문 실행
- 괄호 안의 값과 동일한 값을 갖는 case가 없다면 default로 가서 실행문을 실행
- fall through
- break문을 작성하지 않아 switch문을 탈출하지 않고 모든 case문을 실행
향상된 switch문
switch(변수) {
case 값1 ->
case 값2, 값3 ->
}
- 기존 switch문과의 차이점
- 여러 조건에 따라 ','로 구분하여 한 번에 처리할 수 있게 됨
- : 대신 ->를 사용하고 break문이 생략됨
- -> 람다식과 유사하여 람다 스타일 구문이라고 함
- ->를 사용했을 때, 실행문이 2개 이상이거나 반환값이 존재한다면 중괄호 블록( { } )을 사용