JAVA 8 새로운 기능

람다 표현식(Lambda Expression)

람다 표현식(lambda expression)이란 간단히 말해 메소드를 하나의 식으로 표현한 것입니다.

즉, 식별자 없이 실행할 수 있는 함수 표현식을 의미하며, 따라서 익명 함수(anonymous function)라고도 부릅니다.

메소드를 이렇게 람다 표현식으로 표현하면 클래스를 만들고 객체를 생성하지 않아도 메소드를 사용할 수 있습니다.

또한, 람다 표현식은 메소드의 매개변수로 전달될 수도 있고, 메소드의 결괏값으로 반환될 수도 있습니다.

이러한 람다 표현식은 기존의 불필요한 코드를 줄여주고, 작성된 코드의 가독성을 높이는 데 그 목적이 있습니다.

Java SE 8 버전부터는 람다 표현식을 사용하여 자바에서도 함수형 프로그래밍을 할 수 있게 되었습니다.

리터럴 타입 접미사(literal type suffix)

자바에서 3.14와 같은 실수형 리터럴을 그대로 사용하면, 해당 리터럴은 실수형 타입 중에서도 double형으로 인식할 것입니다.

하지만 실수형 리터럴 맨 뒤에 F나 f를 추가하면, 자바는 해당 실수형 리터럴을 float형으로 인식할 것입니다.

이처럼 리터럴 뒤에 추가되어 해당 리터럴의 타입을 명시해주는 접미사를 리터럴 타입 접미사(literal type suffix)라고 합니다.

자바에서 사용할 수 있는 리터럴 타입 접미사는 다음과 같습니다.

문자형 타입

자바에서 문자형 데이터란 작은 정수나 문자 하나를 표현할 수 있는 타입을 의미합니다.

자바의 기본 타입 중 문자를 나타내는 타입은 다음과 같습니다.

C,CPP는 아스키코드, 자바는 유니코드를 사용 유니코드는 영어, 숫자 이외에도 각 나라의 모든 언어를 표현할 수 있다.

String 이 기본 타입이 아니라 클래스였다!

부동 소수점(floating point) 방식

현재 대부분의 시스템에서는 부동 소수점 방식으로 실수를 표현하고 있습니다.

부동 소수점 방식의 오차
부동 소수점 방식을 사용하면 고정 소수점 방식보다 훨씬 더 많은 범위까지 표현할 수 있습니다.

하지만 부동 소수점 방식에 의한 실수의 표현은 항상 오차가 존재한다는 단점을 가지고 있습니다.

따라서 컴퓨터에서 실수를 표현하는 방법은 정확한 표현이 아닌 언제나 근사치를 표현할 뿐임을 항상 명심해야 합니다.

인스턴스 연산자

인스턴스이름 instanceof 클래스또는인터페이스이름

왼쪽 피연산자인 인스턴스가 오른쪽 피연산자인 클래스나 인터페이스로부터 생성되었으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

switch 문

switch 문은 if / else 문과 마찬가지로 주어진 조건 값의 결과에 따라 프로그램이 다른 명령을 수행하도록 하는 조건문입니다.

이러한 switch 문은 if / else 문보다 가독성이 더 좋으며, 컴파일러가 최적화를 쉽게 할 수 있어 속도 또한 빠른 편입니다.

하지만 switch 문의 조건 값으로는 int형으로 승격할 수 있는(integer promotion) 값만이 사용될 수 있습니다.
-> byte형, short형, char형, int형의 변수나 리터럴 그리고 enum 키워드를 사용한 열거체(enumeration type)와 String 클래스의 객체도 사용할 수 있습니다.

switch (조건 값) {

   case1:

       조건 값이 값1일 때 실행하고자 하는 명령문;

       break;

   case2:

       조건 값이 값2일 때 실행하고자 하는 명령문;

       break;

   ...

   default:

       조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 명령문;

       break;

}

default 절은 선택
각 case 절 및 default 절은 반드시 break 키워드를 포함하고 있어야 합니다.
만약 break 키워드가 없다면 해당 case문 뒤에 있는 모든 case 절이 실행된다.

이름을 가지는 반복문(break with label)

일반적인 break 문은 단 하나의 반복문만을 빠져나가게 해줍니다.

따라서 여러 반복문이 중첩된 상황에서 한 번에 모든 반복문을 빠져나가거나, 특정 반복문까지만 빠져나가고 싶을 때는 다른 방법을 사용해야 합니다.

이때 사용할 수 있는 방법이 바로 반복문에 이름(label)을 설정하는 것입니다.

가장 바깥쪽 반복문이나 빠져나가고 싶은 특정 반복문에 이름을 설정한 후, break 키워드 다음에 해당 이름을 명시하면 됩니다.

그러면 해당 break 키워드는 현재 반복문이 아닌 해당 이름의 반복문 바로 다음으로 프로그램의 실행을 옮겨줍니다.

단, 이때 이름(label)은 가리키고자 하는 반복문의 키워드 바로 앞에 위치해야 합니다.

이름과 반복문의 키워드 사이에 명령문이 존재하면, 자바 컴파일러는 오류를 발생시킬 것입니다.

재귀 호출(recursive call)

int recursiveSum(int n) {

    if (n == 1) {                 // n이 1이면, 그냥 1을 반환함.

        return 1;

    }

    return n + recursiveSum(n-1); // n이 1이 아니면, n을 1부터 (n-1)까지의 합과 더한 값을 반환함.

}

위의 예제에서 if 문이 존재하지 않으면, 이 프로그램은 실행 직후 스택 오버플로우(stack overflow)에 의해 종료될 것입니다.

따라서 if 문처럼 재귀 호출을 중단하기 위한 조건문을 반드시 포함해야 합니다.

이처럼 재귀 호출은 다양한 알고리즘을 표현한 의사 코드를 그대로 코드로 옮길 수 있게 해주므로, 직관적인 프로그래밍을 하는 데 많은 도움을 줍니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN