본문 바로가기

컴퓨터언어/JAVA(자바)

[JAVA강좌] 10강 연산자 개념과 산술연산자

728x90
반응형

 

 

 

 

 

 

- 연산자(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 값이 대입되는 것입니다. 

- 우선순위에 대해서도 추후 강좌에서 디테일하게 볼 예정입니다.

- 우선적으로는 대입연산자는 이항연산자 중 가장 우선순위가 낮으므로 가장 마지막에 처리된다고 보면 됩니다. 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

2. 사칙연산자 - +, - , * , / , %


- 수학시간에 가장 많이 본 연산자입니다. 

- 대부분의 분들은 쉽게 이해하고 넘어 갈 수 있는 파트입니다. 

 

 

 

1) 부호연산자

- 연산자 중  + 와  - 는 일항 연산자로도 사용이 됩니다.

- 숫자, 변수, 상수 등을 양수나 음수로 나타낼 때 사용합니다. 

연산자 설명 예시
+ 변수나 상수 값을 양수로 처리 +3, +num
- 변수나 상수 값을 음수로 처리 -3, -num

 

- 이제 예제를 실습해 보겠습니다. 

- 패키지(ch10_operator)과 클래스(Ex01_UnaryOperator.java)를 추가해 주세요. 

- 기초적 작업을 모르는 분은 아래 주소를 클릭하고 보고 오세요.

https://ossam5.tistory.com/613

 

[JAVA강좌] 1강 JAVA변수와 자료형

1. 프로젝트 패키지 생성 및 자바 파일 생성 - 앞으로의 강좌에서는 패키지 생성 및 자바 파일 생성하는 것을 보여드리진 않겠습니다. - 지금 잘 확인해 주시기 바랍니다. 1) 프로젝트 패키지 생성

ossam5.tistory.com

 

 

 

 

 

## 부호연산자 실습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

 

 

 

 

 

 

 

 

 

728x90
반응형