Java 및 C ++ 대신 C #을 선택해야하는 이유는 무엇입니까? [닫은]


46

C #은 요즘 인기있는 것 같습니다. 문법적으로 Java와 거의 동일하다고 들었습니다. Java와 C ++는 더 오랫동안 존재했습니다. Java 및 C ++ 대신 C #을 선택해야하는 이유는 무엇입니까?


16
작성된 질문은 건설적이지 않은 "어떤 언어가 더 낫다"는 교과서의 예였습니다. 여기서 주제가 아닌 질문. 실제로 좋은 결과를 얻었으므로 편집을 통해 더 건설적으로 만들려고했습니다. 그럼에도 불구하고 보관하십시오 자주 묻는 질문이 블로그 게시물 이 성격의 질문을 할 때 마음을.
Adam Lear

더 날카로운 아이템을 추가하겠습니다. .NET에는 언어에 대해 잘 정의 된 DOM ( 예 : CodeDOM )이 있으며 결과적으로 런타임에 동적으로 물건을 생성하는 것이 훨씬 간단하고 효율적입니다. 이는 인프라 기능으로도 도움이 될 수 있습니다. 또한 유형 시스템은 모든 기본 W3 유형과 일대일로 일치합니다. 기본적으로 W3와 다른 interop은 처음부터 언어로 구워졌습니다. 다른 언어의 경우 이러한 문제는 방금 해결되었으며 많은 문제가 있습니다. 또한 많은 언어 및 / 또는 프로토콜을 접할 수 있다면 .NET도 매우 강력합니다.
JoeGeeky

5
JoeGeeky, 질문에 대한 답변 으로 의견을 추가하십시오 .
Anthony Mastrean

1
실제 질문은 C # 대신 Nemerle, F * 및 F #을 선택해야하는 이유는 무엇입니까? (즉, 3 개 언어 모두 MS 언어이고 3 개 언어 모두 우수합니다)
mrsteve

나는 "언어 / 플랫폼 Y에 비해 언어 / 플랫폼 X가 항상 더 낫다"라는 장르의 어떤 진술도 유효하다고 생각하지 않으며, 어떤 X와 Y에 대해서도 특정 상황에서 쉽게 무효화 될 수 있다고 생각합니다. 이 질문의 요점은 무엇입니까?
Shivan Dragon

답변:


76

"현대적이고 전형적인 응용 프로그램 개발에 어떤 언어가 더 적합한가?"

편집 : 아래의 의견 중 일부를 언급했습니다. 작은 말 : 관용구와 같이 기본적으로 많은 것을 가질 때마다 매번 직접 구현하거나 다운로드하여 사용하는 것보다 큰 차이가 있음을 고려하십시오. 거의 모든 것이 이러한 언어 중 하나로 구현 될 수 있습니다. 문제는 언어가 기본적으로 제공하는 것입니다.

그래서 내 머리 꼭대기에서 (일부 논쟁은 두 언어 모두에 적용됩니다) ...

C #이 C ++보다 낫습니다.

  • 그것은이 기본 가비지 수집을.
  • 이를 통해 클래스 메소드의 서명을 자유 함수로 처리 할 수 ​​있으므로 (정적으로 유형이 지정된 this포인터 인수 무시 ) 클래스간에보다 역동적이고 유연한 관계를 만들 수 있습니다. 이것이 의미하는 바를 모르는 경우 편집 하고 void를 반환하고 void (*ptr)()변수에 void를 허용하는 멤버 메소드를 지정 하십시오. C # 대리자는 this포인터를 가지고 있지만 사용자가 항상 신경 쓰지 않아도됩니다. void()다른 클래스 의 메소드를 다른 void()델리게이트에 지정할 수 있습니다 .
  • 그것은 잘 구현되고 사용하기 쉬운 유용한 것들이 많은 거대한 표준 라이브러리를 가지고 있습니다.
  • 관리 코드와 기본 코드 블록을 모두 허용합니다.
  • 어셈블리 버전 관리는 DLL 지옥 문제를 쉽게 해결합니다.
  • 클래스, 메서드 및 필드를 어셈블리 내부가되도록 설정할 수 있습니다. 즉, 선언 된 DLL 내에서 액세스 할 수 있지만 다른 어셈블리에서는 액세스 할 수 없습니다.

