[자바기본기] 02

sameul__choi·2022년 5월 4일
0

[자바기본기]

목록 보기
3/3
post-thumbnail

자바 기본기 02

산술 연산자

  • OperatorDescription
    +덧셈 연산(String Concatenation에도 사용)
    -빼기 연산
    *곱하기 연산
    /나누기 연산
    %나머지 연산
  • 할당과 연산을 합칠 수도 있다. x += 1; , x += x + 1;

  • 단항 연산자

    • operatorDescription
      +양수를 나타낸다
      -음수를 나타낸다
      ++증가 연산자 (1을 더함)
      --증감 연산자 (1을 뺌)
      !논리적으로 반대로 변환한다.

      ++resres++의 차이란 ?

      단순히 증감을 위함이라면 상관없지만, prefix는 구문이 실행되기 전에 값이 더해지고 postfix는 구문이 실행되고 더해진다.

  • 출처 : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html

비트 연산자

  • 자바 프로그래밍 언어는 비트단위의 연산을 제공한다.

  • ~는 비트 패턴을 반전시킨다. 모든 정수 유형에 적용가능하며 "0"을 "1"로 만들고 모든 "1"을 "0"으로 만든다.

    • (ex) "00000000" -> "11111111"
  • <<는 비트 패턴을 왼쪽으로 이동, >>는 패턴을 오른쪽으로 이동한다.

    • << 빈곳엔 0을 추가
    • >> 빈곳엔 0을 추가하고 오른쪽 부분은 삭제
  • & AND 연산을 수행

  • ^ NOR 연산을 수행

  • | OR 연산을 수행

  • 출처 : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

관계 연산자

논리 연산자

instanceof

public final class Instanceof

    extends Operator
    implements BinaryOperator
  • Instanceof operator를 실행한다.

  • 파라미터로 들어온 Object가 class type이 같은 인스턴스인지에 대한 Boolean을 반환한다.

  • 객체가 주어진 유형인지 테스트하는데 사용되는 이진 연산, 유형 비교 연산자라고도 한다.

  • 알 수 없는 개체를 캐스팅 하기 전에 항상 instanceof 검사를 사용해야한다. 이렇게하면 ClassCastExeption을 방지하는데 도움이 된다.

  • (object) instanceof (type)

  • instanceof 연산자는 is-a 관계에 따라 작동한다.

  • is-a 관계의 개념은 상속 또는 인터페이스 구현을 기반으로한다.

  • 주어진 객체와 같은 유형의 인스턴스 -> true

  • 주어진 객체가 하위 클래스 인스턴스인 경우 -> true

  • 인터페이스가 들어왔는데 객체가 인스턴스를 구현하고 있으면 -> true

  • 서로 관계가 없다면 사용할 수 없다.

  • 출처 : https://www.baeldung.com/java-instanceof

  • 출처 : https://docs.oracle.com/cd/E13226_01/workshop/docs81/doc/en/portal/java-class/com/bea/p13n/expression/operator/Instanceof.html?skipReload=true

assignment(=) operator

화살표(->) 연산자

  • 람다 표현식은 파라미터가 들어가고 값이 리턴되는 짧은 코드 블록이다.
  • 람다 표현식은 메서드와 비슷하지만 이름이 필요없고 method 바디 내에서 바로 실행할 수 있다.
  • syntax : parameter -> expression
  • 더 많은 파라미터를 사용하기 위해서는 괄호처리 (param1, param2) -> expression
  • expression은 제한적인데, 즉각적으로 값을 리턴해야하고, 변수를 포함하면 안되고, 할당이나 if, for를 포함할 수 없다.
  • 더 복잡한 작업을 위해서는 {} 사용할 수 있으며, 코드 블록에 return 문이 있어야 값을 반환할 수 있다.
public class Main {
  public static void main(String [] args){
    List<String> mentor = new ArrayList<Integer>();
    mentor.add("Lee");
    mentor.add("Bae");
    mentor.add("Jung");
    mentors.foreach( (str) -> {System.out.println(str);});
  }
}

// 변수 유형이 메서드가 하나만 있는 인터페이스인 경우엔 람다 표현식을 변수에 저장할 수 있다.
// Consumer<String> method = (str) -> {System.out.println(str);}

3항 연산자

  • result = condition ? value1 : value2

  • 컨디션이 참이면 value1을 result에 저장하고 거짓이면 value2를 result에 저장함

  • if-then-else 구문 대신에 삼항연산자를 쓰면 가독성이 더해진다고 함.(개인적으로는 가독성 해친다고 생각함)

  • 구문이 좀더 컴팩트해지고 할당같은 부작용을 피할 수 있다.

  • 출처 : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

연산자 우선 순위

  • 연산자의 우선순위는 아래의 표를 따른다.
  • 다소 복잡하긴 한데 ANSI-C 연산자 우선 순위 규칙과의 정확한 호환성을 제공하는데 필요하다
  • 표의 위부터 가장 높은 우선 순위이고 아래로 갈수록 낮은 우선 순위 이다.
  • ANSI-C? C 프로그래밍 언어의 이후 표준들을 가르킨다. 컴파일러간의 이식에 도움을 준다.
OperatorsAssociativity
() [] -> .left to right
! ~ ++ -- + - * & (type) sizeof stringof offsetof xlateright to left
* / %left to right
+ -left to right
<< >>left to right
< <= > >=left to right
== !=left to right
&left to right
^left to right
``
&&left to right
^^left to right
`
?:right to left
`= += -= *= /= %= &= ^== <<= >>=`
,left to right

(optional) Java 13. switch 연산자

  • if-then이나 if-then-else 구문과는 다르게 switch 구문은 여러개의 실행 구문을 가질 수 있다.

  • byte, short, char, int 원시형 데이터 타입으로 작동되며 enum도 가능하다.

  • String 클래스, 그리고 몇가지 wrapper 클래스 Character, Byte, Short, Integer도 가능하다.

  • public static void main(String [] args){
    	Scanner scanner = new Scanner(System.in);
      int n = sc.nextInt();
      String res = "";
      swith(n){
        case 1: res = "one";
        				break;
        case 2: res = "two";
        				break;
        case 3: res = "three";
        				break;
        case 4: res = "four";
        				break;
        case 5: res = "five";
        				break;
        case 6: res = "six";
        				break;
        case 7: res = "seven";
        				break;
        case 8: res = "eight";
        				break;
        case 9: res = "nine";
        				break;
        default: res = "error";
      }
      System.out.println(res);
    }
  • 한 개 이상의 case와 default lable을 가질 수 있고, if-then-else 구문으로도 나타낼 수 있다.

  • 가독성을 기반으로 switch 구문과 if-then-else 구문 중 선택할 수 있다.

  • if문은 값의 범위 또는 조건에 의해 테스트할 수 있고, 반면에 switch는 single Integer나, Enum, String 에 따라 조건을 주고 싶을 때 사용하면 된다.

  • break; 문으로 switch 구문을 닫을 수 있고, 제어 흐름이 계속된다. 때문에 break문은 필요하며 만약 없다면 swtich block이 모든 statements를 순차적으로 실행하게 된다.

  • 출처 : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

0개의 댓글