JavaRush /Java Blog /Random-KO /커피 브레이크 #131. 웹 및 모바일 애플리케이션 개발에서 Java의 역할. 함수형 프로그래밍 - 장...

커피 브레이크 #131. 웹 및 모바일 애플리케이션 개발에서 Java의 역할. 함수형 프로그래밍 - 장점과 단점

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

웹 및 모바일 애플리케이션 개발에서 Java의 역할

출처: DZone Java는 가장 많이 사용되는 프로그래밍 언어 중 하나입니다. 기업, 웹 및 모바일 애플리케이션 개발에 적극적으로 사용됩니다. Java는 데이터 과학에서 AR/VR에 이르기까지 주요 기술 산업에 응용 프로그램을 보유하고 있습니다. Java를 사용한 엔터프라이즈 개발이 이 언어의 가장 널리 사용되는 사용 사례이지만 웹 및 모바일 애플리케이션도 Java가 사용되는 영역 중 하나로 간주됩니다. 커피 브레이크 #131.  웹 및 모바일 애플리케이션 개발에서 Java의 역할.  함수형 프로그래밍 - 장점과 단점 - 1지난 20년 동안 Java 개발이 웹과 모바일 장치에서 인기를 얻은 이유를 살펴보겠습니다. 웹과 모바일에서 Java를 사용하는 주된 이유 중 하나는 고성능 프로그래밍 언어이기 때문입니다. 이를 통해 애플리케이션이 처리 오류 없이 빠르게 실행될 수 있습니다. 다른 이유도 있습니다:

1. 오픈소스

오픈 소스 프로그래밍 언어인 Java에는 여러 가지 장점이 있습니다. 첫째, 애플리케이션 개발 프로세스 비용을 절감합니다. 둘째, 오픈 소스이기 때문에 개발자가 쉽게 언어를 변경하고 자주 업데이트할 수 있습니다. 또한 Java에는 읽기 쉬운 구문이 있어 웹 및 모바일 장치용 애플리케이션을 쉽게 개발할 수 있습니다. 마지막으로 개발자는 기존 언어 코드베이스를 사용하고 이를 개선할 수 있습니다.

2. 크로스 플랫폼

Java 프로그래밍의 또 다른 이점은 크로스 플랫폼 언어라는 것입니다. 개발자는 Windows에서 코드를 작성하고 macOS 및 Linux에서 실행할 수 있습니다. 여기에는 "한 번 작성하면 어디에서나 실행"이라는 원칙이 적용됩니다. 이를 통해 개발자는 다양한 시스템에서 작업하기가 더 쉬워지고 다양한 시스템에서의 테스트 프로세스가 단순화됩니다. 예를 들어, 개발자는 프로그램이 다양한 화면 크기와 운영 체제에서 올바르게 실행되는지 테스트할 수 있습니다.

3. 모바일 친화적

Java는 모바일 애플리케이션에 널리 사용되는 기술입니다. Android 앱 개발자는 구현하기 쉽고 보안 기능과 크로스 플랫폼 기능을 갖춘 Java 언어를 주로 사용합니다. Android에서는 애플리케이션을 확장하려면 강력한 언어가 필요하지만 Java는 놀라운 확장 기능을 제공합니다. 또한 Android 애플리케이션 테스트 프로세스도 단순화됩니다. 이 모든 것은 이것이 모바일 애플리케이션을 만들기 위한 안정적이고 역동적인 프로그래밍 언어라는 것을 암시합니다.

4. 도구 및 라이브러리

Java의 가장 중요한 장점 중 하나는 다양한 도구와의 호환성입니다. Spring, Hibernate, Struts, Spark 등의 프레임워크는 개발 프로세스를 크게 단순화합니다. 이러한 모든 도구는 대화형 및 동적 응용 프로그램을 만들기 위한 다양한 기능을 제공합니다. Apache Commons, Java Standard Libraries, Maven, Jackson 등과 같은 라이브러리를 사용하면 개발자는 처음부터 코드를 작성하지 않고도 기능을 추가할 수 있습니다.

