JavaRush /Java Blog /Random-KO /커피 브레이크 #109. 현재 Java 개발에서 가장 수요가 많은 기술입니다. 코드 혼란을 제거하기 위...

커피 브레이크 #109. 현재 Java 개발에서 가장 수요가 많은 기술입니다. 코드 혼란을 제거하기 위한 7가지 Java 선택적 팁

Random-KO 그룹에 게시되었습니다

현재 Java 개발에서 가장 수요가 많은 기술

출처: 중간 규모 Java는 거의 25년이 지났음에도 불구하고 여전히 가장 인기 있고 수요가 많은 프로그래밍 언어 중 하나입니다. 따라서 Java의 인기는 계속해서 높아질 것이며 Java 개발자는 앞으로 고용주로부터 훨씬 더 많은 수요를 보게 될 것이라고 가정하는 것이 합리적입니다. 커피 브레이크 #109.  현재 Java 개발에서 가장 수요가 많은 기술입니다.  복잡한 코드를 제거하기 위한 7가지 Java 선택적 팁 - 1고품질의 제품을 만들려면 개발자는 최신 Java 도구를 따라잡고 기술과 지식을 향상해야 합니다. 아래에서는 Java 개발자에게 필요한 6가지 필수 기술을 제시합니다.

1. Java 8에 대한 뛰어난 지식

최신 버전의 Java가 이미 널리 사용되고 있지만 모든 야심 찬 Java 개발자는 Java 8에 대한 심층적인 지식과 경험이 필요합니다. Java 8의 가장 유용한 기능 중 일부는 다음과 같습니다.
  • 메서드 구현을 통해 인터페이스를 생성하기 위한 표준 및 정적 메서드입니다.
  • 추상 메서드가 하나만 있고 개발자가 다른 추상 메서드를 추가하지 않도록 도와주는 기능적 인터페이스입니다.
  • 기능적 인터페이스를 생성하는 데 도움이 되는 람다 표현식입니다.
  • 병렬 및 순차 실행을 가능하게 하는 Java Stream API.
  • 컬렉션 API의 새로운 메서드.
이러한 모든 기능 덕분에 Java 8은 함수형 프로그래밍에 없어서는 안 될 요소입니다. 함수형 프로그래밍은 동시성과 코드 간결성을 제공하고 최적화된 코드로 부하가 높은 애플리케이션을 만드는 데 도움이 됩니다. Java 8은 또한 네이티브 코드 최적화의 기반이 되어 Scala, Kotlin, Grails와 같은 다른 언어에서의 개발 최적화를 가능하게 했습니다.

2. 테스트 경험

Java의 단위 테스트는 다소 논란의 여지가 있는 주제입니다. 일부 개발자는 단위 테스트 작성이 시간 낭비라고 주장하지만, 우리는 단위 테스트 기술이 모든 전문 Java 개발자에게 필수라고 굳게 믿습니다. 단위 테스트를 통해 개별 코드 블록을 테스트하고 최종 제품이 오류 없이 작동하는지 확인할 수 있습니다. 따라서 개발자가 자신의 기술과 지식을 향상시키려면 가장 널리 사용되고 효과적인 테스트 도구를 사용하는 방법을 배워야 합니다. 익숙해져야 할 주요 테스트 프레임워크는 JUnit 5 라이브러리입니다. 기타 도구는 다음과 같습니다.
  • 로봇 프레임워크
  • 모키토
  • 파워모크
단위 테스트 외에도 Java 개발자는 다른 테스트 방법(시스템 테스트, 승인 테스트 및 통합 테스트)을 잊어서는 안됩니다. 이를 통해 소프트웨어에 대한 포괄적인 테스트를 수행하고 오류, 버그 또는 심각한 오류가 없는지 확인할 수 있습니다. 테스트에 관해 기억해야 할 가장 중요한 점은 작은 변화가 큰 결과를 가져온다는 것입니다. 주저하지 말고 단위 테스트에 시간과 노력을 투자한다면 작업 품질이 향상되는 것에 놀랄 것입니다.

3. 데브옵스

필수는 아니지만 DevOps와 그 원칙에 대해 배우는 것은 개발자로서 그리고 근무하는 회사에 도움이 될 수 있습니다. DevOps 프로세스의 유연성과 구성을 통해 기업은 제품 품질을 최적화하고 운영을 간소화할 수 있습니다. 또한 프로세스의 투명성도 높아집니다. Java의 DevOps는 본질적으로 Java 개발에 DevOps를 적용한 것입니다. 여기에는 다음이 포함됩니다.
  • 지속적인 제공 및 통합.
  • 모놀리식 대신 마이크로서비스로 작업합니다.
  • 코드로서의 인프라.
  • 자동화된 테스트.
DevOps는 광범위한 분야이므로 이를 연구하려면 상당한 시간과 리소스가 필요합니다. 그러나 Java 개발자라면 DevOps를 배우면 나중에 DevOps 엔지니어가 될 수 있으므로 도움이 될 것입니다. DevOps 엔지니어가 되고 싶지 않거나 회사에서 DevOps 엔지니어가 되고 싶지 않다면 그것도 괜찮습니다. DevOps는 Java 커뮤니티에서 점점 더 대중화되고 있다는 점을 명심하세요.

4. Java 라이브러리 및 API에 대한 지식.

Java는 세계 최고의 프로그래밍 언어 중 하나이기 때문에 사용할 수 있는 API와 라이브러리가 엄청나게 많다는 것은 놀라운 일이 아닙니다. 이러한 도구는 개발 프로세스를 크게 단순화하고 개발자가 신뢰할 수 있는 소프트웨어를 신속하게 만들 수 있도록 해줍니다. 아래에는 훌륭한 Java 개발자라면 누구나 알고 자신있게 사용할 수 있는 기본 도구 세트가 나열되어 있습니다. 이러한 도구는 애플리케이션을 신속하게 구축하고 데이터와 해당 스토리지를 효과적으로 관리하는 데 도움이 됩니다.
  • Gradle(애플리케이션 구축을 위한 도구)
  • Maven(약간 구식이지만 여전히 인기가 있으며 애플리케이션 구축에도 사용됨)
  • Java 8 표준 패키지;
  • 스프링 프레임워크;
  • JPA ORM(최대 절전 모드, TopLink);
  • NoSQL 데이터베이스(MongoDB, Cassandra).
API의 경우 핵심 Java API를 사용하려면 개발자는 OpenJDK, Android, Oracle 및 IS2T에 대한 지식이 필요합니다. 이러한 도구의 가장 큰 장점은 모두 상세하고 유익한 문서와 함께 제공된다는 것입니다. 게다가 개발자는 항상 커뮤니티 지원을 받을 수 있다는 점도 큰 장점입니다.

5. Spring과 Spring Boot에 대한 자신감 있는 지식

Spring Framework는 Java 기반 애플리케이션 개발에 가장 일반적으로 사용되는 프레임워크이므로 개발자가 이를 사용하는 방법을 아는 것이 중요합니다. Spring의 주요 이점 중 하나는 느슨하게 결합된 애플리케이션을 생성하고 개발자에게 더 많은 유연성을 제공하는 종속성 주입입니다. Spring은 또한 매우 가벼우며 XML 구성, 주석 및 선언적 프로그래밍을 지원합니다. 따라서 Java 개발 기술을 익히고 싶다면 Spring 배포도 마스터해야 합니다. Spring Boot는 애플리케이션을 빠르게 배포하기 위한 편리한 도구를 제공하는 Spring의 반복입니다. Spring Boot는 Spring을 기반으로 사용하고 그 위에 자체 기능을 구축한다고 해도 무방합니다. Spring은 유연성에 중점을 두고 있지만 Spring Boot는 코드를 줄이고 개발 프로세스를 단순화하는 데 도움이 됩니다. 개발자에게 즉시 사용 가능한 기능을 제공하고, 독립 실행형 앱을 구축하는 데 도움을 주며, 전반적으로 실행 및 관리가 더 쉽습니다. Spring Boot는 다양한 환경(프로덕션, 테스트, 품질, CI/CD)에 대한 애플리케이션을 빠르고 쉽게 설정하고 실행할 수 있게 해주기 때문에 신속하게 구축해야 하는 마이크로서비스 및 애플리케이션에 적합합니다. Spring과 Spring Boot 모두 개발자 커뮤니티의 또 다른 인기 추세인 React 프로그래밍 기능으로 확장되었습니다. 예를 들어 Spring 5에는 복잡한 분산 시스템을 프로그래밍하고 해결하기 위한 반응적 접근 방식을 구현하는 WebFlux가 있습니다.

6. 빅데이터 경험

빅 데이터는 개발자가 시장 요구를 충족하기 위해 따르고 채택해야 하는 추세가 점점 커지고 있습니다. 전문 Java 개발자가 익숙해질 수 있는 주요 도구는 다음과 같습니다.
  • 아파치 스파크
  • 아파치 카프카
  • Hadoop(일괄 처리용)
