목차
1. 선택사항
2. 람다 표현식 사용
3. 람다 표현식을 위한 설계
4.Stream
드디어
Java java지도 시간 Java 8 개발을 위한 주요 팁

Java 8 개발을 위한 주요 팁

Feb 23, 2017 am 10:39 AM
java8

저는 몇 년 동안 새로운 애플리케이션과 기존 애플리케이션 마이그레이션 모두를 위해 Java 8로 코딩을 해왔는데, 이제 제가 매우 유용하다고 생각하는 몇 가지 "모범 사례"에 대해 글을 쓸 때가 된 것 같았습니다. 저는 개인적으로 "모범 사례"라는 용어를 좋아하지 않습니다. 왜냐하면 이 용어는 "모든 경우에 적용되는 일률적인" 솔루션을 의미하기 때문입니다. 이는 코딩이 작동하는 방식이 아닙니다. 우리는 어떤 솔루션이 작동하는지 스스로 찾아야 합니다. 하지만 Java 8 코드에서 우리에게 도움이 될 수 있는 몇 가지 옵션을 찾았습니다. 살펴보겠습니다.

1. 선택사항

Optional은 심각하게 과소평가된 기능이며 우리를 괴롭히는 많은 NullPointerExceptions을 제거할 수 있는 잠재력을 가지고 있습니다. 이는 코드 경계(사용 중인 API 또는 노출되는 API) 내에서 특히 유용합니다. 이를 통해 사용자와 호출 코드가 예상되는 내용을 추론할 수 있기 때문입니다.

그러나 생각과 디자인 없이 Optional을 적용하면 많은 클래스에 영향을 미치고 가독성이 떨어질 수 있습니다. Optional을 효과적으로 사용하는 방법에 대한 몇 가지 팁은 다음과 같습니다.

Optional은 반환 유형에만 사용해야 합니다.

... 매개변수나 필드가 아닙니다. 다행히 IntelliJ IDEA를 사용하면 이러한 권장 사항을 따르고 있는지 확인할 수 있습니다.

Java 8 개발을 위한 주요 팁

선택적 값은 만나는 곳에서 처리해야 합니다. IntelliJ IDEA의 제안은 코드에서 Optional 누출을 방지하므로 Optional을 찾은 위치에서 처리하고 신속하게 조치하는 것을 잊지 마세요.

Java 8 개발을 위한 주요 팁

단순히 get()을 호출하면 안 됩니다

Optional의 기능은 이 값이 비어 있을 수 있음을 표현하고 이를 처리하도록 하는 것입니다. 상황 . 따라서 작업을 수행하기 전에 값이 있는지 확인하십시오. isPresent()를 먼저 확인하지 않고 get()을 호출하면 어느 시점에서 null 포인터가 발생할 수 있습니다. 다행히도 IntelliJ IDEA에는 이를 상기시켜주는 검사 기능도 있습니다.

Java 8 개발을 위한 주요 팁

더 우아한 방법이 있을 수도 있습니다

isPresent()와 get()을 결합하면 정말 좋을 것 같아요...

Java 8 개발을 위한 주요 팁

…하지만 더 우아한 솔루션이 있습니다. 값이 null인 경우 orElse를 사용하여 대안을 제공할 수 있습니다.

Java 8 개발을 위한 주요 팁

...또는 orElseGet을 사용하여 값이 null인 경우 호출할 메서드를 나타낼 수 있습니다. 위의 예시와 같은 것 같지만, 공급자 메소드는 필요할 때만 호출되기 때문에 비용이 많이 드는 메소드라면 람다를 사용하는 것이 더 좋은 성능을 낼 수 있을 것이다.

Java 8 개발을 위한 주요 팁

2. 람다 표현식 사용

람다 표현식은 Java 8의 주요 기능 중 하나입니다. 아직 Java 8을 사용해 본 적이 없더라도 지금쯤이면 Java 8에 대한 기본적인 이해가 끝났을 것입니다. 이는 Java로 프로그래밍하는 새로운 방식이며 "모범 사례"가 무엇인지 아직 명확하지 않습니다. 제가 따르고 싶은 몇 가지 지침은 다음과 같습니다.

짧게 유지하세요

Functional 프로그래머 는 더 긴 람다 표현식을 사용하면 더 행복하겠지만 Java에 수년 동안 푹 빠져 있던 사람들은 단 몇 줄의 코드로 람다 식을 유지하는 것이 더 쉽습니다. 한 줄의 코드로 제한하고 더 긴 표현식을 메서드로 쉽게 리팩터링할 수도 있습니다.

Java 8 개발을 위한 주요 팁

메서드 참조가 될 수도 있습니다. 메소드 참조는 처음에는 다소 낯설게 느껴질 수 있지만 메소드 참조는 특정 상황에서 가독성에 도움이 되기 때문에 실제로는 가치가 있습니다. 이에 대해서는 나중에 설명하겠습니다.

Java 8 개발을 위한 주요 팁

명시적

람다 표현식에는 유형 정보가 누락되어 있으므로 매개변수에 대한 유형 정보를 포함하는 것이 유용할 수 있습니다.

Java 8 개발을 위한 주요 팁

보시다시피 이번에는 꽤 어설프네요. 그래서 저는 매개변수에 유용한 이름을 지정하는 것을 선호합니다. 물론, 이 작업을 수행했는지 여부에 관계없이 IntelliJ IDEA를 사용하면 매개변수의 유형 정보를 볼 수 있습니다.

Java 8 개발을 위한 주요 팁

람다로 표현되는 기능적 인터페이스까지:

Java 8 개발을 위한 주요 팁

3. 람다 표현식을 위한 설계

내 생각에 람다 표현식은 제네릭과 다소 유사하다고 생각합니다. 제네릭과 함께 자주 사용하지만(예: List<>에 유형 정보 추가), 더 나은 방법은 제네릭을 사용하여 메서드를 설계하는 것입니다. 유형의 클래스( 예: Person<T>). 마찬가지로 Streams API와 같은 것을 사용할 때 람다 식을 전달하지만 더 나은 방법은 람다 매개 변수가 필요한 메서드를 만드는 것입니다.

하지만 이런 상황에 처했다면 여기 몇 가지 멋진 팁이 있습니다.

IntelliJ IDEA는 기능적 매개변수를 도입하는 데 도움이 됩니다.

이를 통해 누군가 객체 대신 람다를 전달하는 매개변수를 생성할 수 있습니다. 이 기능의 장점은 기존 기능 인터페이스가 사양과 일치함을 보여주는 것입니다.

Java 8 개발을 위한 주요 팁

이로 인해...

기존 기능적 인터페이스 사용

개발자가 점점 익숙해질수록 우리는 Java 8 코드를 사용하고 있으며 Supplier 및 Consumer와 같은 인터페이스를 사용할 때 어떤 일이 발생하는지, 그리고 로컬 ErrorMessageCreator(예를 들어)를 생성하는 것이 어떻게 혼란스럽고 낭비가 될 수 있는지 알고 있습니다. 이 패키지를 살펴보고 이미 사용 가능한 항목을 확인하세요.

기능적 인터페이스에 @FunctionalInterface 추가

정말로 자신만의 기능적 인터페이스를 만들어야 한다면 이 주석으로 표시하세요. 별 효과가 없어 보일 수도 있지만 IntelliJ IDEA는 인터페이스가 기능적 인터페이스에 사용되는 예외와 일치할 수 없는 경우 이를 알려줍니다. 재정의할 메서드를 지정하지 않으면 다음 플래그가 지정됩니다.

Java 8 개발을 위한 주요 팁

너무 많은 메서드를 지정하면 다음 플래그가 지정됩니다.

Java 8 개발을 위한 주요 팁

인터페이스 대신 클래스에 적용하면 다음과 같은 경고가 표시됩니다.

Java 8 개발을 위한 주요 팁

람다 표현식을 사용할 수 있습니다. 단일 추상 메서드를 사용하는 인터페이스이지만 동일한 기준을 충족하는 추상 클래스와 함께 사용할 수는 없습니다. 비논리적인 것 같지만 그게 전부입니다.

4.Stream

Stream API는 Java 8의 또 다른 큰 기능이며, 이것이 우리가 코딩하는 방식에 얼마나 많은 변화를 가져올지 실제로는 알 수 없다고 생각합니다. 제가 찾은 몇 가지 유용한 정보는 다음과 같습니다.

큐 도트 연산자

