이 시점에서 .NET과 Java 사이에서 프로젝트를 위해 무엇을 선택 하시겠습니까? [닫은]


13

새 프로젝트를 시작하고 Java와 .NET 중에서 선택할 수있는 두 가지 기술이 있습니다. 작업중 인 프로젝트에는 두 가지 기술 중에서 쉽게 선택할 수있는 기능 (예 : .NET에는 필자가 필요로하고 Java는 그렇지 않음)이 포함되어 있지 않으며 둘 다 잘 작동해야합니다 (단, 귀하 만 물론 필요합니다). 다음을 고려하십시오 :

  • 공연
  • 사용 가능한 도구 (타사 도구 포함)
  • 크로스 플랫폼 호환성
  • 라이브러리 (특히 타사 라이브러리)
  • 비용
  • 개발 과정 (가장 쉬움 / 가장 빠름)

또한 Linux는 기본 플랫폼이 아니지만 프로젝트를 Linux / MacO로 이식하려고합니다. Oracle 및 Java 커뮤니티와 관련된 문제와 Mono 및 Java의 제한 사항을 반드시 명심해야합니다. 두 가지 모두 경험이있는 사람들이 자신이 선택하고 왜 선택해야하는지에 대한 개요와 주관적인 견해를 제공 할 수 있다면 대단히 감사하겠습니다.

java  .net  mono 

이 질문에 효과적으로 대답하기위한 요구 사항에 대한 정보가 충분하지 않습니다.
red-dirt

3
모노는 고통입니다 (예 : 타임 싱크). 기본 WinForm 디자이너조차 없습니다.
Job

@Job 은 WinForms가 아직 오픈 소스가 아니기 때문에 MonoDevelop 에는 GTK # 용 GUI 디자이너가 있습니다.
Mahmoud Hossam

예, 그러나 타사 라이브러리의 모노는 어떻습니까? 그들은 "그냥 작동"합니까? 그리고 공급 업체가 Mono와 함께 사용하는 경우 공급 업체가 지원을 제공합니까?
TMN

답변:


26

가장 중요한 (편집 : 기술적) 결정은 다음과 같습니다.

  • 이 시점에서 Windows를 향후 배포 플랫폼으로 사용하기 위해 100 %를 투입 하시겠습니까?

아니라면 Java를 사용해야합니다.


Mono 의 결론은 "예, .NET은 크로스 플랫폼입니다"라고 말하는 데 자주 사용됩니다. 그 주장은 얼마나 유효합니까? Mono는 당신이 그것에 대해 개발 한 옵션 IFF 일뿐입니다 !

.NET 응용 프로그램이 즉시 작동 하지 않을있습니다 .


@Basic은 이것이 답변보다 더 많은 의견이라고 말했다. 정확히 말하면 .NET을 처리 할 때해야 할 가장 중요한 기술적 결정 일 수 있기 때문에 목록의 맨 위에 있는 질문이라고 생각합니다 . Basic이 Mono에 대해 테스트 할 것이라고 말한 것처럼, 그것은 방해가되며 Java와 .NET이 똑같이 적합하다고 생각합니다. .NET에 대한 경험이 거의 없지만 Java에서는 약간의 경험이 있습니다.

  • 성능-Java는 꽤 잘 실행되지만 여전히 약간의 시작 시간이 있습니다. JVM이 초기화 될 때 처음부터 시작되고 디스크에서 읽어야 할 때 런타임 라이브러리 jar 파일의 임의 액세스가 다소 느리기 때문입니다. 최근 Java 6에는 런타임 라이브러리 jar 파일을 디스크 캐시에 보관하여 백그라운드 액세스가 필요할 때 빠르게 액세스 할 수있는 백그라운드 프로세스가 있습니다.

  • 사용 가능한 도구. 많은 도구가 존재하며 고품질의 오픈 소스로 사용할 수있는 도구가 많이 있습니다. IBM은 몇 가지 고급 도구를 사용할 수 있지만 많은 비용이 소요됩니다. Java 세계에서 최고의 부품을 모아서 생계를 유지하고 저렴한 비용으로 액세스 할 수있게하는 MyEclipse를 살펴보고 사용 가능한 제품을 확인하고 싶을 수 있습니다. Netbeans에는 매우 멋진 GUI 편집기가 있습니다. JDeveloper에는 멋진 Swing 디버거가 있습니다. Sun 6 JDK에는 이미 실행중인 프로그램 (킬러 기능)을 분석 할 수있는 훌륭한 엔트리 레벨 프로파일 러 인 VisualVM이 있습니다.

  • 크로스 플랫폼 호환성. 아주 좋아, 탁월합니다. JVM은 매우 안정적이며 예측 가능합니다. 파일 구분 기호, 파일 이름 대 / 소문자 구분 및 메뉴 동작과 같은 운영 체제 차이점이 나타날 때만 문제가 표시됩니다.

  • 라이브러리. 있습니다 많은 그들 중 많은 사람들이 자유롭게 사용 가능하고 사용할 수 있지만, 기본적으로는 비 JVM 언어로 작성된 코드에 끌어 다소 어렵 기 때문에 자바로 작성된입니다.

  • 비용. Java는 기본적으로 무료로 제공됩니다. 오라클이 나타내는 것은 JRocket에서 제공되는 전동 공구는 비용이 많이 든다는 것입니다. 또한 연장 지원 ( "Java for Business")도 가격이 책정됩니다. x86 이외의 플랫폼은 죽어 가고 있지만 IBM은 많으며 IBM은이를 위해 뛰어난 Java 구현을 제공합니다. 이것은 운영 체제의 일부로 가격이 책정되어 있으며 더 나은 채택이 가능합니다.

  • 개발 과정. Java를 사용하는 데 많은 시간이 적절한 기술을 연구하고 선택하고 배우는 데 소비되지만, 완료되면 개발하기에 매우 빠른 기술이 많이 있다고 생각합니다. 최신 버전의 Java EE는 최소한 PHP 페이지만큼 빠르게 다시로드 할 수있는 Facelets를 사용하여 매우 강력한 웹 페이지를 작성할 수 있도록합니다.