C #이 Java보다 낫습니다.

  • 많은 소음 (EJB, 개인 정적 클래스 구현 등) 대신 속성 및 이벤트와 같은 우아하고 친숙한 기본 구성을 얻습니다.
  • 실제 제네릭 (Java가 제네릭을 호출하는 나쁜 캐스팅 농담이 아님)이 있으며 그에 대한 반영을 수행 할 수 있습니다.
  • 기본 자원 관리 관용구 ( using명령문)를 지원합니다. Java 7도 이것을 지원할 예정이지만 C #은 더 오랜 시간 동안 그것을 가지고 있습니다.
  • 예외를 확인하지 않았습니다 :) (이것이 좋은지 나쁜지에 대해 논쟁의 여지가 있습니다)
  • 원하는 경우 Windows와 긴밀하게 통합됩니다.
  • Lambdas와 LINQ가 있으므로 소량의 기능 프로그래밍을 지원합니다.
  • 일반 공분산과 공분산을 명시 적으로 허용합니다.
  • 원하는 경우 동적 변수가 있습니다.
  • yield문 을 통해 더 나은 열거 지원 .
  • 새 값 (또는 비 참조) 유형을 정의 할 수 있습니다.

편집-주소 설명

  • C ++이 네이티브 RAII를 지원하지 않는다고 말하지 않았습니다. 나는 Java가 그것을 가지고 있지 않다고 말했다. C ++에는 RAII에 적합한 자동 포인터가 있으며 (당신이하는 일을 알고 있다면) 가비지 수집을 대체 할 수도 있습니다.
  • 나는 자유 기능을 모방하는 것에 대해 아무 말도하지 않았다 . 그러나 예를 들어 this포인터 로 필드에 액세스하고 이를 수행하는 메소드를 일반 함수 포인터 (예 : 동일한 클래스에 있지 않음)에 바인딩하는 경우이를 수행 할 기본 방법이 없습니다. C #에서는 무료로 사용할 수 있습니다. 작동 방식을 알 필요조차 없습니다.
  • "멤버 메소드를 자유 함수로 처리"한다는 것은 멤버 메소드가 "비밀" this포인터를 필요로하기 때문에 멤버 함수를 자유 함수 서명에 기본적으로 바인딩 할 수 없음을 의미했습니다 .
  • usingIDisposable 래퍼와 함께, 이 진술은 RAII의 훌륭한 예입니다. 이 링크를 참조하십시오 . GC를 가지고 있기 때문에 C ++ 에서처럼 C #에서 RAII가 필요하지 않다는 것을 고려하십시오. 필요한 특정 시간 동안 명시 적으로 using명령문을 사용할 수 있습니다 . 또 다른 작은 알림 : 메모리 확보는 비용이 많이 드는 절차입니다. GC는 많은 경우 (특히 메모리가 많은 경우) 성능 이점이 있습니다. 메모리가 누출되지 않으며 할당 해제에 많은 시간을 소비하지 않습니다. 또한 매번 메모리를 한 번에 한 번만 할당하지 않기 때문에 할당 속도도 빨라집니다. 호출 new은 단순히 마지막 객체 포인터를 증가시키는 것입니다.
  • "가비지 수집이 있으므로 C #이 더 나쁩니다." 이것은 실제로 주관적이지만 맨 위에서 언급했듯이 가장 현대적이고 일반적인 응용 프로그램 개발에서 가비지 수집은 이점의 한 가지 지옥입니다.
    C ++에서 선택적으로 newand를 사용하여 메모리를 수동으로 관리하여 delete경험적으로 항상 여기 저기 오류가 발생하거나 (C ++ 11의 경우) 자동 포인터를 기본적으로 사용할 수 있지만 많은 것을 추가한다는 점을 명심하십시오 코드 소음 . 따라서 GC는 여전히 우위에 있습니다.
  • "제네릭은 템플릿보다 약합니다."-나는 당신이 어디서 그것을 얻었는지 모른다. 템플릿에는 장점이 있지만 필자의 경험상 제약 조건에서 일반 매개 변수 유형 검사, 불균형 및 공분산은 훨씬 강력하고 우아한 도구입니다. 템플릿의 장점은 언어를 약간 사용하여 연주 할 수 있다는 것입니다. 멋지지만 무언가를 디버깅하려고 할 때 많은 두통을 유발합니다. 따라서 템플릿에는 멋진 기능이 있지만 제네릭은 더 실용적이고 깨끗합니다.

5
C ++ 용 가비지 콜렉터를 계속 사용하려면 하나다운로드 할 수 있습니다 .
fredoverflow


6
Java와 비교 한 C #의 또 다른 중요한 기능은 성능상의 이유로 스택 (또는 특수한 경우 CPU 레지스터에 저장하거나 다른 힙 객체에 포함 할 수있는 객체 유형 인 "struct"입니다. X, Y 좌표 쌍과 같이 1-4 개의 필드가있는 작은 객체에 종종 사용됩니다.
Qwertie

2
@LokiAstari 마음 설명? 이벤트 처리기를 등록 취소하고 네이티브 래퍼가 포함 된 클래스에서 Dispose 패턴을 사용하는 것을 기억하면 괜찮을 것입니다. 그것은 C ++의 메모리 관리보다 알고 기억하기가 훨씬 적습니다.
얌 마르코비치

