C #에 Java보다 더 많은 기능이있는 이유는 무엇입니까? [닫은]


14

이것은 Java vs. C # 인수가 아닙니다. C # 경험이없는 Java 프로그래머이며 호기심을 묻습니다.

C #에서 약간의 독서를했는데 Java보다 훨씬 많은 기능이있는 것 같습니다. 많은 예 :

  • 타입 추론.
  • dynamic 예어.
  • 대의원.
  • 선택적 매개 변수.
  • 람다와 LINQ (실제로 이것이 무엇인지 전혀 모른다).
  • 속성.

그러나 Java에는 실제로 C #에없는 기능이 없습니다.

제 질문은 C #이 왜 Java보다 훨씬 더 많은 고유 기능을 가지고 있습니까? 그리고 왜 Java가 몇 년 동안 이러한 것들 중 일부를 추가하지 않았습니까 (예 : 속성 또는 유형 유추)? Java 언어 디자이너가 더 단순한 접근 방식을 취합니까? 그 이유는 무엇입니까?


2
@Patrick-기능입니까? 아니면 구현 세부 정보입니까?
Pete

14
편견 : C # 디자인 팀은 자신이하는 일을 알고 있기 때문에. 보다 합리적인 대답 : C #은 Java 실패에 대한 지식과 독단적 인 "단순한 OO"(아마도 적중하지 않음)없이 설계되었습니다. 이러한 기능의 절반은 Lisp와 Haskell에서 대량으로 가져 왔으며, Java 8까지 Java에서 영감을 얻지 못했던 두 언어는 Java가 없었기 때문에 맹목적으로 개선 된 위생 개선입니다.
Phoshi

4
C #이 나중에 와서 처음에는 Java의 뻔뻔스런 결과물이었고, 그에 따라 가치가있는 것으로 판명 된 모든 것을 추가 할 수 있었기 때문에 Java는 매우 엄격한 하위 호환성 목표로 인해 방해를 받았습니다.
Kilian Foth

2
@ Clockwork-Muse이지만 C #에는 CLR과 Mono의 두 가지 런타임 구현이 있습니다. 또한 Xamarin이 있습니다. Java를 사용하여 교차 iOS / Android / WinPhone 프로젝트를 빌드하는 단일 솔루션에 대해 들어 본 적이 없습니다.
Den

4
@KilianFoth : 사실, C #은 처음에 델파이 의 배트 인이었습니다 . Java처럼 보이도록 재작 성되었습니다. 마이크로 소프트는 델파이 프로젝트 아키텍트를 볼랜드에서 밀려 나서 그것을 만들었다.
메이슨 휠러

답변:


22

몇 가지 이유:

  1. C #은 자바보다 늦었다. 버전 1은 Java 1.4의 끔찍한 강탈이었습니다. 따라서 Java가 그 시점에 가지고 있던 모든 것을 거의 가지고있었습니다.
  2. 그러나 C #은 새롭고 흥미로운 플랫폼이기 때문에 Java보다 훨씬 빠르게 개발되었습니다 (그리고 Turbo Pascal의 아버지 인 Anders Hejlsberg에서 완전히 훌륭한 드라이버를 제공했습니다). 이를 통해 Java 실무자들이 원했던 모든 것을 추가하면서 분명해진 Java의 모든 실수를 피할 수있었습니다.
  3. 한편, 자바는 매우 엄격한 하위 호환성 목표와 다소 느린 개발 속도로 인해 방해를 받았다. 부분적으로는 천재가 아닌 95 %를위한 표준, 엔터프라이즈, 신뢰성, 비 확실성 솔루션이라는 명성을 얻기 위해 필사적으로 노력했기 때문이다. 프로그래머. 이것에서 그들은 성공했을 것입니다.

결과적으로 Java는 이제 약간의 기능 차이가 있습니다. 그것은 미래에 대한 거대한 계획을 가지고 있지만, 평소와 같이 이런 종류의 일은 모든 것이 계획보다 약간 오래 걸립니다.


7
나는 이것에 동의하지 않습니다. 나는 그것이 사실이라는 것을 의미하지만, 그 이유는 태양의 붕괴와 관련된 정치와 더 관련이 있다고 생각합니다. Java는 기본적으로 조직 / 리더십이없는 5 년 이상을 가졌으므로 새로운 기능은 없었습니다.
Telastyn

7
C # 1에는 값 유형이 있습니다. 자바가 결코 가질 수없는 것. 따라서 "폭발적인 파열"만이 아닙니다.
Den

