Skip to the content.

-산술 연산자

     
  연산자 의미
산술 연산자 + 더하기
- 빼기  
* 곱하기  
/ 나누기  
% 나머지 값  

산술연산자는 기존에 알던 개념과 같고,다른점은 %가 /로 나누고 남은 나머지의 값을 구할 때 쓴다는 점이다.

아래와 같이 / 와 %의 연산할때 결과값이다.

이 코드의 결과값이다.

결과
7
1

이 코드의 연산법이다.

-비트 연산자

컴퓨터 내부의 데이트를 비트 단위로 비교하거나 조작할 때 사용한다.

1.논리곱(and) &

각 비트를 비교하여 양쪽 모두 1이면 1,아니면 0으로 반환한다.

논리곱

2.논리합(or)

각 비트를 비교하여 어느 한쪽이 1이면 1,그렇지 않으면 0을 반환한다.

논리합

3.배타적 논리합(xor) ^

각 비트를 비교하여 한쪽이 1이고 다른 한쪽이 0이면 1을,아니면 0을 반환한다.

배타적 논리합

4.1의 보수 표현(not) ~

각 비트를 반전시킨 값을 반환한다.

1의 보수 표현

-관계 연산자

비교 연산자라고도 하며 그동안 수학시간에 배워왔던 부등호의 개념이라 생각하면 된다.

관계연산자의 결과는 true 혹은 false 값인 boolean 자료형으로 반환이 된다.

     
연산자 기능 연산 예
> 왼쪽 항이 크면 참을, 아니면 거짓을 반환 num>3;
< 왼쪽 항이 작으면 참, 아니면 거짓을 반환 num<3;
>= 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓을 반환 num>=3;
<= 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓을 반환 num<=3;
== 두 개 항의 값이 같으면 참,아니면 거짓을 반환 num==3;
!= 두 개 항이 다르면 참, 아니면 거짓을 반환 num!=3;

-논리 연산자

논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만 허용한다.

‘&&’은 그리고(and)의 뜻을 지니고 있으며,

  ‘는 또는(or)의 뜻을 지니고 있다.
         
연산자 의미 설명    
&& and(논리곱) 주어진 조건들이 모두 true일 때만 true를 출력    
      or(논리합) 주어진 조건들 중 하나라도 true이면 true를 출력
! not(부정) true는 false로 false는 true로 출력    

다음은 논리 연산자의 연산 결과1이다.

           
x y x   y x && y
true true true true    
true false true false    
false true true false    
false false false false    

다음은 논리 연산자의 연산 결과2이다.

   
x !x
true false
false true

-instanceof

객체 타입을 확인하는 연산자이다.형변환이 가능한지 여부를 확인하여 true/false로 결과를 반환한다.

주로 상속관계(extends)에서 부모객체인지 자식객체인지 확인하는데 쓰인다.

사용방법으로는 ‘객체 instanceof 클래스’로 선언을 한다.

class Parent {

}

