C #은 요즘 인기있는 것 같습니다. 문법적으로 Java와 거의 동일하다고 들었습니다. Java와 C ++는 더 오랫동안 존재했습니다. Java 및 C ++ 대신 C #을 선택해야하는 이유는 무엇입니까?
C #은 요즘 인기있는 것 같습니다. 문법적으로 Java와 거의 동일하다고 들었습니다. Java와 C ++는 더 오랫동안 존재했습니다. Java 및 C ++ 대신 C #을 선택해야하는 이유는 무엇입니까?
답변:
"현대적이고 전형적인 응용 프로그램 개발에 어떤 언어가 더 적합한가?"
편집 : 아래의 의견 중 일부를 언급했습니다. 작은 말 : 관용구와 같이 기본적으로 많은 것을 가질 때마다 매번 직접 구현하거나 다운로드하여 사용하는 것보다 큰 차이가 있음을 고려하십시오. 거의 모든 것이 이러한 언어 중 하나로 구현 될 수 있습니다. 문제는 언어가 기본적으로 제공하는 것입니다.
그래서 내 머리 꼭대기에서 (일부 논쟁은 두 언어 모두에 적용됩니다) ...
this
포인터 인수 무시 ) 클래스간에보다 역동적이고 유연한 관계를 만들 수 있습니다. 이것이 의미하는 바를 모르는 경우 편집 하고 void를 반환하고 void (*ptr)()
변수에 void를 허용하는 멤버 메소드를 지정 하십시오. C # 대리자는 this
포인터를 가지고 있지만 사용자가 항상 신경 쓰지 않아도됩니다. void()
다른 클래스 의 메소드를 다른 void()
델리게이트에 지정할 수 있습니다 .using
명령문)를 지원합니다. Java 7도 이것을 지원할 예정이지만 C #은 더 오랜 시간 동안 그것을 가지고 있습니다.yield
문 을 통해 더 나은 열거 지원 .this
포인터 로 필드에 액세스하고 이를 수행하는 메소드를 일반 함수 포인터 (예 : 동일한 클래스에 있지 않음)에 바인딩하는 경우이를 수행 할 기본 방법이 없습니다. C #에서는 무료로 사용할 수 있습니다. 작동 방식을 알 필요조차 없습니다.this
포인터를 필요로하기 때문에 멤버 함수를 자유 함수 서명에 기본적으로 바인딩 할 수 없음을 의미했습니다 .using
IDisposable 래퍼와 함께, 이 진술은 RAII의 훌륭한 예입니다. 이 링크를 참조하십시오 . GC를 가지고 있기 때문에 C ++ 에서처럼 C #에서 RAII가 필요하지 않다는 것을 고려하십시오. 필요한 특정 시간 동안 명시 적으로 using
명령문을 사용할 수 있습니다 . 또 다른 작은 알림 : 메모리 확보는 비용이 많이 드는 절차입니다. GC는 많은 경우 (특히 메모리가 많은 경우) 성능 이점이 있습니다. 메모리가 누출되지 않으며 할당 해제에 많은 시간을 소비하지 않습니다. 또한 매번 메모리를 한 번에 한 번만 할당하지 않기 때문에 할당 속도도 빨라집니다. 호출 new
은 단순히 마지막 객체 포인터를 증가시키는 것입니다.new
and를 사용하여 메모리를 수동으로 관리하여 delete
경험적으로 항상 여기 저기 오류가 발생하거나 (C ++ 11의 경우) 자동 포인터를 기본적으로 사용할 수 있지만 많은 것을 추가한다는 점을 명심하십시오 코드 소음 . 따라서 GC는 여전히 우위에 있습니다.Windows는 클라이언트 컴퓨터에서 지배적 인 운영 체제입니다. Windows 응용 프로그램을위한 최상의 GUI 프레임 워크는 .NET Framework 와 함께 Winforms 및 WPF 입니다. .NET Framework 및 API 에서 작동하는 가장 좋은 프로그래밍 언어 는 C # 입니다. Java는 이에 대한 대안이 아닙니다. 그리고 C ++는 자동 메모리 관리 기능이없는 오래된 언어입니다. C #은 C ++과 비슷하지만 자동 메모리 관리 기능이 있으며 포인터로 작업 할 필요가 없으므로 생산성이 향상됩니다. C ++은 일부 경우에 여전히 최상의 옵션이 될 수 있지만 비즈니스에서 일반적으로 사용되는 양식 집약적 인 데이터베이스 애플리케이션에는 적합하지 않습니다.
Windows 환경 및 C #에서 작업하는 데 익숙한 경우 서버 프로그래밍을위한 IIS와 기본 관리를위한 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 ++ 을 선택하는 것이 좋습니다.
C #과 자바
다음과 같은 경우 C #은 매우 좋은 언어입니다.
언어로서의 C #은 다양한 방법으로 Java보다 우수합니다 (속성, 값 유형, 통합 제네릭 등의 구문이 더 우수합니다). 나는 C # 을 Java 보다 언어로 선호 하지만 웅장한 체계에서는 상당히 유사한 언어이며 유사한 응용 프로그램에 적합합니다.
반면에 Java는 다음과 같은 큰 장점이 있습니다.
따라서 Java vs. C #은 꽤 가까운 전화이며 Microsoft 캠프에 있거나 오픈 소스 / 크로스 플랫폼 캠프에 있는지 여부에 달려 있습니다.
개인적으로 다음과 같은 이유로 Java를 선호합니다.
C / C ++
C / C ++는 기본적으로 완전히 다른 짐승입니다. 나는 것 없는 다음과 같은 이유로 현재 범용 응용 프로그램 개발을위한 추천 :
그러나 특정 제한된 수의 특수 도메인, 특히 다음과 같은 경우에는 훌륭한 선택입니다.
따라서 기본적으로 C / C ++는 특히 적합한 도메인 중 하나에 중점을 둔 경우에만 훌륭한 선택입니다.
I heard that syntactically they are almost the same.
문법적으로? 누가 구문 원숭이에 대해 비행 원숭이를 제공합니까? 구문은 구문 적으로 유사한 언어에서 더 빠른 마이그레이션을 허용하는 한 가지 경우에만 좋습니다. 그게 다야.
C #은 Java보다 훨씬 낫습니다. 일반 및 기능적 프로그래밍 지원을 고려하십시오. C #은 Java보다 훨씬 앞서 있습니다. 연산자 오버로드와 다른 좋은 점은 말할 것도없고 C #이 훨씬 더 좋습니다. Java가 C #보다 나은 것으로 간주 될 수있는 방법은 없습니다.
C ++과 C #은 더 많은 경연 대회입니다. C ++은 매우 성가신 고집 컴파일 모델과 C 의 레거시 질병 을 가지고 있지만 템플릿은 제네릭보다 훨씬 강력하며 리소스 관리 접근 방식은 일반적 using
으로 전체 실패와 마찬가지로 훨씬 유연하고 강력 합니다. 빨리.
Well 과 위임자 C#
와 같은 멋진 기본 제공 기능이 있습니다 LINQ
. 그것은 두 세계에서 가장을 받고있다 - Java
와 C++
. 전체 비교를 위해 여기 를 보십시오 .
그러나 저는 Java
세상을 더 좋아합니다. 훨씬 더 많은 오픈 소스 프레임 워크이며 모든 플랫폼에서 실행됩니다. 그리고 말하지 마십시오 Mono
-신뢰할 수있는 옵션이 아닙니다.
일부 출처에 따르면 (예 : 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 #을 채택합니다. 기능이 풍부한 언어 일뿐 아니라 투자에도 도움이되기 때문입니다.
"프로그래밍 언어를 포함하는 소프트웨어 개발 프레임 워크"는 어떤가?
작업 할 "환경"과 같은 다른 항목을 포함하는 것을 잊었습니다.
Windows OS에서만 작동하지만 저수준이 아니고 많은 메모리와 기타 리소스가 필요하지 않습니까?
Windows에서 .NET을 프레임 워크로 선택하고 C #을 사용하십시오.
Windows에서만 작동하지만 저수준이 될 필요는 없지만 리소스가 많지 않습니까?
Delphi Framework (및 Object Pascal Delphi 프로그래밍 언어 또는 Lazarus Object Pascal 프로그래밍 언어)를 선택하십시오.
당신의 앱입니다. 다른 모바일에서 게임과 같은 여러 플랫폼을 지원해야합니까?
Java 프레임 워크 및 Java 프로그래밍 언어를 선택하십시오.
KDE를 그래픽 인터페이스로 사용하는 Linux입니까?
C ++로 QT 프레임 워크 선택
그래픽 인터페이스로 Gnome을 사용하는 Linux입니까?
C ++로 GObject / GLib 프레임 워크 선택
드라이버 개발과 같은 많은 저수준 작업을 수행 할 계획입니까?
Plain C 또는 C ++는 표준 라이브러리와 함께 여러 운영 체제에서 프레임 워크로 사용됩니다.
그냥 내 2 센트.
검색을 수행하면 최고의 프로그래밍 언어에 대한 토론을 할 수 있습니다. 다음은 검색 결과 중 하나입니다 -http ://www.tiobe.com/index.php/content/paperinfo/tpci/index.html-Java는 여전히 가장 인기있는 언어 인 것 같습니다.
Java는 C ++의 단점 중 일부를 제거하려고 시도했습니다 (비 실시간 및 중요하지 않은 응용 프로그램의 경우 프로그래머의 삶을 단순하게 만듭니다). C #은 파티의 후발 업체로 Java 언어의 단점을 피했습니다. C #은 많은 발전을 거쳤으며 (Microsoft가 많은 것을 제어 할 수 있기 때문에) 이해 관계자 간의 충돌로 인해 Java의 발전이 상당한 시간 동안 차단되었습니다.
아직 언급되지 않은 몇 가지 사항 :
C #은 C ++보다 낫습니다.
헤더 파일을 제거하여 매우 간단합니다.
C #은 Java보다 낫습니다.
참조 유형 (클래스) 및 값 유형 (struct) 사용자 정의 유형을 모두 지원하므로 수행중인 작업을 알고 있으면 상당한 성능 이점을 얻을 수 있습니다.
단일 메소드 인터페이스와 같은 델리게이트를 지원하므로 단일 메소드 오브젝트와 관련하여 자주 발생하는 구문의 코딩을 크게 단순화합니다.
예상되는 환경과 전문 지식에 가장 적합한 언어를 선택해야합니다.
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를 배우는 것이 좋습니다.이 두 가지 모두 현재 시장에 나와 있습니다.
C ++ vs C #과 관련하여 (자바에서 충분히 능숙하지 않기 때문에) 여기서 누락 된 것은 Windows에서 저수준 항목에 액세스하는 기능입니다. 예를 들어 C # (아직)으로 기본 디스플레이 드라이버를 개발할 수는 없지만 C ++로는 가능합니다. 이것은 C ++을 향상시키지 않습니다. C ++ 대 C #을 Assembly vs C로 봅니다.
실제로 기능을 구현하는 데 걸리는 시간을 보면 C #이 훨씬 효율적입니다. .Net 런타임의 성능 저하는 개발 된 애플리케이션의 99 %에서 무시할 수 있습니다. 꼭 타이트한 루프를 실행하는 경우에 중요하지만 응용 프로그램이 유휴 상태 인 경우 대부분 입력, 신호 또는 인터럽트 (디스크 IO, 버튼 클릭, 네트워크, 애니메이션 완료)를 기다리는 중입니다. .
모든 기능을 갖춘 CLR 라이브러리에는 또 다른 큰 이점이 있습니다. 내가 주니어 개발자들에게 C #을 훈련시킬 때, 대부분은 클래스, 멤버 및 네임 스페이스의 논리적 명명 규칙을 좋아한다고 말했다. 메소드의 기능을 찾는 것은 SDK에서 논리적으로 이루어졌으며 Visual Basic 5에 심각한 결함이있었습니다. 이것은 그들이 도서관을 채택하는데 엄청나게 도움이되었습니다. 언어의 구문을 배우고 나면 새로운 라이브러리를 배우는 것이 SDK를 잘 이해하는 데 중요합니다. 바퀴를 재발견하는 것을 막아줍니다.