Apache Spark는 Java용 기본 바인딩을 제공하는 분산형 빅데이터 처리 플랫폼입니다. 이 프레임워크는 기능과 성능으로 인해 엄청난 인기를 얻었으며 현재 Java 커뮤니티에서 가장 선호되는 빅 데이터 도구입니다. Apache Spark는 클러스터 독립 실행형 모드에서 실행될 수 있으며 이를 위해서는 Apache Spark 환경과 JVM(클러스터의 각 시스템에 대해)만 필요합니다. Spark는 또한 놀라울 정도로 빠르며 매우 사용자 친화적인 Spark API를 갖추고 있습니다. Hadoop은 Java 개발자들에게도 잘 알려진 데이터 저장 플랫폼입니다. Hadoop은 Spark만큼 빠르지는 않지만 여전히 빅 데이터 작업에 가장 널리 사용되는 도구 중 하나입니다. 이는 Hadoop(및 유사 솔루션)에 빅 데이터 처리 문제를 효율적으로 해결하고 일반적으로 Hadoop 성능(실시간 스트림 처리 지원 포함)을 최적화할 수 있는 수많은 플러그인이 있기 때문이기도 합니다.

코드 혼란을 제거하기 위한 7가지 Java 선택적 팁

출처: Medium Reddit에 한 Java 개발자는 “Optional의 존재를 모르는 동료가 있습니다.”라고 썼습니다. Optional이 코드의 "가독성"을 향상시킨다고 생각할 수 있습니까? 항상 사용할 가치가 있나요? Optional 사용이 완전히 불필요한 곳은 어디입니까? 많은 개발자들이 여전히 Optional을 올바르게 사용하는 방법을 모르기 때문에 Optional 남용의 7가지 예와 그에 대한 대처 방법을 알려 드리겠습니다. 커피 브레이크 #109.  현재 Java 개발에서 가장 수요가 많은 기술입니다.  복잡한 코드를 제거하기 위한 7가지 Java 선택적 팁 - 2

1. null 검사에 Optional을 사용하지 마세요

null 검사 대신 Optional을 사용하면 혼란만 더해집니다. 이로 인한 이점은 없습니다. Optional과 isPresentget 메소드를 사용하는 것도 실수입니다 . 개발자들은 get이 예상대로 작동해야 한다고 믿습니다 . 그런 다음 isPresent를 추가 하고 null 검사로 돌아갑니다. Optional은 null 검사를 수정하지 않는다는 점을 기억하세요. 다음에 isPresent를 보고 get (또는 ElseThrow )을 사용하면 이 코드 조각을 변경할 수 있습니다. 표준 null 검사를 제거하려면 매핑 및 orElse를 사용 하고 Optional을 보다 선택적으로 사용하세요. 좋은 예는 다음과 같습니다.
var user = userService.getCurrentUser();
if(user == null) {
    return "(unknown)";
}
var username = user.getUsername();
if (username == null) {
    return "(unknown)";
}
return username;
vs

var user = userService.getCurrentUser();
if(user.isEmpty()) {
    return "(unknown)";
}
var username = user.orElseThrow().getUsername();
if (username == null) {
    return "(unknown)";
}
return username;
vs

return userService.getCurrentUser()
                  .map(User::getUsername)
                  .orElse("(unknown)");
선택적 대상으로 시작할 수 있습니다. Optional의 목적은 선택적 누락 값을 나타내는 것입니다. 그런 다음 문제로 돌아가서 그것이 효과가 있는지 확인하십시오. null 검사를 처리하는 또 다른 방법은 주석을 사용하는 것입니다. Nullable 또는 NotNull이 제대로 작동합니다. 사실, 코드가 오염될 수 있으며 컴파일 타임에만 보호합니다. 런타임을 확인하려면 Objects.requireNonNull 을 사용하세요 .

2. 적절한 오류 처리를 수행하십시오.

때때로 null은 예외를 나타냅니다. 이는 오류와 예외를 알리는 잘못된 방법입니다. "뭔가 잘못됐는데 여기서는 null입니다."는 피해야 할 안티 패턴입니다. 또한 예외를 처리하기 위해 Optional을 사용해서는 안 됩니다. 여기에 예가 있습니다.
public Optional<MyObject> getMyObject(final String jql) {
    try {
        return Optional.ofNullable(get(sql));
    } catch (final JqlParseException e) {
        return Optional.empty();
    }
}
myObject가 비어 있는 이유는 무엇입니까 ? 이는 오류이거나 빈 값입니다. 따라서 다시 모호한 결과를 얻게 되고 결과적으로 Optional의 이점이 지워지게 됩니다. 이 코드는 사람들이 제어 흐름에 Optional을 사용하려고 하기 때문에 존재합니다. 선택 사항은 코드베이스에서 일부 0을 제거합니다. 하지만 예외를 처리하려면 여전히 try-catch 구문을 사용해야 합니다. 예외를 올바르게 처리하려면 try-catch를 사용하십시오. 오류를 처리할 때 Optional을 제거하지 말고 기다리기만 하면 완벽하게 작동합니다. 그러나 여기에는 한 가지 예외가 있습니다. 빈 캐치입니다 . 빈 캐치에서 무엇을 반환해야 할지 모르는 경우 빈 Optional이 제대로 작동합니다.
private int readExpirationAsInt(Milk milk)
{
  String expiration = milk.getExpiration();
  try {
    return Integer.parseInt(expiration);
  }
  catch(NumberFormatException ignored) {}

  return 0;
}


private OptionalInt readExpirationAsInt(Milk milk)
{
  String expiration = milk.getExpiration();

  try {
    return Optional.of(Integer.parseInt(expiration));
  }
  catch(NumberFormatException e) {
    return OptionalInt.empty();
  }
}

3. Optional 메서드에서 null을 반환하지 마세요

public static Optional<POSType> getPOSType(String posName) {
    if (StringUtils.isNotBlank(posName)) {
        return Arrays.stream(POSType.values())
                .filter(type -> type.toString().equalsIgnoreCase(posName))
                .findFirst();
    }
    return null;
}
이는 Optional의 목적을 상실합니다. 이것은 잘못된 테스트의 또 다른 예입니다. 입력이 비어 있으므로 IllegalArgumentException 파일이 필요하다는 의미입니다 . 또한 이것은 실수이다. 아무도 선택적 호출 방법을 확인할 필요가 없습니다. 빈 Optional 요소를 반환하고 Optional 요소에 null이 있는지 확인하지 마세요.

4. 컬렉션에 Optional을 사용하지 마세요.

Optional로 컬렉션을 래핑할 필요가 없습니다. 또한 컬렉션에 Optional을 넣지 마세요. 이것은 무의미한 박싱 과 추가적인 언래핑을 추가함으로써 상황을 복잡하게 만들 뿐입니다 . 컬렉션에 Optional을 추가하지 마세요. 이로 인한 눈에 띄는 이점은 없습니다. 간단하게 유지하고 누락된 값에는 Optional을 사용하세요.

5. 연결을 위해 연결하지 마십시오.

Optional.ofNullable(foo).ifPresent(value -> {
  //do something
})
Optional에는 이를 도울 수 있는 자세한 방법이 있습니다. 체인 대신 간단한 null 검사로 충분합니다. Optional에는 좋은 방법과 좋은 IDE 지원이 있다는 것을 알고 있습니다. 당신은 그들을 사용할 수 있습니다.

6. 기본 값 래퍼 사용

큰 문제는 아니지만 OptionalInt 또는 OptionalLong을 사용할 수 있습니다 . 불필요한 제네릭을 제거하는 것만으로도 성능이 향상되고 더 간결한 코드를 작성할 수 있습니다.

7. ofNullable에 대해 알아야 합니다.

if (a==null){
  return Optional.empty();
} else {
  return Optional.of(a);
}
이러한 유형의 코드는 일반적으로 Optional#ofNullable 에 대해 모르는 개발자가 작성합니다 . 대부분의 개발자는 ofNullableof 의 차이점조차 이해하지 못합니다 . 그들은 Optional#of가 어떻게 역효과를 낼 수 있는지 이해하지 못합니다 . 대부분은 Optional#of 에서 NullPointerException이 발생할까 봐 ofNullable을 사용합니다 . 다시 말하지만, 이는 이 두 가지 방법의 목적을 무효화합니다. ofNullable 만 사용한다면 Optional#of 가 필요한 이유는 무엇입니까 ? Optional#of는 null을 전달할 때 NPE를 발생시킵니다. 이런 일이 일어나는 데에는 이유가 있습니다. 이 방법은 값이 존재할 것으로 예상할 때 사용해야 합니다. 없으면 빨리 실패합니다. Optional#ofNullable은 null을 빈 Optional로 변환합니다. 이 메소드는 null을 인수로 사용하며 이는 빈 Optional과 일치합니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION