JAVA - 3 : 연산자

Seok-Hyun Lee·2021년 6월 8일
0

JAVA

목록 보기
3/21
post-thumbnail

3 연산자

3.1 산술 연산자

3.2 비트 연산자

3.3 관계 연산자

연산의 결과로 boolean 자료형을 반환한다

3.4 논리 연산자

3.5 instanceof

instsanceof 연산자는 참조 변수가 참조하고 있는 인스턴스의 타입을 알아보기 위해 사용되고 주로 조건문에서 사용된다. 형변환이 가능하면 true 불가하면 false를 반환한다

객체 instanceof 클래스

3.6 assignment(=) operator

변수에 값을 할당할 때 사용되는 연산자이다.

3.7 화살표(->) 연산자

기본적으로 화살표(->) 연산자는 Java 8 이후부터 람다식을 도입하는데 사용되고 왼쪽에 매개변수를 오른쪽에는 구현 정보가 들어간다. 메서드 작성을 쉽게 만들어 주고 기능적 인터페이스를 구현하는 데 간접적으로 사용된다.

(parameter) -> { statement; }

3.7.1 람다식

람다식은 함수적 프로그래밍을 지원하기 위해 Java 8 에 도입되었다. 람다의 근간은 수학과 기초 컴퓨터과학 분야에서의 보다 단순하게 표현하기 위한 람다 대수이다. 그리고 프로그래밍 분야에서 람다 함수는 이름을 가질 필요가 없는 익명 함수(Anonymous functions)을 지칭한다. 그리고 이러한 익명 함수들은 공통적으로 일급 객체(First Class Citizen)이라는 특징을 가지고 있다. 그리고 자바에서 람다식은 익명 함수가 아니라 익명 객체이다.

3.7.2 함수적 프로그래밍

y = f(x) 형태의 함수로 구성된 프로그래밍 기법을 의미한다.

  • 데이터를 매개값으로 전달하고 결과를 받는 코드들로 구성
  • 객체 지향 프로그래밍 보다 효율적인 경우
    • 대용향 데이터 처리
      • 데이터 포장 객체를 생성하는 것보다 바로 처리하는 것이 유리
        • 멀티 코어 CPU에서 병렬 처리 후 취합할 때 함수가 유리
    • 이벤트 지향 프로그래밍(핸들러 함수 활용)
      • 반복적인 이벤트 처리는 핸들러 객체보다 함수가 적합

3.7.3 일급 객체(First Class citizen)

일급 객체란 아래의 3가지 조건을 충족하면 일급 객체라고 할 수 있다.

  1. 변수나 데이터에 할당 할 수 있다.
  2. 매개변수로 전달할 수 있어야 한다.
  3. 반환값으로 사용될 수 있어야 한다.

예를 들어, Java의 일급 객체에서 참조 타입의 객체가 대표적이다.이들은 변수나 데이터에 할당이 가능하고, 매개변수로 전달 그리고 반환값으로 사용 가능하다.

자바의 객체들과 달리 함수 자체는 일급 객체로 활용하지 못했다. 하지만, 람다식을 활용하면 익명함수로써 일급 객체의 특징을 가질 수 있게 되었다.

3.7.4 람다식 장단점

장점

  • 불필요한 반복문 삭제 가능 및 복잡한 식을 단순화한 코드의 간결성
  • 컬렉션 요소(대용량 데이터)를 필터링 또는 매핑해서 쉽게 집계

단점

  • 람다를 사용한 함수는 재사용이 불가능
  • 불필요한 람다 사용은 가독성 저하 요인**

3.7.5 람다식 예제

자바는 람다식을 함수형 인터페이스의 익명 구현 객체로 취급한다. 이때 함수적 인터페이스란 단 하나의 추상 메소드만 선언된 인터페이스이다.

람다식 문법

// 기존 문법 
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Welcome");
    }
}).start();

// 람다 활용
new Thead( () -> {
    System.out.println("Welcome");
}).start();

Runnable은 메소드를 하나만 가진 함수적 인터페이스이기에 람다식으로 표현이 가능하다. 이떄 ( ) 는 run 의 ( ) 을 의미한다. 즉, 함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있다.

3.8 삼항 연산자

삼항 연산자의 기본형은 아래와 같다

int a = (5 < 4 ) ? 10 : 20;

위에서 연산자를 기준으로 아래와 같은 형태를 가진다.

조건문 ? 참인 경우 : 거짓인 경우;

즉, a의 경우 조건문이 거짓이기 때문에 20 으로 초기화된다. 이러한 삼항 연산자는 간단한 조건문의 효율적인 작성을 위해 사용된다.

3.9 연산자 우선 순위


기본적으로 괄호의 우선순위가 가장 높고, 단항 > 이항 > 삼항 그리고 산술 > 비교 > 논리 > 대입의 순서로 우선순위가 높다.

3.10 Java 13 switch 연산자

여기서 말하는 switch 연산자는 기존의 switch문이 변경된 것이 아니라 switch 연산자가 추가된 것이다.

3.10.1 Switch 문(statement)

다수의 case, break 가 존재하며 return 값이 존재할 수 없다. 그리고 break가 없으면 다음 분기로 넘어가게 된다.

3.10.2 Switch 연산자(operator)

break를 사용하지 않아도 되는 표현식으로 변경되었기 때문에 결과값을 반환 받는 형식도 가능하다. 이때 반환값의 타입을 Object로 설정하게 되면 표현식마다 다른 타입을 반환할 수도 있다. 그리고 case에 -> 연산자도 사용 가능하다.

[Switch 표현식]

public void printDay(Day today) {
    switch (today) {
        case MON, TUE, WED, THUR, FRI -> System.out.println(today.name() + " is Weekday");
        case SAT, SUN -> System.out.println(today.name() + " is Weekend");
    }
}

[반환값 받기]

public String printDay(Day today) {
    String result = switch (today) {
        case MON, TUE, WED, THUR, FRI -> today.name() + " is Weekday";
        case SAT, SUN -> today.name() + " is Weekend";
    };
    return result;
}

[반환값과 블록 구문]

public String printDay(Day today) {
    String result = switch (today) {
        case MON, TUE, WED, THUR, FRI -> today.name() + " is Weekday";
        case SAT, SUN -> {
            System.out.print("Holiday! ");
            yield today.name() + " is Weekend";
        }
    };
    return result;
}

Java 13 에서부터 yield 키워드를 사용해서 반환할 수 있다. 주의할 점은 return 키워드르 사용하면 컴파일 에러가 발생한다.

profile
Arch-ITech

0개의 댓글