2. 연산자 - (1) 산술 연산자

한승록·2023년 3월 22일
0

자바 기초

목록 보기
3/21
post-thumbnail
'연산자' 는 프로그래밍 언어에서 값을 계산 · 처리 하기 위해 사용하는 기호 혹은 단어라고 할 수 있습니다.
'연산자' 에는 '증감 연산자', '산술 연산자', '시프트 연산자', '비교 연산자', '비트 연산자', '논리 연산자' 등이 있으나 이번에 알아볼 연산자는 '산술 연산자' 에 대해서입니다.


'산술 연산자' 는 우리에게 가장 친숙한 연산자이자 연산의 기본이라고 볼 수 있습니다.
'산술 연산자' 의 종류로는 '+'(덧셈), '-'(뺄셈), '*'(곱셈), '/'(몫 나눗셈), '%'(나머지 나눗셈) 이 있습니다.


가장 먼저 알아볼 기호는 '+'연산자입니다.
'+' 은 숫자끼리 더하면 '덧셈'을 수행하고 문자열을 더하면 'append'역할을 수행하게 됩니다.

이렇듯 다양한 작동을 할 수 있는 이유는 '+' 산술 연산자는 '오버로딩(Overloading)' 이 되어있기 때문입니다.

'오버로딩'에 대하여 간략하게 설명하자면 동일 이름 으로 선언된 객체가 다중 작업 을 수행하는 것입니다.


다음은 '-' 연산자 입니다.
'+''-' 의 가장 큰 차이점은 물론, 증감의 차이도 존재하지만 단연 '문자열' 에 대해 연산이 수행가능한가 에 대한 것입니다.

결론부터 말씀드리자면 '-''문자열' 에 대해 작동하지 않는다 는 것입니다.

때문에 문자열을 제거하기 위해서는 'String 메서드' 를 활용하여야 합니다.


'*' 연산자 역시 문자열에는 작동하지 않습니다.
또한 'C 언어' 와 같이 '포인터' 의 역할을 수행하지도 않습니다.


'/' 연산자 의 특징은 자료형에 따라 '몫'만 구할 수 있습니다.
해당 연산 진행 시 아래의 예시와 같이 '소수점' 까지도 계산이 가능합니다.
		int a = 10;
		int b = 20;
		int c = 31;
		int total = a + b + c;
		int count = 3;
		double avg1 = total / 3;
		double avg2 = total / 3.0;
		double avg3 = total / (double)count;	// 강제 형변환(casting)
		System.out.println("avg1 : " + avg1);
		System.out.println("avg2 : " + avg2);
		System.out.println("avg3 : " + avg3);

<※ 결과는 다음과 같습니다.>

첫 번째 예시의 경우 '실수' 자료형 변수에 '정수' 끼리의 연산을 실행하여 저장하게 되면 'avg1' 과 같이 소숫점 첫번째 자리까지 연산됩니다.

그러나 두 번째의 '묵시적 형변환'의 경우나 세 번째의 '강제 형변환' 을 통한 연산의 경우 표시될 수 있는 최대 소수점자리까지 연산됩니다.


마지막으로 '%' 연산자 의 특징은 '나머지' 를 연산하는 것이 가장 큰 특징입니다.
이때 연산의 결과는 '정수형' 으로 나타나는데 해당 특징으로 인해 다음과 같이 자주 활용됩니다.

1) 정수에서 '짝수', '홀수', '약수', '배수' 등을 확인할때 사용

		System.out.println("짝수 or 홀수");
		System.out.println(10 % 2);	// 2로 나누어 떨어지면 짝수
		System.out.println(11 % 2);	// 2로 나누어 떨어지지 않으면 홀수

<※ 결과는 다음과 같습니다.>



2) 정수의 자리수 구분 시 사용

  		// 10의 n승으로 구성된 숫자로 나누면, 0의 개수만큼 뒷자리를 떼어낼 수 있다
		int birth = 1208;
		int day = birth % 100;
		int month = birth / 100;
		System.out.printf("생일은 %d월 %d일 입니다\n", month, day);

<※ 결과는 다음과 같습니다.>



3) 난수(랜덤)의 범위 제한

		Random ran = new Random();	// import java.util.Random; 을 사용
		int num = ran.nextInt();
		num = num < 0 ? - num : num;	// 0보다 작으면 부호를 반전시켜서 저장한다(삼항 연산자)
        
		System.out.println("첫번째로 뽑은 난수 : " + num);
		
		int num2 = num % 6;
		System.out.println("6으로 나누 나머지 : " + num2);
		
		int num3 = num2 + 1;
		System.out.println("1을 더한 결과 : " + num3);

<※ 결과는 다음과 같습니다.>

@ 해당 예시에 대한 설명을 덧붙이자면 '난수' 는 처음과 같은 결과를 실행 시 랜덤하게 나오는데 해당 난수를 '6으로 나눈 나머지' 로 계산해버리면 나머지의 특성 상 나눈 수 이상으로 나올 수 가 없다는 특성을 활용해 해당 범위만큼 제한하는 효과가 나타나게 된다.


profile
개발 학습

0개의 댓글