jb.log

..loading

JAVA - 04. 연산자

June 27, 2019

연산자란?

어떠한 기능 또는 어떤 대상체에 계산과 같은 처리를 수행하는 문자 또는 기호를 연산자라 한다. Java에서의 연산자는 크게 단항, 이항, 삼항, 대입 연산자로 나뉘며, 이항 연산자는 산술, 비교, 논리 연산자로 나뉠 수 있다.

  • 연산자(operator) : 어떠한 기능을 수행하는 기호 (+, -, *, / 등)
  • 피연산자(operand) : 연산자의 작업 대상 (변수, 상수, 수식 등)

연산자의 종류

산술 연산자 (+, -, *, /, %)

우리가 평소에 자주 사용하는 연산이다.

//사용 예제
int a = 10, b =20;
System.out.println(a + b); //더하기
System.out.println(a - b); //빼기
System.out.println(a * b); //곱하기
System.out.println(a / b); //나누기
System.out.println(a % b); //나눈 나머지

대입 연산자(=)

  • 오른쪽에서 왼쪽으로 할당
  • 변수끼리 할당 가능
  • 변수에 값이 존재하더라도 다른 값을 할당하면 마지막 할당된 값이 할당
  • 연산자중에 우선순위가 제일 낮다
int a = 0, b = 1;
a = b; // 변수의 자료형이 같다면 할당 가능 : a 값이 1로 update
a = 20; // 당연히 자료형에 맞는 타입의 값이면 할당 가능

복합 대입 연산자(+=, -=, *=, /=, %=)

연산자와 대입 연산자를 결합한 연산 후 대입 연산

//복합 대입 연산자

// +=
a += b; // a = a+b

// -=
a -= b; // a = a-b

// *=
a *= b; // a = a*b

// /=
a /= b; // a = a/b

// %=
a %= b; // a = a%b;

// &=
a &= b; // a = a&b;

// |=
a |= b; // a = a | b;

// ^=
a ^= b; // a = a ^ b;

형변환 연산자((DataType))

자동형변환의 경우 알아서 형변환이 일어나지만, 명시적으로 형변환을 필요로 할 때 사용가능하다.

int iNum = 20;
short sNum = (short)iNum;

double dNum = 5.5;
float fNum = (float)dNum;

증감 연산자(++, - -)

  • 증가 연산자(++) : 피연산자의 값을 1 증가시킨다.
  • 감소 연산자(-­ -­) : 피연산자의 값을 1 감소시킨다.

증감연산자는 피연산자의 앞 또는 뒤에 붙일 수 있는데 그에따라 차이점을 보인다.


//전위 형 : 값이 참조되기 전에 증가시키거나 감소시킨다.
int a = 0;
System.out.println(++a); //1

//후위 형 : 값이 참조되고 난 이후 증가시키거나 감소시킨다.
int b = 0;
System.out.println(b++); //0

//이 이후에 값이 증가 된상태
System.out.println(b); //1

비교 연산자(>, >=, <, <=, ==, !=, instanceof)

비교 연산자는 제어문의 조건문이나 반복문에 자주 쓰인다.

//사용 예시
int a = 0 , b = 1;
if(a < b) // a 보다 b가 크다 : 참
if(a <= b) // a 보다 b가 크거나 같다 : 참
if(a > b) // a 가 b보다 크다 : 거짓
if(a >= b) // a 가 b보다 크거나 같다 : 거짓
if(a == b) // a 와 b가 같다 : 거짓

Person p = new Person();
System.out.println(p instanceof Person); // p가 Person의 객체인지 참, 거짓으로 구분 : 참

비트 연산자(&, |, ^, ~)

데이터를 비트단위로 연산할 수 있는 연산자로 정수형또는 논리형에만 사용할 수 있다.

System.out.println(0&1); // 비트 단위의 논리곱(AND)
System.out.println(5|1); // 비트 단위의 논리합(OR)
System.out.println(0^1); // 비트 단위의 배타적 논리합(AND)
System.out.println(~1); // 비트 단위의 보수(부정)
System.out.println(0>>2); // 0을 2 만큼 오른쪽으로 이동시킴. 이동한 만큼의 왼쪽 비트는 부호 확장이 발생
System.out.println(0>>>1); // 부호 확장이 없고 이동한 만큼의 왼쪽 비트는 항상 0 으로 채운다

System.out.println(true&true);
System.out.println(true^false);

논리 연산자(&&, ||, !)

비트 논리 연산자의 경우 연산 대상이 정수형과 논리형에 모두 가능하지만, 논리 연산자의 경우 논리형에만 적용할 수 있다.

System.out.println(true && true);  //true
System.out.println(true && false); //false
System.out.println(true || true);  //true
System.out.println(true || false); //true
System.out.println(false || false);//false
System.out.println(!true);//false
System.out.println(!false;//true

삼항 연산자( ? : )

조건을 평가해서 소괄호 값이 참, 거짓이냐에 따라 수식1, 수식2 값을 대입한다.

//조건 연산자 예제
int num1 = 10;
int num2 = 20;
int result = (false) ? num1 : num2;
System.out.println("결과 : "+ result);

연산자 우선순위

우선순위연산자
1() [] .
2++ , - - , ~ , !
3* , / , %
4+ , -
5>> , >>> , <<
6> , >= , < , <=
7== , !=
8&
9^
10
11&&
12||
13a ? b : c
14=

tip. 우선순위에 상관 없이 ()를 사용하여 우선순위를 지정할 수 있다

Other Posts

October 1, 2019
jsp 프로젝트 만들기 - mvc1, mvc2
이전에 만든 `board-detail.jsp`은 DB와 잘 연결되어 화면에 데이터를 잘 출력하는 것을 볼 수 있다. 하지만 jsp 파일 내의 코드를 보면 자바코드와 html코드가 뒤엉켜 있는 것을 볼 수 있다. 이것을 스파게티 코드라 한다.
September 29, 2019
jsp 프로젝트 만들기 - 시작
본격적으로 jsp를 이용한 servlet 프로젝트를 만들어보겠다. jsp와 servlet의 활용 목적이 주된 내용이기 html/css 는 가급적 손대지 않고 비즈니스 로직에 집중하도록 하겠다.
September 25, 2019
jsp 프로그래밍
jsp란 `Java Server Pages` 의 약자이며 HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.
September 24, 2019
Servlet 상태관리
서블릿은 요청이 오면 응답을 주고 메모리에서 사라지기 때문에 서블릿들 간의 연결이 불가능하다. 만약 기존의 데이터를 저장할 일이 생겼다고 하면 서블릿 스스로 저장할 수 있는 것은 아니다. 이것은 ServletContext로 해결할 수 있다.
September 22, 2019
한글 인코딩
servlet 클래스에서 한글을 출력하면 한글이 깨지는 것을 볼 수 있다. 해당 문제점은 다음과 같이 해결할 수 있다.
September 20, 2019
Servlet 다루기
기존의 html 문서만으로는 동적인 내용을 전달할 수 없다. 때문에 WAS(web application server) 에서 동작하는 프로그래밍 언어를 사용하면 가능하다.