나는 당신이 어느 Java 또는 .NET에서 숙련되지 않는 한, 당신은 생각 합니다 당신과 당신의 조직에 가장 잘 알고있는 기술을 선택하여 시간과 비용을 절감 할 수 있습니다.


14
Windows에서 작성한 Java 프로그램이 다른 곳에서 실행될 것이라고 누가 보증합니까? 그 보증을 깨기 위해 단 하나의 JNI 호출 만 필요합니다. 동일한 문제가 CLI에서 발생합니다. 교차 플랫폼이 아닌 API를 사용하면 휴대 성이 떨어집니다. 따라서 이식성을 보장 할 수있는 유일한 사람은 사용중인 프레임 워크에 관계없이 프로그래머입니다.
Mark H

3
@ Thorbjørn, 현재 기후에서 Oracle을 신뢰 하시겠습니까?
radekg

12
Thorbjørn은 Windows에 100 % 헌신 하지 않으면 Java를 사용해야 한다는 것이 아니라 Java 를 사용해야 한다는 것이 아니라고 +1했기 때문 입니다. 그리고 동의합니다. 그렇습니다. 모노는 폴백 (fallback)으로 존재하지만 현재 계획이 Windows에 전념하지 않으면 고통을 덜고 다른 플랫폼에서 실행되도록 설계된 기술을 사용하십시오. 그리고 이것을 .NET 개발자와 .NET 애호가라고 말합니다.
Carson63000

4
실제로 시도해 본 "다른 존재하는 사람"-다운 보더가 있는지 궁금 합니다.

4
"자바는 기본적으로 자유롭게 사용할 수 있습니다 (...) 전원 도구 비용에있을 것입니다 (...) exended 지원도 가격에 온다" . 정확히 .NET과 동일합니까?
Konamiman

19

좋아, 이것을 분해 해 봅시다.

다음을 고려하십시오 :

사용 가능한 성능 도구 (타사 도구도 포함)

Java 및 .NET 플랫폼 모두 사용 가능한 우수한 성능 테스트 도구가 많이 있습니다. Java 공간에는 대부분의 시나리오에 적합한 무료 오픈 소스 도구가 많이 있음을 알고 있습니다. .NET 측에서는 말할 수 없습니다.

크로스 플랫폼 호환성

Java는 이점이 있습니다. 일부 플랫폼에서 .NET을 실행하려면 프로젝트 모노 (또는 이와 유사한)가 필요합니다. 나는 Mono가 100 % 방탄 및 성능을 가지고 있는지 확실하지 않습니다. 다른 누군가가 들어올 수 있기를 바랍니다.

라이브러리 (특히 타사 라이브러리)