5. 활발한 커뮤니티

전 세계에는 760만 명 이상의 Java 개발자가 있습니다. 그들은 지속적으로 프로그래밍 언어를 업데이트하고 여기에 새로운 기능을 추가합니다. Java는 6개월마다 업데이트되므로 개발자는 빠르게 학습하고 더 나은 제품을 만들 수 있는 기회를 갖게 됩니다. Java 커뮤니티를 사용하여 다양한 질문에 대한 답변을 찾을 수도 있습니다.

웹 애플리케이션 개발에서 Java의 부상

1995년 Sun Microsystems에서 개발된 이래로 Java 언어는 프로그래밍 업계의 우선 순위 중 하나가 되었습니다. 오늘날 전 세계의 기업들은 이 프로그래밍 언어를 사용하여 웹 애플리케이션을 만듭니다. Google, Netflix, Spotify 및 Pinterest는 기술 스택에서 Java를 사용하는 소수의 회사입니다. 전문가들은 IT 분야의 기업 중 60% 이상이 어떤 형태로든 Java를 사용하는 것으로 추정합니다. 또한 웹 개발의 다른 영역, 즉 클라우드 컴퓨팅, 소셜 미디어, 엔터프라이즈 개발, AR, VR 등에서 채택되어 인기 있는 프로그래밍 언어로 남아 있습니다. 현재 클라우드 기반 아키텍처가 필요한 기업에서 사용할 수 있는 우수하고 강력한 프로그래밍 언어입니다. JavaScript와 결합하면 Java를 사용하면 모든 플랫폼에서 실행할 수 있는 고성능 웹 애플리케이션을 만들 수 있습니다.

최신 사용 사례에서 Java의 부상

웹 개발 및 모바일 개발 외에도 Java는 현대 기술 세계에서 두각을 나타냈습니다. 오늘날 Java는 과학 응용 분야에 매우 유용한 프로그래밍 언어입니다. 과학 컴퓨팅을 위한 안전하고 빠르며 휴대 가능한 환경을 제공합니다. MATLAB은 Java 기반 과학 응용 프로그램을 위한 가장 널리 사용되는 라이브러리 중 하나입니다.
  • Java는 과학 애플리케이션의 프런트엔드 및 백엔드 개발에도 유용합니다. 프런트엔드 개발에는 Struts 및 Java Server Pages를 사용하고 과학 애플리케이션의 백엔드 개발에는 Java Core를 사용할 수 있습니다.

  • Java는 데이터 분석에도 유용합니다. 이를 통해 개발자는 다양한 라이브러리와 도구를 사용하여 데이터 분석 솔루션을 만들 수 있습니다. 오늘날 Java는 사물 인터넷 부문에서 응용 프로그램을 찾았습니다. 스마트카드, 센서 등 임베디드 시스템의 핵심 기술이다. 따라서 기업은 홈 자동화 산업에서 이 프로그래밍 언어를 사용합니다. 또한, 스트리밍 디바이스 기술 및 스마트 TV 개발에도 적극적으로 활용되고 있습니다.

  • Hadoop 빅데이터 플랫폼은 Java로 작성되었습니다. 오픈 소스이자 객체 지향 언어이기 때문에 빅 데이터 애플리케이션의 초석입니다. Scala와 같은 프로그래밍 언어는 Java Virtual Machine에서 쉽게 실행될 수 있으며 빅데이터 분석을 더 쉽게 만듭니다.

  • 게임은 Java가 다양한 게임 애플리케이션에 널리 사용되는 빠르게 성장하는 신흥 산업입니다. 예를 들어, 최대 오픈 소스 3D 게임 개발 엔진인 jMonkeyEngine에 대한 지원을 제공합니다. 또한 DVM(Dalvik Virtual Machine)은 주로 Java에서 지원되며 Android용 대화형 게임을 만드는 데 사용됩니다.

함수형 프로그래밍 - 장점과 단점

