- 연산자(operator)는 연산에 사용하는 기호를 말합니다.
- 가장 쉽게 생각하면, 수학시간에 배운 더하기, 빼기, 곱하기, 나누기 등을 하는 기호입니다.
- 컴퓨터 언어들이 다루는 연산자는 매우 많습니다.
- 그래서 이번 강좌에서는 연산자의 개념과 사칙연산자만 보도록 하겠습니다.
1. 항과 연산자
- 연산자(Operator)는 위에서도 말했듯이 연산에 사용되는 기호입니다.
- 항(Operand)은 연산에 사용되는 값입니다.
- 예를 들어 3 + 5 라는 연산이 있다면 +는 연산자, 3과 5는 항입니다.
- 연산자는 항의 개수에 따라 일항(단항)연산자, 이항연산자, 삼항연산자로 나눕니다.
연산자 | 설명 | 예시 |
일항 연산자 | 항이 한 개인 연산자 | num++ |
이항 연산자 | 항이 두 개인 연산자 | num1 + num2 |
삼항 연산자 | 항이 세 개인 연산자 | (num1 > num2) ? true : false; |
- 위에 예시로 들었지만, 일항연산자와 이항연산자는 너무 많습니다.
- 차근차근 하나씩 배워 나가면 좋습니다.
- 삼항연산자는 항이 3개지만, 조건문과 비슷한 개념입니다.
- 이것 역시 삼항연산자 강좌에서 따로 보도록 하겠습니다.
1) 대입연산자(Assignment Operator) =
- 대입연산자는 좌변에 우변의 값을 대입하는 연산자를 말합니다.
- 기호는 = 로 보통 좌변의 변수에 우변의 값을 대입합니다.
자료형 변수명 = 값;
int num = 10;
- 이때 사용되는 = 기호를 대입연산자라고 합니다.
- 연산자는 우선 순위라는 것이 있습니다. 보통 일항연산자가 가장 높고, 이항, 삼항 순으로 이루어집니다.
- 이때 높다는 것은 연산이 먼저 처리된다는 것입니다.
- 지금 대입연산자는 이항연산자입니다. = 기호에 양쪽으로 피연산자 즉, 항이 있습니다.
int num1 = 10;
int num2 = 10 + 20;
- 우선 순위가 높다는 개념을 보겠습니다.
- num1은 어차피 연산자가 1이라서 num1에 10을 대입하는 것이 우선적으로 처리됩니다.
- num2는 연산자가 현재 2개입니다. = 기호와 + 기호입니다.
- 대입연산자는 이항연산자 중 우선순위가 가장 낮은 연산자입니다.
- 무슨 이야기냐면 10 + 20 으로 더하기연산이 발생된 후에 num2에 그 30 값이 대입되는 것입니다.
- 우선순위에 대해서도 추후 강좌에서 디테일하게 볼 예정입니다.
- 우선적으로는 대입연산자는 이항연산자 중 가장 우선순위가 낮으므로 가장 마지막에 처리된다고 보면 됩니다.
2. 사칙연산자 - +, - , * , / , %
- 수학시간에 가장 많이 본 연산자입니다.
- 대부분의 분들은 쉽게 이해하고 넘어 갈 수 있는 파트입니다.
1) 부호연산자
- 연산자 중 + 와 - 는 일항 연산자로도 사용이 됩니다.
- 숫자, 변수, 상수 등을 양수나 음수로 나타낼 때 사용합니다.
연산자 | 설명 | 예시 |
+ | 변수나 상수 값을 양수로 처리 | +3, +num |
- | 변수나 상수 값을 음수로 처리 | -3, -num |
- 이제 예제를 실습해 보겠습니다.
- 패키지(ch10_operator)과 클래스(Ex01_UnaryOperator.java)를 추가해 주세요.
- 기초적 작업을 모르는 분은 아래 주소를 클릭하고 보고 오세요.
https://ossam5.tistory.com/613
## 부호연산자 실습1 - Ex01_UnaryOperator.java
package ch10_operator;
public class Ex01_UnaryOperator {
public static void main(String[] args) {
//num 변수에 정수 100을 대입(초기화)
int num = 100;
System.out.println(num); //위에서 초기화한 100이 출력
System.out.println(-num); //-100출력, num값이 교체되는 것은 아님
System.out.println(num); //위에서 초기화한 100이 그대로 출력
num = -num; //num에 -num을 대입(변경)
System.out.println(num); //값이 변경돼서 -100출력
System.out.println(-num); //-(-100)이므로 100이 출력
}
}
- 아래에 설명쓰면 헷갈리는 부분이 생길 것 같아 코드에 직접 코멘트로 작성했습니다.
## 부호연산자 출력1 - Ex01_UnaryOperator.java
- 첫번째는 초기값이 100이 잘 출력됩니다.
- 두번째는 -num이니까 -100이 잘 출력됩니다.
- 세번째는 다시 num을 출력해도 값이 바뀌지 않은 것을 확인할 수 있습니다.
- 네번째는 num값이 -100으로 변경된 것을 확인할 수 있습니다.
- 다섯번째는 -num은 다시 양수로 처리돼서 나오는 것을 확인할 수 있습니다.
2) 산술연산자
- 사칙연산에서 사용되는 연산자인 +, -, *, /, % 를 말합니다.
연산자 | 설명 | 예시 |
+ | 좌변과 우변을 더함 | 5 + 3 |
- | 좌변에서 우변을 뺌 | 5 - 3 |
* | 좌변과 우변을 곱합 | 5 * 3 |
/ | 좌변에서 우변을 나눔 | 5 / 3 |
% | 좌변에서 우변을 나눈 나머지값을 구함 | 5 % 3 |
- 더하기 연산자와 빼기 연산자는 수학시간에 많이 보던 기호입니다.
- 곱하기가 * 로 나누기가 / 로 수학과는 다르다고 보면 됩니다.
- 그리고 % 가 나머지를 구하는 연산자로 수학에서는 없는 기호니 잘 기억하면 좋습니다.
## 산술연산자 실습1 - Ex02_ArithmeticOperator.java
package ch10_operator;
public class Ex02_ArithmeticOperator {
public static void main(String[] args) {
//변수선언
int num1 = 10;
int num2 = 3;
//1. 더하기연산 : +
System.out.println(num1 + num2); //13
//2. 빼기연산 : -
System.out.println(num1 - num2); //7
//3. 곱하기연산 : *
System.out.println(num1 * num2); //30
//4. 나누기연산 : /
System.out.println(num1 / num2); //3 - 둘다 정수이기 때문
System.out.println((double)num1 / num2); //3.333... - 강제형변환
//5. 나머지연산 : %
System.out.println(num1 % num2); //1 - 10/3으로 나눈 나머지값
}
}
- 설명은 주석으로 달아 놨으니 참조하면 됩니다.
- 주의해서 볼 부분은 나누기 연산자입니다.
- [ System.out.println(num1 / num2); ] 를 하면 10 / 3 인데 3이 반환되는 것은 num1과 num2가 모두 정수형 자료형이기 때문입니다.
- 그래서 [ System.out.println((double)num1 / num2); ] 이런 식으로 num1과 num2 중 하나를 실수 자료형으로 강제 형변환해야 결과값은 실수로 받을 수 있습니다.
## 산술연산자 결과1 - Ex02_ArithmeticOperator.java
- 주석 달은 대로 결과가 잘 나오는 것을 확인할 수 있습니다.
- 산술연산자의 우선순위는 일반적인 수학과 같습니다.
- 곱하기와 나누기가 우선순위가 높습니다. 더하기와 빼기는 우선순위가 낮습니다.
- 무슨 이야기인지 실습을 통해 보겠습니다.
- 국어, 영어, 수학점수의 평균을 구하는 것을 해보겠습니다.
## 산술연산자 우선순위 실습1 - Ex02_ArithmeticOperator2.java
package ch10_operator;
public class Ex02_ArithmeticOperator2 {
public static void main(String[] args) {
//변수선언
int kor = 80; //국어
int eng = 90; //영어
int math = 70; //수학
//평균 담는 변수
int avg1 = kor + eng + math / 3;
int avg2 = (kor + eng + math) / 3;
//출력
System.out.println("괄호 안한 평균 : " + avg1);
System.out.println("괄호 처리한 평균 : " + avg2);
}
}
- 각각의 변수에 국어, 영어, 수학 점수를 담았습니다.
- avg1에는 괄호 없이 kor + eng + math / 3 를 처리했습니다.
- 그럼 우선순위가 높은 math / 3 를 처리한 후에 나머지를 더해버립니다.
- avg2는 국어, 영어, 수학점수를 먼저 더하고 나누기를 처리하도록 괄호를 처리했습니다.
## 산술연산자 우선순위 결과1 - Ex02_ArithmeticOperator2.java
- 그럼 괄호처리 안한 평균은 엄청 높은 숫자를 나타내죠? 80 + 70 + 23 으로 처리가 되기 때문입니다.
- 괄호 처리한 평균은 240 / 3 이므로 80의 결과를 나타냅니다.
- 산술연산자는 우선순위를 잘 기억하고 있어야 프로그램에 오류를 줄일 수 있습니다.
3) 연결연산자
- + 연산자는 좌변과 우변이 모두 숫자 자료형이면 더하기 연산을 합니다.
- 하지만 좌변과 우변 중에서 하나라도 다른 자료형(문자열, 문자, 논리... 등)이면 값과 값을 연결해 주는 연결연산자로 처리가 됩니다.
- 그리고 최종 값은 결과적으로 문자열로 처리가 됩니다.
- 실습을 통해서 자세히 보도록 하겠습니다.
## 연결연산자 실습1 - Ex03_ConnectionOperator.java
package ch10_operator;
public class Ex03_ConnectionOperator {
public static void main(String[] args) {
//변수선언
int num = 100; //정수
char ch = 'A'; //문자
String str = "원입니다."; //문자열
boolean bool = true; //논리
System.out.println(num + str); //정수 + 문자열 => 문자열
System.out.println(num + ch); //ch를 자동형변환해서 A는 65로 처리, 결과는 정수반환
System.out.println(ch + str); //문자 + 문자열 => 문자열
//System.out.println(num + bool); //int와 boolean은 연결 불가능
System.out.println(str + bool); //boolean은 문자열과는 가능
}
}
- 변수에 정수형, 문자형, 문자열형, 논리형 모두 선언해 봤습니다.
- 주석을 통해 대부분은 설명해뒀으니 참고해 주시면 됩니다.
- 주의 깊게 볼 내용은 문자 + 정수 => 정수로 반환된다는 점입니다.
- int나 char는 boolean과 연결이 불가능합니다.
- [ //System.out.println(num + bool); ] 앞의 주석 //을 제거하면 에러가 발생하는 것이 보입니다.
- 대신 String과 boolean은 연결이 가능합니다.
## 연결연산자 결과1 - Ex03_ConnectionOperator.java
'컴퓨터언어 > JAVA(자바)' 카테고리의 다른 글
[JAVA강좌] 12강 관계연산자와 논리연산자 (0) | 2024.01.10 |
---|---|
[JAVA강좌] 11강 복합대입연산자와 증감연산자 (0) | 2024.01.10 |
[JAVA강좌] 9강 자료 형변환 (0) | 2024.01.04 |
[JAVA강좌] 8강 상수와 리터럴 (0) | 2024.01.04 |
[JAVA강좌] 7강 자료형 없이 선언 - var - 자바10부터 생긴 문법 (0) | 2024.01.02 |