둘 다 여기에서 강한지지를 받고 있습니다. 처음에는 Java 에코 시스템이 앞장서고 있습니다 (문자 그대로 생각할 수있는 모든 것을위한 무료 오픈 소스 라이브러리가 있습니다).하지만 .NET은 중요한 곳을 확실히 따라 잡았습니다 (NHiberante for persistence, NUnit for unit testing) 두 가지 기본 이름을 지정하려면 + 메트릭 트럭로드가 더 있다고 확신합니다).

비용

모든 회사는 어느 정도 수익 창출을 시도하지만 Java의 경우 귀하의 진술이 약간 오도한다고 생각합니다. Java는 버전 6 (OpenJDK 프로젝트)을 기준으로 오픈 소스로 제공되었으며 Oracle은 Sun이 수행 한 것 이상으로 Java를 통해 수익을 창출하려는 성향을 보이지 않았습니다. 예, 그들은 앱 서버와 확장 기능을 JVM (특히 관리 확장 기능)으로 판매하지만 핵심 Java 자체를 판매합니까? 아닙니다. 그들은 결코 그렇게하지 않을 것입니다 (이것은 여러 번 공개적으로 언급되었습니다).

MS와 Oracle 모두가 대응 플랫폼을 통한 간접 수익으로 인해 큰 이익을 얻는다고 생각합니다.

총 소유 비용 (TCO)? 나는 그것을 증명할 방법이 없기 때문에이 토론에 들어 가지 않을 것이다 (프로그래밍은 창조적 인 인간 활동이다). 개인적으로 Java 기반 시스템은 대부분의 경우 무료 오픈 소스 스택을 위에서 아래로 활용할 수 있기 때문에 초기 비용이 저렴한 경향이 있다고 생각합니다. 그러나 대기업은 지원 계약을 선호하여 특정 혜택을 무효화 할 수 있습니다.

개발 과정 (가장 쉬움 / 가장 빠름)

무엇을 만들려고하는지에 따라 다릅니다! 나는 개인적으로 C #이 현재 Java보다 핵심 언어로 몇 가지 추가 기능을 가지고 있지만 개인적으로 주장하고 있습니다. 그러나 JVM (Groovy, Scala, Clojure 등)에서 (Java와의 다중 상호 운용 가능) 언어를 사용하면 원하는 모든 언어 기능을 사용할 수 있습니다.

.NET은 한동안 웹 프론트 엔드 '물건'을 구축하는 데 뚜렷한 이점이 있었지만 (필요한 경우 빠른 응용 프로그램 개발) JEE6 및 / 또는 Spring 및 기타 웹 / 응용 프로그램 프레임 워크가 그 격차를 거의 막았다 고 생각합니다.

또한 Linux는 기본 플랫폼이 아니지만 프로젝트를 Linux / MacO로 이식하려고합니다. Oracle 및 Java 커뮤니티와 관련된 문제와 Mono 및 Java의 제한 사항을 반드시 명심해야합니다. 두 가지 모두 경험이있는 사람들이 자신이 선택하고 왜 선택해야하는지에 대한 개요와 주관적인 견해를 제공 할 수 있다면 대단히 감사하겠습니다.

리눅스, 유닉스, 특히 맥 OS로 포팅하고 싶다면 위에서 언급 한 바와 같이 자바가 우위에있다.

희망이 도움이됩니다!


4

당신의 포인트 목록을 고려할 때, 나는 분리 될 것이고 실제로 내가 만들어야 할 것에 달려 있습니다.

.Net은 다음과 같은 측면에서 승리합니다.

  • 공연
  • 개발 과정 (가장 쉬움 / 가장 빠름)

Java는 이러한 측면에서 승리합니다.

  • 크로스 플랫폼 호환성
  • 라이브러리 (특히 타사 라이브러리)

이러한 측면에 대한 추첨입니다.

  • 비용
  • 사용 가능한 도구 (타사 도구 포함)

.Net은 모든 의도와 목적을 위해 단일 플랫폼 기술 스택입니다. 예, 모노가 있지만 모노가 Windows 구현과 100 % 호환 될 때까지 진정한 크로스 플랫폼 경험을 제공하지는 않습니다. 크로스 플랫폼 지원을 위해 믿을 수있는 유일한 하위 집합은 Silverlight에 적합한 것입니다.

즉, .Net은 더 나은 인식 성능 (실제 측정 TBD)을 가지고 있습니다. 사용자의 눈에는 지각 된 성능 만이 중요합니다. 지난 12 년 이상 Java로 개발 한 후 최근에 .Net을 수행 한 후이 플랫폼의 성능을 높이 평가할 수 있습니다.