1
@Telastyn-이것이 가장 중요한 이유라고 생각합니다. 특히 태양 붕괴의 끝에 "그리고 오라클에 의해 획득"을 추가 할 때.
Wyatt Barnett

7
@ Den에 동의하십시오. C #이 더 빠르게 (그리고 올바른 방향으로) 개발하는 가장 큰 이유는 Anders Hejlsberg의 리더십 때문이라고 생각합니다. 그와 그의 팀은 다른 언어에서 최고의 기능을 추가하고 C #에 완벽하게 통합 할 수있었습니다. 결과적으로 C #은 어수선하거나 지저분하지 않고 매우 깔끔한 언어 기능을 갖습니다.
David Kirkland

1
@WesleyWiser- "미래에있을 수 있음"으로 업그레이드되었습니다.
Den

4

Java와 C #의 큰 차이점 중 하나는 C # 디자이너가 언어뿐만 아니라 표준 IDE도 제어한다는 것입니다.

IDE가 올바르게 지원하지 않으면 확장 메소드 및 부분 클래스와 같은 것을 추가하면 개발 / 제어 버전 관리에서 악몽이 될 수 있습니다.

선택한 플랫폼 (Eclipse, Netbeans, vi + Ant)으로 Java를 컴파일 할 수있을 것으로 예상되므로 코드를 손상시키는 기능을 추가하고 (LINQ와 같은 추가 확장 기능을 개발하기 위해이를 사용하는) " IntelliSense가 이러한 경우를 처리하므로 걱정할 필요가 없습니다. "

또한 때로는 숫자 대신 기능의 가치를 주목할 가치가 있습니다. 예를 들어 자동 속성이 훌륭하고 Java가 이것을 지원하기를 바랍니다.하지만 결국에는 Java로 몇 줄 더 코드를 작성해야합니다. 마찬가지로 "이벤트"기능을 호출하는 것은 특수하게 레이블이 지정된 델리게이트에 지나지 않으며 Java에서 이미 사용한 옵저버 패턴의 세련된 사본이기 때문에 다소 잘못된 것으로 판명되었습니다. 코딩)

C #이 주목할만한 몇 가지 혁신적인 기술을 도입했다고 생각합니다. 언젠가 Oracle 빅 보스가 깨어나서 이들 중 일부를 포함하는 진정한 "Java 2"를 시작하기를 바랍니다.하지만 그 차이는 분명하지 않습니다. 질문 포인트.


2
간단한 속성 정의 (선언 + get / set + 공백)에 필요한 9 개의 줄은 "몇 개"이상으로 빠르게 합쳐집니다.
케빈 클라인

@kevincline하고 또한 제대로 문서화 모두 세터와 게터를. 그러나 결국, 접근자를 위해 IDE 자동 코드 생성을 사용하지 않더라도 비즈니스 로직, 테스트, 코드 디자인에 소요 된 시간을 고려할 때 눈에 띄는 시간을 사용하지 않습니다 (사실 나는 접근자를 입력 할 때조차도 이것에 대해 주로 생각하고 있습니다). 따라서 멋지지만, 결국 큰 차이를 만드는 것은 아닙니다.
SJuan76

3
그것들을 쓸 시간이 아닙니다. 당신이 흥미로운 부분으로가는 동안, 반복해서 읽고 무시할 시간입니다.
케빈 클라인

@kevincline 동의합니다. abiut 가독성과 코드가 깨끗합니다. 이것이 바로 내장형 관찰자 패턴 인 이벤트와 같은 것을 중요하게 생각하지만 직접 작성해야한다면 훨씬 깔끔하게 정리할 수 있습니다.
Aviv Cohn

@AvivCohn 문제는 "내장"이 핵심 부분입니다. 당신은 C에서 고차 기능을 가질 수 어셈블리에 동적 파견을 가질 수 있습니다, 당신이 할 수있는 모든 단일 언어 기능 입니다 조립 가능 - 분명, 어떤 점에서, 그것은 여전히 당신의 x86 CPU에서 실행하기 때문이다. 대리자가 있으므로 C #에서 명령 패턴을 구현할 필요가 거의 없습니다. 관찰자 및 이벤트 및 기타 여러 항목과 동일합니다. Java에는 한동안 익명 메소드가 있었지만 전체 익명 유형 을 작성해야했습니다 . 모든 것은 작지만 합산됩니다.
Luaan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.