저는 개인적으로 스트림 작업을 큐에 넣는 것을 선호합니다. 물론 꼭 이렇게 할 필요는 없습니다. 이렇게 하면 도움이 될 것 같습니다.

  • 어떤 작업을 하는지 한눈에 확인하세요

  • 더 쉬워진 디버그(IntelliJ IDEA는 한 줄에 있는 여러 람다 표현식에 중단점을 설정할 수 있는 기능을 제공하지만 다른 줄로 분할하는 것이 더 간단합니다.)

  • 테스트 중

  • 디버깅이나 테스트를 위해 peek()을 쉽게 삽입

Java 8 개발을 위한 주요 팁

게다가 더 깔끔한 것 같아요. 이 패턴을 따르면 코드 줄을 줄이는 측면에서 많은 이점을 얻을 수 없습니다.

점 연산자를 정렬하려면 서식 설정을 조정해야 할 수도 있습니다.

Java 8 개발을 위한 주요 팁

메서드 참조 사용

예, 이 이상한 구문에 익숙해지려면 시간이 좀 걸립니다. 그러나 올바르게 사용하면 가독성이 높아집니다. 참조:

Java 8 개발을 위한 주요 팁

(상대적으로) 새로운 Objects 클래스의 도우미 메서드와 비교:

Java 8 개발을 위한 주요 팁

후자 코드는 어떤 값이 저장되는지에 대해 더 명확합니다. IntelliJ IDEA는 일반적으로 람다가 메서드 참조로 축소될 수 있는 시기를 알려줍니다.

Java 8 개발을 위한 주요 팁

컬렉션을 반복할 때 Streams API

… 또는 가능한 경우 forEach와 같은 새로운 컬렉션 방법을 사용하세요. IntelliJ IDEA가 제안하는 사항은 다음과 같습니다.

Java 8 개발을 위한 주요 팁

일반적으로 Streams API를 사용하는 것이 루프와 if 문을 조합하는 것보다 더 명확합니다. 예:

Java 8 개발을 위한 주요 팁

IntelliJ IDEA에서는 다음과 같이 리팩토링할 수 있다고 제안합니다.

Java 8 개발을 위한 주요 팁

제가 수행한 성능 테스트에서는 이 리팩토링을 보여줍니다. 놀라운 사실입니다. 성능이 동일하게 유지될 것인지, 향상될 것인지, 악화될 것인지 항상 예측할 수 있는 것은 아닙니다. 항상 그렇듯이 성능이 응용 프로그램의 핵심이라면 한 스타일을 다른 스타일에 적용하기 전에 성능을 측정하십시오.

배열을 반복할 때 루프 사용

그러나 Java 8을 사용한다고 해서 반드시 모든 곳에서 스트림과 새로운 수집 방법을 사용해야 하는 것은 아닙니다. IntelliJ IDEA는 스트림으로의 변환을 제안하지만 이것이 "예"라고 대답해야 한다는 의미는 아닙니다. 확인이 억제되거나 꺼질 수 있다는 점을 기억하세요.

특히, 기본 유형의 작은 배열에 대한 반복은 더 나은 성능과 아마도 (적어도 스트림을 처음 접하는 Java 개발자의 경우) 더 읽기 쉽게 사용되는 것이 거의 확실합니다.

Java 8 개발을 위한 주요 팁

다른 기술과 마찬가지로 규칙은 고정되어 있지 않지만 Streams API를 최대한 사용할지, 아니면 일부 작업에 루프를 계속 사용할지 결정해야 합니다. . 즉, 일관성을 유지하십시오.

드디어

위 내용은 Java 8 개발 스킬 상위 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java 8에서 1년 전 또는 1년 후의 날짜를 어떻게 계산합니까? Java 8에서 1년 전 또는 1년 후의 날짜를 어떻게 계산합니까? Apr 26, 2023 am 09:22 AM

Java8은 1년 전 날짜를 계산하기 위해 minus() 메소드를 사용하여 1년 전 또는 1년 후 날짜를 계산합니다. packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDatepreviousYear=today.minus(1,ChronoUni

Java 8을 사용하여 일주일 후 날짜를 계산하는 방법은 무엇입니까? Java 8을 사용하여 일주일 후 날짜를 계산하는 방법은 무엇입니까? Apr 21, 2023 pm 11:01 PM

Java8에서 일주일 후 날짜를 계산하는 방법 이 예에서는 일주일 후 날짜를 계산합니다. LocalDate 날짜에는 시간 정보가 포함되어 있지 않습니다. 해당 plus() 메서드는 일, 주 및 월을 추가하는 데 사용됩니다. ChronoUnit 클래스는 이러한 시간 단위를 선언합니다. LocalDate도 불변형이므로 반환 후 값을 할당하려면 변수를 사용해야 합니다. packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo08{publicstaticvoidmain(String[

Java8에서 Clock 클래스를 사용하는 방법 Java8에서 Clock 클래스를 사용하는 방법 Apr 25, 2023 pm 03:37 PM

Java8의 Clock 클래스 Java8은 현재 타임스탬프 또는 현재 시간대의 날짜 및 시간 정보를 얻기 위해 Clock 클래스를 추가합니다. 이전에는 System.currentTimeInMillis() 및 TimeZone.getDefault()를 사용했지만 Clock으로 대체할 수 있습니다. packagecom.shxt.demo02;importjava.time.Clock;publicclassDemo10{publicstaticvoidmain(String[]args){//현재 시간 기준을 반환합니다.

Java8의 날짜 비교 방법은 무엇입니까? Java8의 날짜 비교 방법은 무엇입니까? Apr 29, 2023 pm 04:46 PM

Java8 날짜 비교 방법 Java8에서는 새로운 isBefore(), isAfter(), isEqual() 및 CompareTo()를 사용하여 LocalDate, LocalTime 및 LocalDateTime을 비교할 수 있습니다. 두 개의 java.time.LocalDate@TestvoidtestDateCompare4() throwsParseException{DateTimeFormattersdf=DateTimeFormatter.ofPattern("yyyy-MM-dd&quot)을 비교하는 다음 예

Java8에서 시간대를 처리하는 방법 Java8에서 시간대를 처리하는 방법 Apr 27, 2023 pm 09:22 PM

Java 8에서 시간대 처리 Java 8은 날짜와 시간을 분리할 뿐만 아니라 시간대도 분리합니다. 이제 특정 시간대를 처리하는 ZoneId 및 특정 시간대의 시간을 나타내는 ZoneDateTime과 같은 일련의 별도 클래스가 있습니다. 이는 Java8 이전의 GregorianCalendar 클래스에 의해 수행되었습니다. 다음 예에서는 이 시간대의 시간을 다른 시간대의 시간으로 변환하는 방법을 보여줍니다. packagecom.shxt.demo02;importjava.time.LocalDateTime;importjava.time.ZoneId;importjava.time.ZonedDateT

Java8에서 현재 타임스탬프를 얻는 방법 Java8에서 현재 타임스탬프를 얻는 방법 May 01, 2023 am 11:46 AM

Java8에서 현재 타임스탬프를 가져옵니다. Instant 클래스에는 아래와 같이 현재 타임스탬프를 반환하는 정적 팩터리 메서드 now()가 있습니다. packagecom.shxt.demo02;importjava.time.Instant;publicclassDemo16{publicstaticvoidmain(String[]args) {Instanttimestamp=Instant.now();System.out.println("Thisinstant의 값은 무엇입니까"+timestamp.t

Java8에서 오늘 날짜를 얻는 방법 Java8에서 오늘 날짜를 얻는 방법 May 01, 2023 pm 06:49 PM

Java8에서 오늘 날짜 가져오기 Java8의 LocalDate는 오늘 날짜를 나타내는 데 사용됩니다. java.util.Date와 달리 날짜만 있고 시간은 포함되지 않습니다. 날짜만 표시해야 하는 경우 이 클래스를 사용하세요. packagecom.shxt.demo02;importjava.time.LocalDate;publicclassDemo01{publicstaticvoidmain(String[]args){LocalDatetoday=LocalDate.now();System.out.println("오늘 날짜:&q

사전 정의된 형식 지정 도구를 사용하여 Java8에서 날짜를 구문 분석하거나 형식 지정하는 방법 사전 정의된 형식 지정 도구를 사용하여 Java8에서 날짜를 구문 분석하거나 형식 지정하는 방법 Apr 28, 2023 pm 07:40 PM

사전 정의된 형식화 도구를 사용하여 Java 8에서 날짜를 구문 분석하거나 형식화하는 방법 packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.format.DateTimeFormatter;publicclassDemo17{publicstaticvoidmain(String[]args){StringdayAfterTommorrow="20180205 "; LocalDateformatted=LocalDate.parse

See all articles