반면에 Java는 선택할 수있는 훨씬 더 풍부한 IDE를 가지고 있으며 이러한 우수한 IDE의 비용은 .Net 변형 비용보다 훨씬 저렴합니다. 반면에 전문 J2EE 엔진의 비용은 개발 환경 비용을 쉽게 능가합니다. .Net에서 나는 사악하고 어두워지는 것에 대한 인식을 가지고 있습니다. Java에는 막대한 비용에 대한 해결 방법이 있습니다. 개발자 비용으로 쉽게 구성 할 수 있습니다. IDE 외부에서는 중요한 도구 (프로파일 러, 적용 범위 등)의 비용이 동일합니다.

결국 그것은 실제로 필요에 달려 있습니다 . 어쨌든 Windows에 배포 할 예정이라면 .Net은 전혀 생각할 필요가 없습니다. Windows 전용 상점 인 클라이언트가 있습니다. 유닉스에 배포하려고하거나 이기종 시스템을 지원해야한다면, 자바는 전혀 생각할 필요가 없다. 나는 급진적이고 혼합 기술 스택을 제안 할 수도 있습니다. 결국 클라이언트가 서버를 유닉스로 요구한다고해서 데스크톱에서 서버를 실행한다는 의미는 아닙니다. 모든 응용 프로그램이 웹 응용 프로그램에 가장 적합한 것은 아닙니다.


4

성능 -짝수

두 플랫폼 모두 거의 모든 응용 프로그램에서 매우 잘 작동합니다.

내 주관적인 경험은 Java가 오래 실행되는 응용 프로그램에는 약간의 우위가있는 반면 .Net은 응용 프로그램 시작 시간이 빠르다는 것입니다.

사용 가능한 도구 (타사 도구 포함) -토론 가능

필요한 도구와 익숙한 도구에 따라 다릅니다.

.Net에는 Microsoft가 제공하는 훌륭한 도구가 있습니다. 반면에 Java 세상에는 Eclipse, IntelliJ 환경의 Netbeans와 같은 훌륭한 도구가 있습니다.

크로스 플랫폼 호환성 -Java Win

.Net은 기본적으로 Microsoft 플랫폼 (Windows, Xbox 등)과 연결되어 있습니다. Microsoft 이외의 플랫폼에서는 완전한 구현을 사용할 수 없습니다 .

모노는 훌륭하지만 실제로 모든 .Net 라이브러리를 지원하지 않기 때문에 완전한 크로스 플랫폼 기능을 제공하지는 않습니다 (예를 들어, 모든 Windows GUI 기능이 올바르게 작동하지 않을 수 있으므로 GTK #와 같은 크로스 플랫폼 툴킷은 다른 플랫폼에서 앱을 실행할 수 없습니다)

Java는 실제로 이식성이 있습니다. 언어뿐만 아니라 훨씬 더 중요한 것은 모든 Java 라이브러리가 이식 가능하다는 것입니다. 순수 Java 라이브러리 (예 : Swing for GUI)를 사용하면 Java 런타임 환경이있는 곳 어디에서나 코드가 실행됩니다.

라이브러리 (특히 타사 라이브러리) -Java win

아마도 Java 플랫폼의 가장 큰 장점은 광범위한 라이브러리 에코 시스템, 특히 오픈 소스 라이브러리 일 것입니다. 몇 가지 예 :

  • 모든 Apache 라이브러리 및 도구
  • 광대 한 이클립스 생태계의 모든 라이브러리
  • Google이 제공 / 관리하는 모든 라이브러리
  • JBoss 및 Red Hat이 유지 관리하는 모든 관련 엔터프라이즈 도구

비용 (오라클은 자바로 수익을 창출하려고 노력하는 것 같습니다) -오픈 소스로 가면 Java가 승리합니다.

100 % 오픈 소스 Java 스택을 가질 수 있으며 무료이며 특정 독점 플랫폼에 연결되지 않습니다. 100 % 무료입니다.

또는 IntelliJ IDEA를 구입하고 Windows에서 Java를 실행하며 독점 데이터베이스를 사용할 수 있습니다.이 경우 일반적인 Microsoft .NET 스택과 비용이 거의 동일합니다.

개발 과정 (가장 쉬움 / 가장 빠름) -토론 가능

이것은 아마도 플랫폼에 기인 한 것이 아니라 각 플랫폼에서 개발자의 경험에 더 의존 할 것입니다.

.Net에는 Windows의 간단한 GUI 응용 프로그램을 매우 생산적으로 만들 수있는 훌륭한 도구가 있습니다. 이것이 .Net 개발의 "스위트 스폿"이므로 놀라운 것은 아닙니다.

반면에, 나는 서버 측 개발을 위해 Java 스택을 선호합니다. Maven과 같은 도구 및 모든 지속적인 배포 / 통합 기능을 사용하면 강력한 서버 측 앱을위한 매우 효과적인 개발 프로세스를 구축 할 수 있습니다.

언어 별 C #은 Java에 비해 몇 가지 생산성 이점이 있습니다. 그러나 요즘 Java 플랫폼에서 개발하는 경우 트렌드는 Java 자체를 사용하지 않고 Scala, Groovy 또는 Clojure와 같은 새로운 JVM 언어 중 하나를 사용하는 것입니다. 그렇게하면 훨씬 생산적입니다. C # 또는 Java보다.


3

.그물

주관적이거나 화염에 시달리지 않고이 질문에 대답하기는 어렵지만 (나는 다운 다운 될 느낌이 있습니다.). .Net은 상승세에 대한 언어이며 Java는 법적 문제로 인해 혼란스러워지고 인기가 떨어집니다.

또한 현재 .net은 멀티 코어 (Parallel.net) 및 비동기 프로그래밍 (반응 확장)에 대한 탁월한 지원으로 훨씬 더 응집력 있고 현대적인 언어이며, 내가 살 수 없었던 LINQ는 말할 것도 없습니다. .Net에는 Visual Studio Express, Sql Server Express, Web Matrix 등 많은 무료 도구가 있습니다.

Java가 멀티 플랫폼 이점을 가지고 있다는 것은 사실입니다. tradional 응용 프로그램이나 백엔드 구성 요소에 사용할 수있는 mono 등의 .Net 옵션이 있지만 매우 전문적인 작업을 수행하면 iffy를 얻을 수 있습니다 (WPF에 대해 논의하지 말자).

크로스 플랫폼이 정말로 중요한 또 다른 옵션은 Silverlight입니다. 저는 개인적으로 silverlight "응용 프로그램"에 관심이 없지만 작동하지 않습니다.

크로스 플랫폼은 고통의 포인트입니다. 적어도이 시점에서 정말로 정말로 필요한지 스스로에게 물어보십시오.


.Net을 선호하는 것은 나쁘지 않습니다. 나는 실제로 그것을 아주 좋아합니다. Java가 현재 정체성 위기에 직면하고 있다는 것은 의심의 여지가 없습니다. 크로스 플랫폼 (+1)에 대한 Java의 개선 된 실적을 인정하게되어 기쁩니다. 일부 클라이언트에는 Unix 배포가 필요하고 다른 클라이언트에는 Windows 배포가 필요합니다. Java 사용자는 두 플랫폼 모두에 서비스를 제공 할 수 있지만 .Net은 실제로 Windows로 제한됩니다. 즉, 거기에는 많은 Windows 전용 클라이언트가 있습니다.
Berin Loritsch

1

현재 조직에서는 Java를 선택합니다. 그 이유는 간단합니다. Java 팀은 ​​.NET 팀보다 더 크고, 경험이 많고, 도구가 더 좋습니다 (기존 시스템을 유지 관리하는 데 충분히 묶여있어 중요한 새 프로젝트를 수행 할 자원이 부족함) .
즉, .NET을 사용해야하는 긴급한 이유가있는 경우 (예 : 클라이언트 요구 사항) 일부 고객은 대규모의 .NET 소프트웨어 기반을 설치하고 새 시스템을 해당 기반에 맞추고 자체 유지 관리를 원할 수 있습니다. 그렇게하고 계약자를 고용하여 우리 자신의 사람들을 자유롭게 할 수없는 곳에서 일하십시오.
고객의 기술에 대한 최선의 이익을 요구하지 않으며, 일부 고객은 시스템을 구축하는 데 필요한 투자로 인해 (내부 조직으로 인해) 다른 것보다 더 많은 혜택을 누릴 수 있습니다 (다시 말해서 이미 많은 .NET 응용 프로그램이 실행되고 있으며이를 지원할 직원이 있으므로 Java 응용 프로그램을 실행하기 위해 사람들을 고용하고 하드웨어 및 소프트웨어 라이센스를 구매하려고 시도하지 않을 것입니다. 우리는 그들이 요청으로 우리에게 온다면 그렇게하지 말라고 권고합니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.