출처: Dev.to 익숙하지 않은 기술에 대한 전통적인 회의론에도 불구하고 저는 함수형 프로그래밍의 이점을 인식하고 있습니다. 다음은 이 프로그래밍 패러다임을 설명하는 대략적인 장점 목록입니다. 커피 브레이크 #131.  웹 및 모바일 애플리케이션 개발에서 Java의 역할.  함수형 프로그래밍 - 장점과 단점 - 2

안전한 동시성

기능적 접근 방식은 안전한 동시성, 즉 스레드 충돌이나 수정 충돌을 일으키지 않고 별도의 스레드에서 작업을 실행하는 기능을 장려합니다. 그 이유는 객체 접근 방식과 달리 처리 중에 상태가 변경될 수 있는 객체를 공유하지 않기 때문입니다. 입구와 출구가 있고, 너 때문에 입구가 바뀌는 게 아니다. Java에서는 "스레드로부터 안전한" 개체를 사용하더라도 메서드가 호출될 때 해당 개체가 동일한 값을 갖는다고 보장할 수 없습니다. 아래 예에서는 요소를 한 번에 하나씩 처리하는 루프를 스레드 내부의 람다 함수를 사용하여 쉽게 병렬로 처리할 수 있음을 알 수 있습니다.
for( String item : items ) {
   process(item);
}
이제 다음과 같이 됩니다.
items.parallelStream().forEach( item -> process(item) );

빠른 I/O

함수형 프로그래밍은 멀티스레딩과 다른 접근 방식을 지원합니다. 이는 더 이상 데이터베이스 호출과 같은 I/O 응답을 기다리는 별도의 스레드가 없다는 것을 의미합니다. 즉, CPU와 대역폭 사용량을 최대화합니다. 고성능 애플리케이션의 경우 이는 분명한 이점입니다. 이는 함수 호출이 호출의 실제 결과가 아니라 미래의 특정 시점에 결과를 반환하겠다는 약속인 Future를 반환할 수 있다는 아이디어로 구현됩니다. 미래의 어느 시점에서 함수를 실행하는 반환 값을 얻습니다. 이는 프로세서 스레드가 데이터베이스 또는 REST 호출이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있음을 의미합니다.

표현의 간결성

소프트웨어 개발자는 복잡한 아이디어를 우아하게 표현하고 싶어합니다. 함수형 프로그래밍을 사용하면 이 작업을 간결하게 수행할 수 있습니다. 예를 들어, for 루프와 같은 공통 구성은 루프가 사용되는 공통 for 연산을 추상화하는 스레드로 대체될 수 있습니다. Java에 Lambda 함수와 스레드를 추가함으로써 이전에는 불가능했던 아이디어 표현 능력이 확장되었다는 것은 의심의 여지가 없습니다.

왜 기능적이지 않습니까?

위의 내용을 다시 한번 말씀드리자면, 함수형 코딩에는 많은 이점이 있으므로 이 글에서는 모든 것을 하나의 사례로 일반화하고 반드시 함수형 프로그래밍을 해야 하거나 그 반대로 해야 한다고 말하는 것이 아닙니다. 이러한 결정은 전환 이유와 잠재적인 문제에 대한 명확한 이해를 바탕으로 이루어져야 합니다.

항상 직관적으로 이해하기는 어렵습니다

