본문 바로가기

Server Programming/BackEnd Project

12일차 - 자바 (3) 연산자 (+ Short-circuit)

반응형

 

연산자의 종류

  • instanceof 연산자 : 해당 객체의 타입 혹은 타입의 자손인지 여부를 리턴한다. (즉, 참조변수 형변환이 가능한지)
    -> 참조 변수 형변환 이전에 반드시 수행해야하는 연산자

 

 

연산자 우선순위

  • 연산자 종류별 우선순위 : 괄호 > 산술 > 비교 > 논리 > 대입
  • 연산자 개수별 우선순위 : 단항 > 이항 > 다항
  • 모두 진행방향이 왼쪽에서 오른쪽
  • 단항과 대입 연산자만 오른쪽에서 왼쪽

 

 

 

 

 

 

 

 

산술 연산자

  • 이항 연산자인 산술 연산자
  • byte, short, char, int 자료형 사이의 연산은 int형으로 결과를 처리
  • long, float, double의 경우 큰 자료형의 결과로 처리

 

 

 

 

증감 연산자

  • 증감이 수행을 먼저 하면 선증감
  • 명령이 끝난 이후에 증감을 하면 후증감

 

 

 

 

 

 

 

 

 

비교 연산자

  • '='  : 값을 대입하는 대입연산자
  • '==' : 두 값이 같은지 다른지를 반환하는 비교연산자
  • 기본형이 아닌 참조형일 경우 '=='과 '!=' 연산자만 가능
    • 기본형
      • int, byte, boolean, float, short, double, long, char
      • 이 8개 기본형 제외 모두 참조형
  • 객체를 비교할 경우,
    인스턴스 변수 값을 비교하도록 equals() 메서드 오버라이딩과 hashCode() 오버라이딩을 수행해야 한다.

 

 

 

 

 

+) 객체 비교

package ch03;

import java.util.Objects;

class object{
    String name;
    int number;
    object(String name, int number){
        this.name=name;
        this.number=number;
    }
    @Override
    public boolean equals(Object obj) {
        if(!(obj instanceof object)){
            return false;
        }
        object ob= (object) obj;
        return this.name.equals(ob.name)&& this.number==ob.number;

    }
    @Override
    public int hashCode(){
        return Objects.hash(name, number);
    }

}

public class ConditionalOpratorEx1 {
    public static void main(String[] args){
        object o1 = new object("name1", 1234);
        object o2 = new object("name1", 1234);

        //객체를 비교하는 equals() 오버라이딩
        System.out.println(o1.equals(o2));

        int a = 5;
        int b = 10;
        // 값을 비교하는 비교연산자, 논리 연산자(&&)
        boolean result = ((a == 5) && (b == 10));

        System.out.println("a = 5 AND b = 10 :"+ result);
        result = ((a == 5) || (b == 5));
        System.out.println("a = 5 OR b =  5 : " + result);

        // 결과 boolean 값을 삼항연산자로 조건을 체크하여 성공/실패 문자열을 리턴한다
        String finalResult = result? "성공" : "실패";
        System.out.println("최종결과 : "+ finalResult);//o/p is “Pass”
    }
}

 

논리 연산자

  • short-circuit
    • 앞의 연산이 이미 false로 판명되면 뒤의 연산은 수행하지 않도록 해 속도가 빨라지고, 효율적으로 코드를 작성하게 한다.
    • 값 1 && 값 2 : 값1이 false면 값2 검사 하지 않음
    • 값 1 || 값 2 : 값1이 true면 값2 검사 하지 않음

 

+) short-circuit 사용하지 않는 경우

: &과 | 이용해 두가지 조건을 모두 확인한다.

// 첫번째 조건이 false 이므로 두번째 조건 확인 안함
System.out.println( a<b && a++<c );//false && true = false
System.out.println( a );// 두번째 조건이 확인되지 않았기 때문에 10
// 첫번째 조건, 두번째 조건 모두 확인함
System.out.println( a<b & a++<c );//false && true = false
System.out.println( a );// 두번째 조건이 확인되었기 때문에 11

// 첫번째 조건이 true이므로 두번째 조건 확인 안함
System.out.println(a>b || a<c); // true || true = true
// 첫번째 조건, 두번째 조건 모두 확인함
System.out.println(a>b | a<c); // true | true = true

 

삼항 연산자

  • 조건항 ? 항1 : 항2
    • 조건항이 ture이면 항1를 리턴
    • 조건항이 false이면 항2를 리턴

 

 

대입 연산자

  • 오른쪽 피연산자의 값이나 연산 결과를 왼쪽 변수에 대입하는 연산자
  • &=
  • |=
  • <<=
  • >>=
  • >>>=
  • *=
  • final 선언한 상수에는 대입할 수 없다.
    • final과 final static 변수의 차이
      • final
        : 객체마다 존재하는 인스턴스 변수가 상수
      • final static
        : 클래스에 하나 존재하는 클래스 변수가 상수

 

 

비트 연산자

  • 비트 단위로 논리연산을 수행할 때 사용하는 연산자
  • 비트 연산시 연산 최소단위인 4byte로 변환된다.
  • XOR : 달라야 1 같으면 0
  • AND, OR, XOR, NOT

 

 

 

 

 

 

 

 

 

 

 

  • 컴퓨터에서의 음수 처리
    • 2의 보수 : 1의 보수 했을 때(NOT 연산자로 반전시킨 비트)가 음수일 경우 2의 보수 처리해서 저장한다.
    • 1의 보수에 +1하면 2의 보수가 된다.

 

 

 

 

 

 

 

 

 

 

 

비트 시프트 연산자

  • <<
    :비트가 왼쪽으로 이동할 때마다 *2가 된다.
  • >>
    : 비트가 오른쪽으로 이동할 때마다 /2가 된다.
  • >>>
    : 부호 비트를 포함해 모든 비트를 오른쪽으로 이동
    비어 있는 왼쪽 비트는 0으로 채운다.

 

 

 

자바에서 0b를 붙이면 이진수로 인식한다.

package ch03;

/**
 * 비트 연산자
 */
public class BitOperatorEx7 {
    public static void main(String args[]) {

        byte num1 = 3;
        byte num2 = 5;
        // byte로 선언해도 비트 연산시 연산의 최소단위인 4 byte로 변경됨
        int result;

        result = num1 | num2;
        System.out.println("3 | 5 = " + result);

        // 0b + 0/1 bit로 지정하면 이진수 표기법이다
        // 0b0011 -> 3
        // 0b0101 -> 5
        result = 0b0011 | 0b0101;
        System.out.println("3 | 5 = " + result);

        result = num1 & num2;
        System.out.println("3 & 5 = " + result);

        result = num1 ^ num2;
        System.out.println("3 ^ 5 = " + result);

    }
}

 

package ch03;

/**
 * 비트 왼쪽 쉬프트(<<) 연산자
 */
public class OperatorLeftShiftEx1 {
    public static void main(String args[]) {

        // 왼쪽 쉬프트 연산자는 x * 2n과 같다
        // 10 << 3 => 10 * 2^3
        System.out.println(10 << 2); // 10 * 2^2 = 10*4  = 40
        System.out.println(10 << 3); // 10 * 2^3 = 10*8  = 80
        System.out.println(20 << 2); // 20 * 2^2 = 20*4  = 80
        System.out.println(15 << 4); // 15 * 2^4 = 15*16 =240

    }
}

 

package ch03;

/**
 * 비트 오른쪽 쉬프트(>>) 연산자
 */
public class OperatorRightShiftEx1 {
    public static void main(String args[]) {

        // 오른쪽 쉬프트 연산자는 x / 2n과 같다
        // 20 << 3 => 20 / 2^3
        System.out.println(10>>2); // 10/2^2 = 10/4=2
        System.out.println(20>>2); // 20/2^2 = 20/4=5
        System.out.println(20>>3); // 20/2^3 = 20/8=2
    }
}

  1. 객체를 비교할 경우:  인스턴스 변수를 비교하도록 equals() 오버라이딩하는데 반드시 hashCode()도 오버라이딩
  2. Short-circuit : &&와 || 논리 연산자의 경우 값1으로 인해 결정되면 뒤의 값을 확인하지 않는다.
  3. final과 final static 변수 :
    • final
      : 객체마다 존재하는 인스턴스 변수가 상수
    • final static
      : 클래스에 하나 존재하는 클래스 변수가 상수

AWS과 IDC 장단점

 

IDC 

  • 초기 구축 비용은 많이 들지만, 유지비용은 많지 않고, 트래픽증가해도 감당가능

AWS 비용과금 기준

  • 초기 구축 비용은 적지만,트래픽급증하면 유지비용은 감당 불가
  • TPS :초당 트랜잭션 수
  • Active user : 활성 사용자
  • Concurrent user : 동시 사용자

 

AWS EKS

  • 쿠버네티스 환경으로 인프라 구성 - 도커 컨테이너 단위로
  • 특정환경에 구애받지 않고 동일한 환경으로 배포하고 운영
  • EC2 비용 <스토리지 비용 역전될 수 있다.

 

동기 vs 비동기, 블로킹 vs 논블로킹

 

-NoSQL의 경우 논블로킹

반응형

'Server Programming > BackEnd Project' 카테고리의 다른 글

13일차 - TIL  (0) 2022.12.25
13일차 - 자바를 통해 요구사항 구현하기  (1) 2022.12.23
12일차 - TIL  (0) 2022.12.23
11일차 - TIL  (0) 2022.12.22
10일차 -TIL  (0) 2022.12.21