2
"1에서"C ++가 C #보다 낫다 "와"Java가 C #보다 낫다 "라는 섹션이 없기 때문에 -1입니다. C #이 모든 분야에서 우수하다고 생각하지 않으므로이 두 섹션이 없으면 대답에 중요한 정보가 부족할 수 있습니다.
Giorgio

30

환경

.NET Framework 및 Windows 클라이언트

Windows는 클라이언트 컴퓨터에서 지배적 인 운영 체제입니다. Windows 응용 프로그램을위한 최상의 GUI 프레임 워크는 .NET Framework 와 함께 Winforms 및 WPF 입니다. .NET Framework 및 API 에서 작동하는 가장 좋은 프로그래밍 언어 는 C # 입니다. Java는 이에 대한 대안이 아닙니다. 그리고 C ++는 자동 메모리 관리 기능이없는 오래된 언어입니다. C #은 C ++과 비슷하지만 자동 메모리 관리 기능이 있으며 포인터로 작업 할 필요가 없으므로 생산성이 향상됩니다. C ++은 일부 경우에 여전히 최상의 옵션이 될 수 있지만 비즈니스에서 일반적으로 사용되는 양식 집약적 인 데이터베이스 애플리케이션에는 적합하지 않습니다.

IIS와 Windows 서버

Windows 환경 및 C #에서 작업하는 데 익숙한 경우 서버 프로그래밍을위한 IIS와 기본 관리를위한 Windows Server를 배우는 데 최소한의 투자가 필요합니다.

Active Directory 및 Windows Server

회사 네트워크에 배포 할 소프트웨어를 개발하는 경우 Active Directory가있는 Windows Server를 사용하는 Windows 중심 환경을 사용하는 것 같습니다. 이러한 환경에서는 C #.NET Framework 로 만든 솔루션을 통합하고 배포하기가 쉽습니다 .

개인적으로 저는 C # 개발자가 아닌 Java 개발자이지만 웹을 사용합니다. Windows 네트워크 용 네트워크 응용 프로그램을 개발하는 경우 C #으로 전환합니다. 그러나 Linux 기반 웹 서버에는 Java를 선호합니다. 임베디드 시스템에 C ++을 선택하면 의존성이 많지 않습니다.

예, C # 은 C ++ 및 Java보다 최신 기능을 갖춘 더 나은 언어이지만 C # 을 선택하는 데 가장 중요한 것은 아닙니다 .

요약

C # 을 선택하려면 소프트웨어 환경이 가장 중요합니다 . 당신이있는 환경에서 작업하는 경우 Windows 클라이언트, 윈도우 서버, 액티브 디렉토리, IIS 아마도 SQL 서버 다음 C #은 로 지금까지 가장 좋은 언어입니다 .NET 프레임 워크 .

예를 들어 웹 서비스가있는 유닉스 환경에서 작업한다면 Java가 제 선택입니다. 임베디드 시스템으로 작업하거나 하드웨어 장치와 통합해야하는 경우 C ++ 을 선택하는 것이 좋습니다.


3
절대적으로-이것이 내가 C #을 실제로 사용하는 다른 이유는 없습니다.
Murph

Mono, MonoTouch 및 MonoDroid를 통해 다른 플랫폼에서 .NET을 사용할 수는 있지만 벤치 마크 결과 Windows에서 .NET보다 Mono가 현저히 느리고 Windows CE에서는 Microsoft 자체 Compact Framework가 매우 느립니다. codeproject.com/KB/cross -platform / BenchmarkCppVsDotNet.aspx ... 물론 WPF는 Windows에서만 사용할 수 있습니다 (그러나 저는 마음에 들지 않습니다)
Qwertie

"내가 임베디드 시스템을 위해 C ++을 선택하고 의존성이 많지 않다는 것을 의미한다." 당신은 자바 라이브러리를 의미합니까?
Puckl

@Puckl 예, 그러나 대부분 jvm / jre입니다.
Jonas

"예를 들어 웹 서비스로 유닉스 환경에서 작업하는 경우"루비, 파이썬, node.js 등 다른 언어 및 프레임 워크가 있습니다.
MarkJ

15

C #과 자바

