[F-Lab 모각코 챌린지 6일차] TIL

JeongheeKim·2023년 6월 6일

TIL

목록 보기
6/66

학습계획


  • 사전미팅질문 찾아보기
  • 자바의 신 5장 나머지 부분 읽고 정리하기
  • 자바의 신 5장 연습문제 풀기

Today I Learned


  • 등가 비교 연산자

    연산자연산자 기능
    ==같음
    !=같지 않음
    • 모든 비교연산자의 결과값은 boolean타입이다. 조건이 맞는경우 true, 맞지 않는 경우 false를 리턴한다.
    • 등가 비교연산자는 모든 타입에서 사용할 수 있다.
    • 기본 자료형은 같은 종류끼리 비교 가능하다.
      • 아래 코드 결과를 보면 기본 자료형 int, double 과 char와 정수와의 비교연산이 가능한것을 확인 할 수있다.

        public class OperationComparision {
            public static void main(String[] args) {
                OperationComparision operationComparision = new OperationComparision();
                operationComparision.comparision();
            }
        
            public void comparision() {
                char charValue = 'a';
                System.out.println(charValue == 97);//true
                int intValue = 1;
                double doubleValue = 1.0;
                System.out.println(intValue == doubleValue);//true
        				boolean boolT = true;
                boolean boolF = false;
                System.out.println(boolF == boolT);//false
            }
        }
  • 대소비교연산자

    연산자연산자 기능
    >왼쪽이 큼
    >=왼쪽 값이 같거나 큼
    <오른쪽이 큼
    <=오른쪽값이 같거나 큼
    • boolean이나 참조 자료형에서는 사용불가
    • boolean값들끼리 비교 시 Operator '<' cannot be applied to 'boolean', 'boolean’ 경고 메세지를 확인 할 수 있다.
    • 비교 연산자를 사용할때는 =< 이런식으로 순서가 변경되서 작성하면 컴파일 에러를 발생시킨다.
      boolean boolT = true;
      boolean boolF = false;
      System.out.println(boolF < boolT);
  • 논리 연산자

    • &&
      • 비교항이 모두 true일 경우에만 true로 처리
    • ||
      • 비교항 중 하나라도 true가 존재하면 true로 처리
  • 삼항 연산자

    • 변수 = (boolean조건식) ? true일때 리턴할 값 ? false일때 리턴할 값
  • 형변환(casting)

    • 자료형의 범위가 큰 타입 → 작은 타입으로 변환 시에는 (작은 타입)을 명시해야 한다. 명시 하지 않으면 컴파일 에러 발생

    • boolean타입은 형변환되지 않는다.

    • 아래 코드 예시에서 short → byte로 캐스팅하면서 bit제일 마지막 앞자리(부호처리) 값을 가지게 되었다. 그리하여 -128값이 나오게 되었다.

      public class OperatorCasting {
          public static void main(String[] args) {
              OperatorCasting operatorCasting = new OperatorCasting();
              operatorCasting.casting();
          }
      
          public void casting() {
              byte byteValue = 127;
              short shortValue = byteValue;
              shortValue++;
              System.out.println("shortValue = " + shortValue);//128
              
      				byteValue = (byte)shortValue;
              System.out.println("byteValue = " + byteValue);//-128
      				
      				shortValue = byteValue;
              System.out.println("shortValue = " + shortValue);//-128
          }
      }
    1. byte에서 short값으로 캐스팅 되어 short변수에 128이 담겨있다.

    2. byteValue = (byte)shortValue; short type 변수를 byte 타입으로 캐스팅한 결과 8bit만 남게되었다. bit자리의 가장 앞자리에 1이 존재하여 값이 -128이 되었다.

    3. shortValue = byteValue;

      범위가 작은 타입에서 범위가 큰 타입으로 변환시는 별도로 형을 명시하지 않아도 형변환이 이루어진다. bsil FD순서로 형 변환 시 아무런 문제가 없이 가능하다.

      라고 자바의 신에 나와있는데 byte → short로 캐스팅 시값은 동일하게 -128이 나오는데 bit에는 어떻게 표현되는지 잘 모르겠다.

      첫번째 표처럼이면 128이 나와야하는게 맞는거 같고, 아래 표라면 -32768이 나와야할거같은데..

  • 타입별 사용 가능한 연산자

    • double, float은 소수형 이기때문에 비트 연산이 불가능하다.
    • boolean타입의 경우 비트 연산자(|, &, ^)를 권장하지 않는다.
      • &&논리 연산의 경우 좌측의 항이 false이면 우측항을 계산하지 않으므로 (두항이 모두 true일 경우만 true리턴)연산이 한번 줄게 되는것이다. 비트연산의 경우 양쪽 항의 연산을 모두 하기때문에
    • 참조자료형 + 연산 시 toString() 메소드를 통해 문자열을 더하는 연산을 한다.

