3주차 과제: 연산자


목표

자바가 제공하는 다양한 연산자를 학습하세요.


학습할 것

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

산술 연산자 (Arithmetic Operators)


연산자 - 어떤 대상체에 대해 계산을 수행하도록 하는 특수한 문자기호의 총칭 
이중 산술연산자는 일반적인 수학연산을 수행하는데 사용됩니다. 



비트 연산자


비트 연산자는 정수 또는 긴 정수 비트로 이진 논리를 수행하는 데 사용됩니다.



관계 연산자

관계 연산자는 두 값을 비교하는데 쓰이며 이로 인해 '비교 연산자' 라고 불리기도 합니다.



논리 연산자


논리 연산자는 변수 또는 값 간의 논리를 결정하는 데 사용됩니다.


모든 표는 직접 만들었습니다. 
내용 출처 : https://www.w3schools.com/java/java_operators.asp (java operators)

instanceof


instanceof 연산자는 객체 타입을 확인 하는 연산자로 ' 객체 instanceof 클래스 ' 를 선언하는 식으로 사용합니다. 해당 객체가 해당 클래스로 형변환이 가능 할 때 true를 반환하며 반환값이 boolean형이기 때문에 주로 조건문과 같이 사용됩니다.
상속관계에서 부모/자식 관계를 파악하는데 사용할 수 있습니다. 

public static void main(String[] args){

        Parent parent = new Parent();

        Child child = new Child();

        System.out.println( child instanceof Parent );   // true

        System.out.println( parent instanceof Child );   // false
 
   }

자식 객체를 부모 클래스로 형 변환할 수는 있지만 부모 객체를 자식 클래스로 형변환할 수는 없기 때문에 아래 연산자의 결과는 false가 나오는 것입니다.


assignment(=) operator


할당(대입)연산자 '=' 은 오른쪽의 값을 왼쪽 변수에 할당하는 데 사용합니다. 

int num = 10;
String name = "kim";

대부분의 경우 할당 연산자를 다른 연산자와 결합하여 Compound Statement(복합문)라는 명령문의 더 짧은 버전을 작성할 수 있습니다 .
예를 들어 '+=' 은 기존 왼쪽의 변수에 오른쪽의 값을 더하고 다시 대입하라는 뜻입니다. 

    a += 10; 
    a = a + 10;     // 이 두 문장은 같은 의미입니다. 

'-=' 과 '*=', '/=' 그리고 '%=' 또한 같은 방법으로 작동합니다.

ex) 
    int num1 = 5, num2 = 3;
    num1 %= num2;

    System.out.println(num1);

    출력결과: 2        // 5에서 3을 나눈 나머지


화살표(─>) 연산자


arrow operator 또는 lambda operator는 람다표현식에서 쓰는 연산자입니다. 

- 람다 함수(lambda)
    
    람다 식은 매개 변수를 받아 값을 반환하는 짧은 코드 블록입니다. Lambda 식은 메서드와     비슷하지만 이름이 필요하지 않으며 메서드 본문에서 바로 구현할 수 있습니다.    
    자바8부터 지원하는 기능으로 간단히 말해 함수를 변수처럼 사용하는 기능입니다. 
    람다의 특징은 메서드의 인수로 전달될 수 있고, 변수로 저장될 수 있다는 점입니다.
    
    자바는 람다를 사용하기 위해 화살표 연산자를 대입 했고, 화살표 연산자는 매개 변수를 본문에서 구문 적으로 분리하기 위해 사용됩니다.

가장 간단한 람다 식에는 단일 매개 변수와식이 포함됩니다.

    parameter -> expression

둘 이상의 매개 변수를 사용하려면 괄호로 묶습니다.

    (parameter1, parameter2) -> expression

if나 for. 더 복잡한 작업을 수행하기 위해 코드 블록을 중괄호와 함께 사용할 수 있습니다.
람다식이 값을 반환해야하는 경우 코드 블록에 return문 이 있어야합니다 .

    (parameter1, parameter2) -> { code block }


3항 연산자


3개의 연사자로 이루어져 있기 때문에 3항 연산자라고 불리지만
사실은 간단한 'if-else'문의 대체문으로 조건문 적인 성격을 띄고 있습니다.
'if-else'문과 동일한 알고리즘을 가지지만 코드를 단순화 할 수 있어서 대체 사용됩니다.

* 그림은 직접 만들었습니다.

일반적인 if-else문에서 조건에 따라 변수에 다른 값을 대입하고 싶다면 아래와 같이 
작성합니다. 

    if (조건 == true){
        변수 = 표현식1 ;
    }else{
        변수 = 표현식2; 
    }    

이것을 3항 연산자를 사용해 이렇게 만들 수 있습니다. 

    변수 = 조건 ? 표현식1 : 표현식2 ;


연산자 우선 순위


위의 연산자들을 같은 명령어에서 중복해서 사용한다면 어떻게 될까? 
우리는 이와 비슷한 상황을 이미 마주한 적 있습니다. 산수 문제를 풀 때 + - 보다는 * / 를
더 뒤에 있더라도 '괄호 ()' 안의 식을 먼저 푸는 식으로 말입니다.
연산자에도 우선 순위를 두어서 이런 문제를 미리 정리 해 놨습니다. 
아래 표는 연산자의 우선순위를 정리한 표입니다. 상위에 있을 수록 먼저 쓰입니다. 

 


같은 우선순위인 경우 좌측에 있는 순서대로 쓰입니다. 이외에도 괄호 또한 연산자처럼 우선 순위를 가지며 최상위 순서로 작동 합니다. 

이 때 단항 연산자와 괄호의 우선순위를 알고 싶어서 몇가지 테스트를 진행했습니다. 


일반적인 생각이라면 괄호 안의 식이 먼저 계산돼서 
10%2 = 0  이후 --10 즉  9 * 0 의 답인 0이 나올 것이라 생각했습니다.
괄호가 있기 때문에 a와 b의 결과 값은 바뀌지 않을거라 생각했습니다. 


하지만 답은 서로 다르게 나왔고 몇번의 검색을 통해 다른 식을 찾았습니다. 


즉 a는 c와 같은 형태의 모양이었고, 변수의 앞뒤에서 ++ -- 를 붙이는 것은 괄호가 있는것처럼 구성된다는 것 괄호가 있다고 생각하는 것보다 해당 식(메서드)를 대입한다고 보는게 일반적으로 통하는 것 같습니다. 
 

Java 13. switch 연산자






    










댓글

이 블로그의 인기 게시물

git-receive-pack not permitted on 깃 허브 로그인 관련 문제