about. What I learned/about.Study by myself

3주차 자바스터디

학습할 것


  • 산술 연산자
  • 비트 연산자
  • 관계 연산자
  • 논리 연산자
  • instanceof
  • assignment(=) operator
  • 화살표(->) 연산자
  • 3항 연산자
  • 연산자 우선 순위
  • (optional) Java 13. switch 연산자

 

연산자들에 대해 공부하기 전에 일단 연산자가 무엇인지부터 알아보겠습니다.

연산자는 '연산을 수행하는 기호'를 말합니다. 예를 들어 '*' 기호는 곱셈 연산을 수행하고 곱셈연산자라고 불립니다. 자바에서는 +, -, *,/ 등 사칙연산자 외에도 많은 연산자를 제공합니다. 연산을 하려면 대상이 꼭 필요한데 이를 '피연산자'라고 부릅니다.  

  • 연산자 : 연산을 행하는 주체
  • 피연산자 : 연산의 대상

이제 이 연산자와 피연산자를 가지고 조합하여 계산할 수 있습니다. 연산자와 피연산자를 조합하여 만든 것을 식(expression)이라고 부르고 이 식이라는 것을 실행하게 되면 항상 결과값이 도출되게 되는데 이 과정을 식을 평가(evaluation)이라고 부릅니다.

x를 5라고 가정
x + 5 (식) 
10 (식의 평가)

식을 평가하고나면 그냥 수행만 되었을 뿐이지 사라지고 맙니다. 하지만 우리가 이 식의 평가를 다른 곳에 가져다 쓰기 위해서는 이전에 공부했던 변수(공간)에 이 값을 담아야합니다. 이때 쓰는 것이 =(대입연산자) 입니다. 수학에서는 =는 결과갑을 나타네는 equal 로 표현되지만 프로그래밍에서의 equal의 의미는 '=='이며 equal이라는 단어는 또다른 의미가 있습니다. 

 

연산자의 종류


이제 연산자의 종류별로 특징과 사용법을 알아보겠습니다. 연산자의 종류가 다양하지만 오늘은 목차에 나온 것들에 대해서 자세히 알아보겠습니다.

 

#산술연산자[두개(이항)의 피연산자가 필요] 

덧셈(+), 뺄셈(-), 곱셈(*),나눗셈(%),나머지(/),비트 쉬프트 연산자(<<,>>), 제곱(**) 처럼 기본적인 사칙연산을 제공하고 그에 더해 조금 다른 연산자를 제공합니다. 산술연산자에서 중요시 봐야할 것은 나눗셈(/)과 나머지연산자(%)입니다. 

 

타입 캐스팅과 프로모션에서 본 것과 같이 손해를 보지 않는 것들은 자동으로 프로모션(형변환)시켜주지만 float 타입의 변수를 int 타입의 변수에 담는 행위를 할때는 캐스팅연산자를 사용하여 허락을 해줘야했습니다. 하지만 산술연산에서 아래와 같이 계산하면 자동으로 형변환되며 소수점을 잘리게 됩니다.

int x =5
int y =3

int u = x/y
System.out.println(u);
//결과값 : 1

#비트연산자(check)

비트 단위로 논리 연산을 할때 사용하거나 좌/우 쉬프트 혹은 1의 보수를 만들 때도 사용된다.

기호 설명
& 해당 위치의 비트가 모두 1이라면 1을 반환, 하나라도 0이라면 0을 반환 - 한쪽이라도 1이면 1 반환
| 해당 위치의 비트가 하나라도 1이라면 1을 반환 모두 0일시 0 반환 - 대비되는 값이 서로 다르면 1을 반환
^ 해당 위치의 비트가 서로 다르면 1을 반환, 같으면 0을 반환(XOR)
~ 해당 위치의 비트가 1이면 0, 0이면 1로 반환하여 반환(NOT,1의 보수) - 모든 비트 반전
<< 오른쪽 피연산자만큼 비트를 전부 왼쪽으로 이동 시킨값을 반환(새로운 비트0)
>> 부호를 유지하면서 오른쪽 피연사자만큼 비트를 전부 오른쪽으로 이동 시킨값을 반환
>>> 오른쪽 피연산자만큼 비트를 전부 오른쪽으로 이동하며 새로운 비트는 모두 0으로 한 뒤 바환

 

#관계연산자(비교연산자) - 조건 식에서 많이 쓰임

이 연산자는 연산자 기준으로 양쪽의 관계를 나타내주는 값이고 결과값은 오직 true and false 둘중 하나로 표현한다.   <, >, <=, >=는 대소비교 연산자 ==, !=, instanceof는 등가비교연산자입니다. 이 처럼 우리가 수학시간에 봤던 것도 있고 생소한 부분도 있습니다. 참고로 컴퓨터는 오른쪽에서 왼쪽으로 위에서 아래로 모든 식을 읽어 나가기 때문에 예로 '<'를 기준으로 본다면 '<'오른쪽에있는 것이 왼쪽에 있는 것보다 작다면 true 그렇지 않다면 false로 표현 됩니다.

'=='는 위에서 봤던 것 같이 같다를 표현하고 !=는 같지 않다를 표현합니다. '!'와 'instanceof'에 대해서는 아래 논리연산자에서 자세하게 살펴보겠습니다.

 

문자열을 비교할 경우에는 '=='가 아니라 equals를 사용한다.

 

#논리연산자

위의 비교연산자와 같은 조건식이 여러개일 때 논리 연산자를 이용해서 두개 또는 여러개의 식을 하나의 식으로 표현할 수 있습니다.

&& 연산자(AND) : 조건식 중 어느 한쪽이 거짓이면 false값을 얻는다.(true값은 양쪽이 모두 true일 경우에만)
|| 연산자(OR) :  조건식 중 한쪽만 참(true)여도 참으로 인식됩니다.

10<x<=19는 우리가 일반적으로 중고등학교 때 배우는 조건식의 형태입니다. 하지만 프로그래밍 언어에서는 하나의 변수 또는 피연산자를 두고 두개의 조건식을 만들 수는 없습니다. 논리연산자를 사용하여 10<x && x<=19 로 작성해야합니다. 논리연산자가 있는 이유 중에 하나이기도 합니다. 

 

위에서 본 &과 논리연산자 &&가 다른점은 && 첫번째 조건이 참이면 두번째 조건은 확인하지않는다 &는 첫번째가 참이어도 두번째를 확인합니다. '|' 또한 같습니다.

 

#instanceof연산자

이 연산자는 함수입니다. instanceof에서 of를 제외하면 instance가 남는데 어디서 많이 들어본 단어죠. 인스턴스 = 객체 = 객체 주소 = 참조변수 로 생각될 수도 있습니다.

 

그래서 이 연산자는 (참조변수명 instanceof 참조변수타입)로 사용합니다. 각각의 타입이 같은지 체크하여 boolean 타입으로 값을 돌려줍니다. 여기서 상속/인스턴스의 개념으로 보게되면 오른쪽피연산자에 왼쪽 피연산자가 포함되어 있다면 true값을 돌려줍니다. 여기서 상속(extends)의 개념을 이해하면 조금더 쉽습니다. 상속의 개념은 조금 나중에 이야기해보겠습니다.

 

#assignment(=)연산자

assignment연산자 즉 대입연산자입니다. 단순하다고 생각하실 수도 있으시겠지만 자바에서는 복합 대입연산자를 제공합니다. 복합 대입연산자는 아래와 같습니다.

op= = 설명
i +=3 i = i + 3 두연산자는 항상 붙여서 써야한다.
i -= 3 i = i - 3
i *= 3 i = i * 3
i /= 3 i = i / 3
i %= 3 i = i % 3
i <<= 3 i = i <<= 3
i &= 3 i = i & 3
i |= 3 i = i | 3
i *= 10+j i = i *(10+j)

 

#화살표연산자(->) ---------------- 아직 공부 안됨

 

 

#3항 연산자

조건식 ? 식1 : 식2

조건식이 true 면 식1을 실행하고 false면 식2를 실행시킨다.

 

#연산자 우선순위

이러한 우선순위가 존재하기에 우리가 편하게 식을 사용하여 코드를 짤 수 있는것이다. 우선순위의 순서는 아래와같다.

 

설명
1 (), []
2 !, ~, ++, --
3 * , / , %
4 +, -
5 << , >> , >>>
6 <,>,<=, >=, instanceof
7 ==, !=
8 &
9 ^
10 |
11 &&
12 ||
13 ? : (삼항연산자)
14 복합대입 연산자

 

'about. What I learned > about.Study by myself' 카테고리의 다른 글

AOP- 관점지향 프로그래밍  (0) 2021.08.31
2주차 자바 스터디  (0) 2021.08.16
JAVA VIRTUAL MACHINE  (0) 2021.07.26
메일 보내기  (0) 2021.07.23
::before, after 와 무한 스크롤 페이징  (0) 2021.07.23