class Child extends Parent {

}
public class Test {
    public static void main(String[] args) {
        Parent parent = new Parent();
        Child child = new Child();

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

여기서 세번째가 false인 이유는 부모클래스가 자식클래스를 찾기때문이다.

-대입 연산자

대입 연산자는 변수에 값을 대입할 때 사용하는 이항 연산자이며,피연산자들의 결합 방향은 오른쪽에서 왼쪽이다.

또한,자바에서는 대입 연산자와 다른 연산자를 결합하여 만든 다양한 복합 대입 연산자를 제공한다.

     
대입 연산자 설명  
= 왼쪽의 피연산자에 오른쪽의 피연산자를 대입  
+= 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후,그 결과값을 왼쪽의 피연산자에 대입  
-= 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후,그 결과값을 왼쪽의 피연산자에 대입  
*= 왼쪽의 피연산자에서 오른쪽의 피연산자를 곱한 후,그 결과값을 왼쪽의 피연산자에 대입  
/= 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후,그 결과값을 왼쪽의 피연산자에 대입  
%= 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후,그 나머지를 왼쪽의 피연산자에 대입  
&= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND 연산한 후,그 결과값을 왼쪽의 피연산자에 대입  
  = 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR 연산한 후,그 결과값을 왼쪽의 피연산자에 대입
^= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR 연산한 후,그 결과값을 왼쪽의 피연산자에 대입  

-람다식

프로그래밍 언어에서 사용되는 개념으로 익명 함수를 지칭하는 용어이다.

간단히 말하자면 수학에서 사용하는 함수를 보다 단순하게 표현하는 방법이다.그만큼 익숙해지면 가독성 면에서 장점이 크다.

람다식 사용법

(매개변수,...)->{실행문...}

(매개변수,…)는 오른쪽 중괄호 {}블록을 실행하기 위해 필요한 값을 제공하는 역할을 한다.

매개 변수의 이름은 개발자가 자유롭게 지정할 수 있으며 인지타입도 명시하지 않아도 된다.->기호는 매개 변수를 이용해서 중괄호{}바디를 실행한다는 뜻으로 해석하면 된다.

람다식의 장점

1.코드를 간결하게 만들 수 있다.

2.코드가 간결하고 식에 개발자의 의도가 명확히 드러나므로 가독성이 향상된다.

3.함수를 만드는 과정없이 한번에 처리할 수 있기에 코딩하는 시간이 줄어든다.

4.병령프로그래밍이 용이하다.

람다식의 단점

1.람다를 사용하면서 만드는 무명함수는 재사용이 불가능하다.

2.디버깅이 다소 까다롭다.

3.람다를 남발하면 코드가 지저분해질 수 있다.(비슷한 함수를 중복생성할 가능성이 높다)

4.재귀로 만들경우에는 다소 부적합한면이 있다.

람다식 예제

1.두개의 숫자 더하기

interface Compare {
    public int compareTo(int a, int b);
}

public class RamdaTest {
    //람다식 문법(매개변수 목록)->{실행문}
    public static void exec(Compare com) {
        int k = 10;
        int m = 20;
        int value = com.compareTo(k, m);
        System.out.println(value);
    }
    public static void main(String[] args) {
        exec((i, j) ->{
            return i + j;
        });
    }
}

2.두개의 숫자중 큰 수 찾기

public class 두개의숫자중큰수찾기 {
    @FunctionalInterface//함수형 인터페이스 체크 어노테이션
    public interface MyNumber {
        int getMax(int num1, int num2);
    }

    public static void main(String[] args) {
        MyNumber max = (x,y) -> (x >= y) ? x : y;
        System.out.println(max.getMax(10, 30));
    }
}

3.Runnable 인스턴스 생성

public class RunnableEx {
    public static void main(String[] args) {
        Runnable runnable = ()->{
            for (int i = 0; i < 30; i++) {
                System.out.println(i);
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    }
}

4.Thread 호출

public class Thread호출 {
    Thread thread = new Thread(() ->{
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    });
}

-삼항연산자

if문을 사용하여 코딩을 할 경우 대부분 코딩라인이 의미없이 길어지기 마련이다.

if(){

}else if(){

}

이렇게만 해도 5라인이 할당된다.

하지만 라인수를 획기정으로 줄여주는 방식이 있는데 바로 삼항연산자라는 것이다.

다음 삼항 연산자에서 초록칸은 조건문이고,빨강은 참일때,파랑은 거짓일때의 코드이다.

주의사항으로는

1.삼항연산자를 사용하여 코드의 라인이 줄어들었다고 컴파일 속도가 빨라지는건 아니다.

2.삼항연산자를 중복해서 처리할 경우,가독성이 떨어질 수 있으므로 중복처리는 피하는것이 좋다.

-연산자 우선 순위

           
우선순위 연산자 피연산자 연산 방향    
0 () 괄호 속 연산자 다양 -    
1 증감(++,–),부호(+,-),비트(~),논리(!) 단항 <-    
2 산술(*,/,%) 이항 ->    
3 산술(+,-) 이항 ->    
4 쉬프트(»,«,»>) 이항 ->    
5 비교(<,>,<=,>=,instanceof) 이항 ->    
6 비교(==,!=) 이항 ->    
7 논리 & 이항(단항) ->    
8 논리 ^ 이항(단항) ->    
9 논리   이항(단항) ->  
10 논리 && 이항 ->    
11 논리     이항 ->
12 조건(? :) 삼항 ->    
13 대입(=,+=,-=,*=,/=,%=,&=,^=, =,«=,»=,»>=) 이항 <-  

-단항,이항,삼항 연산자 순으로 우선순위를 갖는다.

-산술,비교,논리,대입 연산자 순으로 우선순위를 갖는다.

-단항과 대입 연산자를 제외한 모든 연산 방향은 왼쪽에서 오른쪽이다.(->)

-복잡한 연산식에는 ()괄호 사용해서 우선순위를 정해준다.

-연산자 우선순위가 같으면,연산 방향에 따라 달라진다.