연습문제

정리해봅시다.

  • 값을 할당할 때 사용하는 연산자의 기호는 무엇인가요?
    • = 연산자를 사용하여 연산 결과를 좌항의 변수에 할당한다.
    • ex ) int num = 3 + 4;
  • 기본적인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지를 계산할 때 사용하는 연산자의 기호는 순서대로 각각 무엇인가요?
    • +, -, *, /, % 연산자를 이용한다.
  • += 는 무엇을 할 때 사용하는 연산자 인가요?
    • 좌측항의 변수값에 우측의 항을 더하여 할당한다.
  • 연산의 순서를 모르거나 확실히 하고 싶을 때에는 어떤 기호를 사용해야 하나요?
    • () 괄호를 사용하여 연산의 단위를 묶는다.
  • ==와 !=의 차이는 무엇인가요?
    • 좌항광 우항의 값이 같은지 비교한다.
  • <와 <=의 차이는 무엇인가요?
    • 좌항의 값보다 우항의 값이 큰지 비교하거나 ≤은 좌항의 값보다 우항의 값이 크거나 같은지 비교한다.
  • ! 연산자는 어떤 타입에 사용 할 수 있나요?
    • boolean타입의 값을 반대로 부정할때 사용한다. true → false, false → true가 된다.
  • ? : 로 표시하는 삼항 연산자의 ?와 : 뒤에 명시해 주는 값은 무엇을 의미 하나요?
    • ?뒤에 명시 하는값은 앞의 조건이 참일 경우, :뒤에는 조건이 틀릴경우 리턴할 값을 명시한다.
  • 자바는 형변환을 한다고 했는데, short의 값을 long에 할당할 때에는 어떤 것을 해 주어야 하나요?
    • short → long으로 할당 시 long타입이 short보다 큰 범위의 타입이므로 아무것도 하지 않아도 된다.
  • 반대로 long값을 short에 할당할 때에는 어떤 것을 해 주어야 하나요?
    • 자료형의 범위가 작은 값에 할당할때는 작은 범위의 타입을 붙여줘야한다.
      • 예) byteValue = (byte) shortValue;
  • 위의 두 문제에서 어떤 경우가 기존 값이 사라지고, 엉뚱한 값으로 바뀔 수 있나요?
    • 넵 캐스팅 시 2진수로 변환되어 2진수 자릿수가 변경될 수 있으므로 생각하지 못한 값이 나올 수 있다.

직접해봅시다

public class SalaryManager {
    static double WORK_TAX = 12.5;
    static double PENSION = 8.1;
    static double INSURANCE = 13.5;
    public static void main(String[] args) {
        int yearlySalary = 20000000;
        System.out.println(getMonthlySalary(yearlySalary));
    }

    public static double getMonthlySalary(int yearlySalary) {
        double month = 12.0;
        double monthlySalary = yearlySalary / month;
        double totalTax = calculateWorkTax(monthlySalary);
        totalTax += calculateNationalPension(monthlySalary);
        totalTax += calculateHealthInsurance(monthlySalary);
        System.out.println("totalTax = " + totalTax);
        return monthlySalary - totalTax;
    }

    /**
     * 근로소득세 계산
     * @param monthSalary
     * @return
     */
    public static double calculateWorkTax(double monthSalary) {
        return monthSalary * (WORK_TAX/100);
    }

    /**
     * 국민연금 계산
     * @param monthSalary
     * @return
     */
    public static double calculateNationalPension(double monthSalary) {
        return monthSalary * (PENSION/100);
    }

    /**
     * 건보료 계산
     * @param monthSalary
     * @return
     */
    public static double calculateHealthInsurance(double monthSalary) {
        return monthSalary * (INSURANCE/100);
    }

}

0개의 댓글