다음과 같은 경우 C #은 매우 좋은 언어입니다.

  • 범용 객체 지향 개발을 수행하려고합니다. 정적으로 정형화 된 OOP 언어입니다.
  • Microsoft 플랫폼만을 대상으로하고 있습니다 (Microsoft가 Java를 효과적으로 복제하여 C #을 만들었 기 때문에 사람들이 Windows에 잠글 수있는 Java와 유사한 언어를 원했기 때문에 Java를 사용할 수 있었지만 사람들이 응용 프로그램을 쉽게 실행할 수있게했을 것입니다. 다른 플랫폼 ....)

언어로서의 C #은 다양한 방법으로 Java보다 우수합니다 (속성, 값 유형, 통합 제네릭 등의 구문이 더 우수합니다). 나는 C # 을 Java 보다 언어로 선호 하지만 웅장한 체계에서는 상당히 유사한 언어이며 유사한 응용 프로그램에 적합합니다.

반면에 Java는 다음과 같은 큰 장점이 있습니다.

  • 거대한 오픈 소스 생태계 - 당신은 무료로 얻을 수 Java 용 라이브러리는 지금까지 어떤 언어의 가장. 이것의 중요성을 과장하기는 어렵습니다. 일을 끝내는 시점에서 Java는 매우 효과적입니다.
  • 도구-Java 도구는 .Net 세계를 얻을 수있는 것보다 낫습니다. 예를 들어 Maven (한 번 숙달했습니다!)은 특히 인상적입니다.
  • 유지 관리 성-Java는 오래 전부터 사용되어 왔으며 비교적 안정적이며 이전 버전과의 호환성에 많은 노력을 기울 였기 때문에 대기업에서 정확하게 성공했습니다. 간단하고 약간 장황한 구문은 Java를 도와줍니다. 코드가 매우 명확하고 명시 적이면 코드를 더 쉽게 읽고 유지 관리 할 수 ​​있습니다.
  • 새로운 언어-JVM에는 Java 플랫폼의 미래인 놀라운 새 언어 (Scala, Clojure, Groovy 등)가 있습니다. 여기에서 많은 언어 혁신이 일어나고 있으며 Java 나 C #보다 훨씬 빠르게 진행되고 있습니다.

따라서 Java vs. C #은 꽤 가까운 전화이며 Microsoft 캠프에 있거나 오픈 소스 / 크로스 플랫폼 캠프에 있는지 여부에 달려 있습니다.

개인적으로 다음과 같은 이유로 Java를 선호합니다.

  • 라이브러리 생태계는 C #이 Java보다 더 좋은 구문을 가지고 있다는 사실이 훨씬 중요하다고 생각합니다.
  • 장기적으로, 나는 모든 코드가 플랫폼간에 적절하고 클라우드의 저렴한 리눅스 머신의 큰 클러스터에서 실행될 수 있기를 원합니다.
  • Clojure는 현재 세계에서 가장 유망한 언어 인 IMHO이며, JVM 플랫폼을 고수하면 시간이 지남에 따라 코드와 기술을 쉽게 Clojure로 전환 할 수 있습니다.

C / C ++

C / C ++는 기본적으로 완전히 다른 짐승입니다. 나는 것 없는 다음과 같은 이유로 현재 범용 응용 프로그램 개발을위한 추천 :

  • 메모리 관리 – 오늘날 가장 일반적인 목적의 프로그래밍을 위해, 당신은 자신의 메모리를 관리하고 싶지 않습니다. C # 또는 Java의 가비지 콜렉션은 C / C ++에서 사용해야하는 명시 적 메모리 관리 기술보다 생산성과 건전성이 훨씬 뛰어납니다.
  • 복잡성-특히 C ++은 매우 복잡한 언어입니다. 마스터하는 데 시간이 오래 걸리고 코드 자체도 엄청나게 복잡 할 수 있습니다. (예를 들어 C ++ 템플릿은 특히 털이 있습니다 ....)
  • 생산성 – 대부분의 시간과 다른 모든 것들은 C / C ++로 작업하는 데 시간이 더 걸립니다.

그러나 특정 제한된 수의 특수 도메인, 특히 다음과 같은 경우에는 훌륭한 선택입니다.

  • 운영 체제-운영 체제를 작성하는 경우 C / C ++를 사용하려고합니다.
  • 게임 개발 – 거의 모든 최고의 상용 게임 엔진은 C / C ++입니다. 까다로운 AAA 타이틀을 개발하는 경우 여전히 최선의 선택입니다 (C #과 Java는 덜 까다 롭고 캐주얼 한 게임에는 완벽하게 좋습니다)
  • 고성능 컴퓨팅-최적화 된 C / C ++가 고성능 코드를 생성하는 가장 좋은 방법 일 것입니다. 이 수준의 최적화를 수행하는 대부분의 응용 프로그램에는 노력할 가치가 없지만 특정 도메인에서는 매우 유용 할 수 있습니다 (예 : 고주파 거래)
  • 하드웨어 액세스-하드웨어에 직접 액세스해야합니다 (예 : 임베디드 시스템)

따라서 기본적으로 C / C ++는 특히 적합한 도메인 중 하나에 중점을 둔 경우에만 훌륭한 선택입니다.


1
더 나은 Java 도구의 예로 maven을 언급했습니다. 필자는 특히 그것에 익숙하지 않지만 설명서를 보면 Maven은 네이티브 .Net 빌드 도구 MSBuild와 비슷합니다. MSBuild보다 Maven이 더 나은 이유는 무엇입니까?
Kevin Cathcart

1
+! (단 하나의 투표권이 있기 때문에) : Java 생태계가 더 나은 이유와 왜 C #과 Java의 구문 만 비교해서는 안되는지를 잘 설명했습니다. Java에는 점점 더 나은 라이브러리와 도구가 있습니다. Java 자체에서는 그다지 많지 않지만 C #보다 훨씬 흥미로운 (IMO) JVM에는 매우 흥미로운 새로운 언어가 나타납니다. Clojure는 모르지만 Scala는 매우 흥미 롭습니다. 처음부터 OOP + FP로 설계되었습니다.
Giorgio

2
C ++ 코드가 수동 메모리 관리로 가득하다고 생각하는 이유는 무엇입니까? C는 아니지만 RAII는 수동으로 메모리를 수동으로 할당 / 해제 할 필요가 거의 없음을 의미합니다 (C #과 같은 언어가 쓸모없는 시간입니다).
gbjbaanb

3
@gbjbaanb-RAII가 범용 메모리 관리에 적합하지 않기 때문일 수 있습니다. Java 또는 C #에서 볼 수 있듯이 전체 GC 시스템과 유연성이 동일하지 않습니다. RAII의 한계를 넘어 서면 수동 메모리 관리 영역으로 돌아갑니다.
mikera

3
@ mikera 그냥 .NET 플랫폼에도 약간의 언어 개발이 있음을 지적하고 싶습니다. 예를 들어 F #은 나머지 .NET을 매끄럽게 통합하는 깔끔한 기능 언어이며, Python은 최근 Iron Python으로 .NET에 포팅되었습니다 ( 좋은 IDE 도 있습니다).
ikh

13
I heard that syntactically they are almost the same.

문법적으로? 누가 구문 원숭이에 대해 비행 원숭이를 제공합니까? 구문은 구문 적으로 유사한 언어에서 더 빠른 마이그레이션을 허용하는 한 가지 경우에만 좋습니다. 그게 다야.

C #은 Java보다 훨씬 낫습니다. 일반 및 기능적 프로그래밍 지원을 고려하십시오. C #은 Java보다 훨씬 앞서 있습니다. 연산자 오버로드와 다른 좋은 점은 말할 것도없고 C #이 훨씬 더 좋습니다. Java가 C #보다 나은 것으로 간주 될 수있는 방법은 없습니다.

C ++과 C #은 더 많은 경연 대회입니다. C ++은 매우 성가신 고집 컴파일 모델과 C 의 레거시 질병 을 가지고 있지만 템플릿은 제네릭보다 훨씬 강력하며 리소스 관리 접근 방식은 일반적 using으로 전체 실패와 마찬가지로 훨씬 유연하고 강력 합니다. 빨리.


6
언어 기능과 다른 플랫폼에서의 언어 가용성을 비교해야한다고 생각합니다. C #을 사용하면 Microsoft에 고정되어 있고 Java는 그렇지 않습니다. 최소한 UNIX / Linux 개발자에게는 큰 이점입니다. OOP + FP는 멋진 기능이지만 JVM에서 실행되고 레거시 Java 코드와 인터페이스 할 수있는 Scala를 사용할 수 있다면 왜 C #을 걱정해야합니까? 강요받지 않는 한 플랫폼 특정 언어를 배우지 않을 것입니다.
조르지오

2
@Giorgio : Mono 프로젝트가 존재합니다. 그러나 둘째, Microsoft는 실제로 플랫폼을 관리합니다. 정기적으로 대규모 업그레이드를합니다. 자바에는 새로운 것이 거의 없었다. 또한 CLR과 JVM이 아닌 C #과 Java에 대한 질문입니다.
DeadMG

4
@DeadMG : 내가 아는 한 Windows에서 개발 된 C # 프로그램을 가져 와서 Mono로 빌드 할 수는 없습니다. CLR 대 JVM이 아닙니까? 사람들이 왜 C # 또는 Java를 사용하는지에 대한 질문입니다. 사람들이 언어를 사용하려면 런타임과 운영 체제가 필요합니다. C #에 Java보다 많은 기능이 있다는 사실에 대해서는 논의하지 않지만 Java는 훨씬 이식성이 뛰어납니다. 이는 언어 채택에 영향을 줄 수있는 요소입니다. 실제로 Java는 특정 고급 기능이 없어도 C #보다 훨씬 자주 사용됩니다.
Giorgio

3
@ Giorgio, 모든 C # 프로그램을 가져 와서 Mono로 빌드 할 있습니다. C # 언어의 일부가 아닌 특정 라이브러리는 사용할 수 없습니다. 그리고 자바는 "훨씬 더 이식성이 없다". 예를 들어 C #에서는 iOS를 코딩 할 수 있지만 Java에서는 코딩 할 수 없습니다.
SK-logic

2
@Giogio, Mono는 최소한 JVM만큼 이식성이 뛰어납니다.
SK-logic

7

Well 과 위임자 C#와 같은 멋진 기본 제공 기능이 있습니다 LINQ. 그것은 두 세계에서 가장을 받고있다 - JavaC++. 전체 비교를 위해 여기 를 보십시오 .

그러나 저는 Java세상을 더 좋아합니다. 훨씬 더 많은 오픈 소스 프레임 워크이며 모든 플랫폼에서 실행됩니다. 그리고 말하지 마십시오 Mono-신뢰할 수있는 옵션이 아닙니다.


9
+1 : "하지만 Java 세상이 더 좋습니다. 훨씬 더 많은 오픈 소스 프레임 워크가 모든 플랫폼에서 실행됩니다." 오라클이 이것을 바꾸지 않기를 바랍니다!
Giorgio

15
Mono에서 "신뢰할 수없는"것은 무엇입니까?
SK-logic

2
@ Petar Minchev, 그것은 당신 자신의 잘못입니다. 이식성 지침을 따라야하며 이식 불가능한 라이브러리를 사용하지 않아야합니다. 이렇게하면 복잡한 응용 프로그램이 Mono에서 안정적으로 실행될 수 있습니다. WPF와 같은 것은 포팅 되지 않습니다 .
SK-logic

2
@ Petar Minchev에는 이식 할 수없는 Java 라이브러리가 많이 있습니다. 사용하는 언어에 상관없이 항상 이식성에주의해야합니다. 어쨌든 문제는 타사 라이브러리가 아닌 언어에 관한 것입니다.
SK-logic

3
@ Petar Minchev, GTK #는 휴대용입니다. 대신 사용하십시오.
SK-logic

3

일부 출처에 따르면 (예 : http://www.indeed.com/jobtrends 참조 ) C #은 여전히 ​​Java보다 인기가 낮으며 C ++만큼 인기가 있습니다.

C #은 Java에없는 기능 (예 : 속성, 함수형 프로그래밍 스타일 등의 특정 프로그래밍 관용구에 대한 직접 지원)을 제공합니다. C #은 C ++보다 추상화 수준이 높으므로 개발 속도가 프로그램 속도보다 중요 할 때 유리합니다.

개인적으로 저는 여전히 Java / C ++ 세계를 선호합니다. Petar Minchev가 말했듯이 Java는 더 많은 오픈 소스 프레임 워크와 응용 프로그램을 가지고 있으며, 모든 곳에서 실행되며 특정 공급 업체 및 운영 체제와 관련이 없습니다. 비록 코드가 종종 한 플랫폼에서 다른 플랫폼으로 적응해야하는 경우에도 C ++의 장점은 비슷합니다. Linux에서 개발하는 것을 선호하고 내가 아는 한 Linux에서 C #을 완전히 이행 할 수 없었기 때문에 프로그래밍 요구 사항이 C, C ++, Java, Scala에 의해 다루어지기 때문에 C #에 관심을 갖지 못했습니다.

반면에 특정 공급 업체에 묶여있는 많은 개발자에게는 문제가되지 않습니다. Microsoft는 운영 체제 시장에서 우위를 점하고 있으며 C #은 많은 직업 기회를 제공합니다. 따라서 IMO는 많은 개발자가 C #을 채택합니다. 기능이 풍부한 언어 일뿐 아니라 투자에도 도움이되기 때문입니다.


"리눅스에서 C #을 다룰 수는 없습니다"-이에 대해 자세히 설명해 주시겠습니까? Linux에서 C # 언어 자체 (또는 그 문제에 대한 F #)에 문제가 없으므로 전체 .Net 프레임 워크를 사용할 수 없다는 것을 의미합니까?
웨슬리 위저

@wawa : .Net 프레임 워크는 JDK에 해당하며 .Net 프레임 워크는 Windows에서만 사용할 수 있지만 JDK는 여러 OS에서 사용할 수 있습니다. 이것이 정확하지 않은 경우 답변을 편집하고 의견을 변경할 수 있습니다.
Giorgio

1
JDK와 기본 클래스 라이브러리가 더 유사하다고 생각합니다. BCL에는 표준화 된 부품과 표준화되지 않은 부품이 있습니다. 모노 프로젝트는 표준화되지 않은 부분뿐만 아니라 표준화 된 부분도 구현합니다.
웨슬리 위저

@wawa : 정보 감사합니다. C #에 Mono를 사용해보십시오. 그러나 여전히 C #이 Java보다 Oracle (또는 과거 Sun)보다 Microsoft에 훨씬 더 밀접하게 연결되어 있다는 느낌이 여전히 큽니다.
Giorgio

3

"프로그래밍 언어를 포함하는 소프트웨어 개발 프레임 워크"는 어떤가?

작업 할 "환경"과 같은 다른 항목을 포함하는 것을 잊었습니다.

  1. Windows OS에서만 작동하지만 저수준이 아니고 많은 메모리와 기타 리소스가 필요하지 않습니까?

    Windows에서 .NET을 프레임 워크로 선택하고 C #을 사용하십시오.

  2. Windows에서만 작동하지만 저수준이 될 필요는 없지만 리소스가 많지 않습니까?

    Delphi Framework (및 Object Pascal Delphi 프로그래밍 언어 또는 Lazarus Object Pascal 프로그래밍 언어)를 선택하십시오.

  3. 당신의 앱입니다. 다른 모바일에서 게임과 같은 여러 플랫폼을 지원해야합니까?

    Java 프레임 워크 및 Java 프로그래밍 언어를 선택하십시오.

  4. KDE를 그래픽 인터페이스로 사용하는 Linux입니까?

    C ++로 QT 프레임 워크 선택

  5. 그래픽 인터페이스로 Gnome을 사용하는 Linux입니까?

    C ++로 GObject / GLib 프레임 워크 선택

  6. 드라이버 개발과 같은 많은 저수준 작업을 수행 할 계획입니까?

    Plain C 또는 C ++는 표준 라이브러리와 함께 여러 운영 체제에서 프레임 워크로 사용됩니다.

그냥 내 2 센트.


1
확실하지 않습니다. 3. 스마트 폰은 오늘날 매우 인기가 있으며 AFAIK는 모두 C #을 어떤 형식으로 지원하지만 Android 만 Java를 지원합니다.
svick

델파이는 죽지 않았습니까? :)
šljaker

@ šljaker 아니요,하지만 요즘별로 인기가 없습니다.
umlcat

1
@ svick : 그건 거짓말이야. Android 외에도 Java는 iOS, Symbian, WinMo, Blackberry, Maemo 및 WebOS에 어떤 형태로도 존재합니다 (즉, 중요하거나 여전히 중요한 모든 것, 더 작은 플랫폼으로 시작하지 마십시오). Android, Blackberry 및 Symbian은 공식적 으로 개발 옵션으로 Java를 지원합니다. Sun은 iOS에서 Java를 지원했지만 Apple은 그것을 좋아하지 않았습니다. Java는 Android 및 Blackberry 전화 의 기본 개발 언어입니다. 나는 C #과 동일하게 말할 수 없으며 AFAICT는 WinMo에서만 공식적으로 지원됩니다.
Lie Ryan

1

검색을 수행하면 최고의 프로그래밍 언어에 대한 토론을 할 수 있습니다. 다음은 검색 결과 중 하나입니다 -http ://www.tiobe.com/index.php/content/paperinfo/tpci/index.html-Java는 여전히 가장 인기있는 언어 인 것 같습니다.

Java는 C ++의 단점 중 일부를 제거하려고 시도했습니다 (비 실시간 및 중요하지 않은 응용 프로그램의 경우 프로그래머의 삶을 단순하게 만듭니다). C #은 파티의 후발 업체로 Java 언어의 단점을 피했습니다. C #은 많은 발전을 거쳤으며 (Microsoft가 많은 것을 제어 할 수 있기 때문에) 이해 관계자 간의 충돌로 인해 Java의 발전이 상당한 시간 동안 차단되었습니다.


1

아직 언급되지 않은 몇 가지 사항 :

C #은 C ++보다 낫습니다.

헤더 파일을 제거하여 매우 간단합니다.

C #은 Java보다 낫습니다.

참조 유형 (클래스) 및 값 유형 (struct) 사용자 정의 유형을 모두 지원하므로 수행중인 작업을 알고 있으면 상당한 성능 이점을 얻을 수 있습니다.

단일 메소드 인터페이스와 같은 델리게이트를 지원하므로 단일 메소드 오브젝트와 관련하여 자주 발생하는 구문의 코딩을 크게 단순화합니다.


C #에서 참조 형식과 값 형식을 모두 사용하여 성능 이점을 얻을 수있는 방법을 설명 할 수 있습니까?
Giorgio

예를 들어, 레코드 배열을 원하는 경우 Java에서는 클래스를 사용하여 레코드를 설명하는 것 외에는 옵션이 없으므로 배열은 여러 개의 개별적으로 할당 된 객체에 대한 참조 배열입니다. C #에서는 구조체를 사용하여 레코드를 설명 할 수 있으므로 배열은 C 에서처럼 구조체를 하나씩 포함하는 단일 연속 메모리 영역이됩니다.
Mike Nakis

또 다른 예로, 작은 새 유형 (기계어에 적합한 유형)을 정의하려는 경우 새 클래스를 정의 할 필요가 없습니다. 단순히 구조체로 만들 수 있으므로 가치 의미에 순종합니다. 이러한 구조체를 전달하는 것은 객체에 대한 참조를 전달하는 것보다 비용이 많이 들지 않지만 객체를 할당, 구성 및 가비지 수집하지 않는 이점이 있습니다.
Mike Nakis

이해 했어요. 따라서 클래스는 힙에서 인스턴스화되고 참조를 통해 액세스되는 반면 구조체는 스택에서 인스턴스화됩니까 (?)
Giorgio

거의 맞습니다. 이 명령문의 유일한 부정확성은 다른 오브젝트 내에 포함되거나 구조체 배열 내에있는 경우 힙에서 구조체를 찾을 수 있다는 것입니다. 그리고 자바에서 값 유형이 박스와 정확히 같은 방식으로 박스 화되면 힙에서도 발견됩니다.
Mike Nakis

1

예상되는 환경과 전문 지식에 가장 적합한 언어를 선택해야합니다.

Microsoft 전용 환경에서 작업하는 경우 C #을 선택하십시오. C #은 ISO / IEC 23270 : 2003에 따라 표준화되었지만 Microsoft 버전은 유일하게 완전한 구현으로 남아 있습니다. 언어의 여러 주요 부분은이 표준에 포함되지 않으므로 Microsoft의 특허를받습니다. 어느 누구도 다른 시스템에 대해 완전히 호환되는 언어 버전을 구현하지 않으므로 사실상 언어를 사용하는 한 Microsoft Windows 및 .Net에 벤더가 고정되어 있습니다. 모바일 시장에서 사용할 기술을 찾고 있다면 다른 언어를 찾는 것이 가장 좋습니다.

Java는 작동하지만 가비지 수집과 같은 기능으로 인해 오버 헤드가 상당히 큽니다. Java는 ISO / IEC에 의해 표준화되지 않았으므로 플랫폼과 버전의 Java를 전환하더라도 Sun / Oracle의 최선의 의도 만 보장 할 수는 없습니다. 결국 Android로 작업 할 계획이라면 확실히이 방법입니다. Android의 프로그래밍은 기본적으로 Java이며 몇 가지 변경 사항이 있습니다.

C ++은 표준화되어 있으며 거의 ​​모든 컴파일러가 국제 표준을 따르므로 동작이 보장되지만 언어는 자신을 보호하지 못합니다. 스스로 정리 및 오버플로 검사를 수행해야합니다. 이것은 어렵지 않습니다. C / C ++ 프로그래머는 여러 해 동안 이러한 작업을 해왔습니다. Apple은 모든 목적에 Objective C를 사용하므로 Apple을 목표로 삼으려면 대신 사용해보십시오.

어느 시점에서 Windows를 떠나는 것을 본다면 C / C ++와 Java를 배우는 것이 좋습니다.이 두 가지 모두 현재 시장에 나와 있습니다.


0

C ++ vs C #과 관련하여 (자바에서 충분히 능숙하지 않기 때문에) 여기서 누락 된 것은 Windows에서 저수준 항목에 액세스하는 기능입니다. 예를 들어 C # (아직)으로 기본 디스플레이 드라이버를 개발할 수는 없지만 C ++로는 가능합니다. 이것은 C ++을 향상시키지 않습니다. C ++ 대 C #을 Assembly vs C로 봅니다.

실제로 기능을 구현하는 데 걸리는 시간을 보면 C #이 훨씬 효율적입니다. .Net 런타임의 성능 저하는 개발 된 애플리케이션의 99 %에서 무시할 수 있습니다. 꼭 타이트한 루프를 실행하는 경우에 중요하지만 응용 프로그램이 유휴 상태 인 경우 대부분 입력, 신호 또는 인터럽트 (디스크 IO, 버튼 클릭, 네트워크, 애니메이션 완료)를 기다리는 중입니다. .

모든 기능을 갖춘 CLR 라이브러리에는 또 다른 큰 이점이 있습니다. 내가 주니어 개발자들에게 C #을 훈련시킬 때, 대부분은 클래스, 멤버 및 네임 스페이스의 논리적 명명 규칙을 좋아한다고 말했다. 메소드의 기능을 찾는 것은 SDK에서 논리적으로 이루어졌으며 Visual Basic 5에 심각한 결함이있었습니다. 이것은 그들이 도서관을 채택하는데 엄청나게 도움이되었습니다. 언어의 구문을 배우고 나면 새로운 라이브러리를 배우는 것이 SDK를 잘 이해하는 데 중요합니다. 바퀴를 재발견하는 것을 막아줍니다.

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