코드를 작성할 때 컴퓨터와 통신하려고 하시나요? 컴퓨터와의 의사소통이 그렇게 중요하다면 기계어로 작성해 보는 것은 어떨까요? 물론 이것은 매우 어려운 일이기 때문에 이를 쉽게 하기 위해 컴퓨터 언어가 발명되었습니다. 또한 프로그래머는 다른 프로그래머가 이해할 수 있는 표현을 만들 수 있습니다. 소프트웨어가 점점 더 커지고 복잡해짐에 따라 복잡성을 관리하는 전략이 필요합니다. 우리는 추상화와 정보 은닉을 통해 이를 달성합니다. 이메일을 보내기 위해 Java에서 사용하는 클래스는 매우 복잡하지만 이 클래스의 인터페이스는 간단합니다. 자세한 구현을 숨기고 컨트롤의 외부 측면만 표시합니다. 중괄호 및 대괄호와 같은 언어 기능은 조건문 및 루프와 같은 구조를 알려줍니다. 이제 루프 또는 재귀와 조건을 함수로 옮깁니다.
for( String item : items ) {
    System.out.println(item);
}
그것은 밝혀:
items.foreach( item -> System.out.println(item) );
스트리밍 및 람다 접근 방식은 확실히 더 짧습니다. 더 적은 코드로 동일한 기능을 표현할 수 있습니다. 문제는 이제 우리가 알아야 할 메서드 내부에 실제 동작을 숨기고 있다는 것입니다. Java의 루프는 키워드를 사용합니다. 반면에 람다 함수는 다양한 형태의 재귀를 구현할 수 있으며 여기서는 이름만 해당 기능을 나타냅니다. 예를 들어:
boo.fooble( item -> System.out.println(item) );
더 이상 구조를 이해하기 위해 코드를 읽을 수는 없습니다. 이로 인해 실행 흐름을 추적하기가 어렵습니다. 또 다른 기능은 함수 연결(function chaining)으로, 한 함수의 결과가 중간 변수를 할당하지 않고 다음 함수의 입력이 됩니다.
boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
이 코드의 작성자는 모든 함수를 작성한 것처럼 보이고 그 기능이 무엇인지 알고 있기 때문에 이는 이해가 될 수 있습니다. 그러나 코드를 처음 접하는 사람들에게는 이것이 매개변수, 프로세스 또는 각 함수의 반환 값에 대해 많은 것을 알려주지 않습니다. 그러나 유형을 할당하는 항목에 동일한 내용을 작성하면 다음과 같은 결과를 얻게 됩니다.
Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
매개변수와 익명 함수는 동일하지 않기 때문에 완벽한 비유는 아닐 수 있지만 여기서 중요한 점은 아래에 설명된 함수의 기능을 더 깊이 이해하지 않으면 알 수 없는 결과와 매개변수가 포함된 긴 문장을 읽기가 어렵다는 것입니다. 따라서 함수형 프로그래밍은 놀라울 정도로 짧은 코드 세그먼트에서는 표현력이 뛰어나지만 소프트웨어를 처음 접하는 사람들에게는 이해하기 어려울 수도 있습니다. 클래스와 인터페이스의 핵심은 데이터를 숨기고 개발자가 구현을 이해하거나 볼 필요가 없는 재사용 가능한 코드 조각을 만드는 것입니다. 개발자가 두통 없이 크고 복잡한 시스템에서 작업할 수 있도록 존재합니다. 이는 특정 엔터티와 관련된 코드를 구성하는 편리한 방법입니다. 그러나 나는 함수형 프로그래밍이 크고 복잡한 프로젝트를 구성하는 데 어떻게 도움이 되는지 거의 이해하지 못합니다. 여기에는 아마도 주관적인 이유가 있을 것입니다.

당신의 기술로 다른 사람들을 감동시키려면

일부 소프트웨어 개발자는 자신의 기술이 너무 불안해서 불필요하게 복잡한 코드를 작성하여 좋은 인상을 주려고 합니다. 선임 개발자로서 저는 스마트 코드를 작성하려는 다른 소프트웨어 개발자를 특별히 존경하지 않습니다. 물론 이는 함수형 프로그래밍에만 적용되는 것은 아닙니다. 어떤 코딩 스타일에서도 같은 일이 일어날 수 있습니다. 그러나 나는 함수형 프로그래밍 지지자들 사이에서 어느 정도 지적 허영심을 발견했습니다. 요점은 소프트웨어 개발자가 진공 상태에서 작업하지 않는다는 것입니다. 이 "스마트" 코드는 유지 관리가 필요하며, 이해하기 어려운 경우 읽기 및 변경도 어렵고 디버깅도 어렵습니다. 팀을 관리할 때 모든 수준의 사람들이 있기 때문에 가장 현명한 방법은 관련된 모든 사람이 이해할 수 있는 방식으로 코드를 작성하는 것입니다. 이것이 우리가 명확하고 긴 변수 이름을 사용하는 이유이며, 따라서 메소드 길이를 제한합니다. "스마트" 코드는 추가 시간이 걸리기 때문에 작성하는 것이 그다지 스마트하지 않습니다. 나는 함수형 프로그래밍이 Perl이 수년 전에 만들었던 간결하고 강력한 표현에 대한 동일한 주장을 사용한다고 믿습니다. Perl의 지지자들은 단 몇 줄의 코드만으로 매우 강력한 프로그램을 작성할 수 있는 Perl의 표현력에 자부심을 느꼈습니다. 그것은 사실이었다. 문제는 이해하기 어렵다는 점이었습니다. 아마도 함수형 프로그래밍도 같은 함정에 빠졌을 것입니다.

새로운 패션이니까

항상 '핫'한 신기술이나 패러다임이 있습니다. 새로운 기술, 언어 및 접근 방식이 끊임없이 등장하고 있습니다. 우리는 끊임없이 도전하고 새로운 것을 배워야 합니다. 소프트웨어 개발자가 된다는 것은 기술 발전을 의미합니다. 그러나 소프트웨어 개발자로서 우리는 제품을 만드는 데 어떤 기술이 필요한지 스스로 평가해야 합니다. 단지 인기가 높다고 해서 새로운 대중 기술을 배우는 것은 시간을 현명하게 사용하는 것이 아닙니다. 이는 함수형 프로그래밍을 배우지 말아야 한다는 의미가 아니라, 작성 중인 애플리케이션에 대해 이 패러다임의 장단점을 평가해야 한다는 의미입니다.

이것이 유일한 참된 길이기 때문이다

이전에 나는 개발자들이 이 접근법 또는 저 접근법을 유일하게 올바른 접근법으로 홍보하는 것을 여러 번 보았습니다. 하지만 친구가 말했듯이 작업마다 다른 도구가 필요합니다. 예를 들어, 저는 개인적으로 인공 지능을 위해 Python과 PyTorch를 사용합니다. 하지만 다른 도구와 기술도 많지만 각각 장점과 단점이 있습니다. 상당한 확장성이 필요한 서비스에 대한 옵션으로 함수형 프로그래밍을 고려하는 데는 타당한 이유가 있습니다. 이는 이 접근 방식이 제공하는 동시성 안전성 때문입니다. 그러나 비용과 잠재적인 위험도 알고 있어야 합니다. 몇 년 전 나는 종속성 주입과 Spring이 해당 작업에 가장 적합한 것으로 간주되는 비슷한 경험을 했습니다. Spring 지지자들에게 이것이 어떤 이점을 가져오는지 물었을 때 그들은 나에게 명확한 대답을 하지 않았습니다. 나는 기술에 대한 공정한 평가보다는 일종의 종교적 캠페인에 참여하는 것처럼 보이는 일부 기능적 프로그래밍 순수주의자에게서 비슷한 것을 보고 있습니다. 그건 그렇고, 종속성 주입은 좋은 아이디어였으며 이제 그 이점을 명확하게 확인할 수 있습니다. 마찬가지로, 함수형 프로그래밍에 대한 나의 관심은 그것이 유용하고 유효한 접근 방식인지 여부보다는 그것이 어떻게 사용되는지와 관련이 있다고 생각합니다.

결론

이 글의 요점은 함수형 프로그래밍을 해야 하는지에 대한 질문에 대한 명확한 답을 제공하는 것이 아닙니다. 중요한 것은 새로운 기술이나 접근 방식을 어떻게 평가하느냐입니다. 가장 중요한 것은 자존심이 당신의 객관적인 평가를 차단하지 못하게 한다는 것입니다. 소프트웨어 개발은 ​​지적 능력이나 개인적 자질을 증명하는 것이 아닙니다. 현실 세계에서 가치를 창출하는 것입니다. 함수형 프로그래밍이 도움이 된다면 그것을 사용하세요.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION