C # 개발자로서 Android 용으로 개발하거나 대신 MonoDroid를 사용하기 위해 Java를 배우시겠습니까? [닫은]


46

나는 C #에 정통한 것으로 생각합니다. 지금은 제가 선택하는 언어이며 기본적으로 모든 전문적인 경험이 있습니다.

아직도, 나는 MonoDroid 프로젝트 의 존재에 의아해합니다 . 내 이해는 항상 C #과 Java가 매우 가깝다는 것입니다. 당신이 하나를 안다면, 다른 하나를 정말 빨리 배울 수 있습니다. 따라서 첫 번째 Android 앱 개발을 고려할 때 시작하기에 충분할 정도로 Java에 익숙해 졌다고 가정 한 다음에 제가 배우면서 배웁니다.

Java Android SDK보다 기능이 풍부하지 않고 Mono.roid를 사용하는 것보다 더 의미가 없으며 어쨌든 자체 API (.NET API이지만)를 학습해야합니까? 새로운 언어를 배우고 경험이 많은 기술을 고수하기보다는 이미 알고있는 것에 매우 근접한 경우에 경험을 쌓는 것이 좋습니다. 더 가치있는 기술을 습득하지 않고.

어쩌면 나는 평균 잠재적 MonoDroid 사용자를 잘못 표현하고 있습니다. Java 및 .NET에 경험이 있고 .NET을 선호하는 사람들에게는 더 많은 것일 수 있습니다. 또는 내가 방금 고려하지 않은 다른 요소가있을 수 있습니다 (사실 가능성이 있습니다). Java를 사용하여 Android를 개발하는 대신 MonoDroid를 사용하는 이유가 궁금합니다.


11
구글은 "새로운 코볼"이라는 구절과 구글이 어떤 언어를 사용하는지 보라.
John Reynolds

1
@JohnReynolds Ironic은 "새로운 코볼 (COBOL)"을 사용하여 현재 가장 빠른 성장이 모바일과 안드로이드 분야라는 점입니다. 어떤 방식으로 슬라이스하든 MonoDroid를 선택하더라도 Android 용으로 개발하는 경우 여전히 "새로운 COBOL"에 의존하고 있습니다.
Jason S

1
"새로운 COBOL"은 VM이 아닌 언어 (JVM 또는 Dalvik)를 나타냅니다. 따라서 MonoDroid는 "새로운 COBOL"에 의존하지 않으며 Scala와 Clojure 또는 다른 JVM 언어도 사용하지 않습니다.
존 레이놀즈

아직도 오래된 코볼이 방대합니다.
Alan B

@JohnReynolds 아이러니 한 것은 오늘날 실행되는 대부분의 코드가 COBOL이라는 것입니다. 그리고 가장 아이러니 한 것은 C #이 Java의 복제본이라는 사실입니다.
m3th0dman

답변:


55

유능한 C # 프로그래머라면 안드로이드 프로그램을 작성하기에 충분한 Java를 신속하게 선택할 수 있어야하지만 , 요점은 아닙니다 . 코드 재사용 문제입니다.

안드로이드 프로그램이 인기가 있고 사용자가 iPhone 및 Windows Phone 7 버전을 요구할 때부터 약 6 개월을 생각해보십시오. MonoDroid를 사용한 경우 대부분의 응용 프로그램 논리를 MonoTouch (Mono for iOS) 및 Windows Phone SDK. 이제 웹 기반 버전이 필요하므로 ASP.Net 프로젝트에 동일한 클래스 라이브러리를 포함시킵니다. 데스크톱 버전? 동일한 클래스 라이브러리는 Windows의 .Net 또는 Linux 및 OS X의 Mono에서 작동합니다.

C 또는 C ++ 이외의 모든 대상에서 동일한 코드를 재사용 할 수있는 다른 언어는 생각할 수 없습니다.

편집 코멘트에 몇 가지 문제를 해결하기 위해 : 닷넷과 모노 하지 않습니다 당신은 어디에서나 완벽한 프로그램을 사용 같은 프로그램을 작성 할 수 있습니다. 그것들은 일부 코드 를 공유 할 수있게하며 , 모든 크로스 플랫폼 프로그래밍과 마찬가지로 공유 코드의 양은 작성하는 프로그램의 유형과 UI와 하드웨어 코드를 애플리케이션 로직과 얼마나 잘 분리하는지에 따라 다릅니다.

그러나 Android 앱을 Java로 작성하면 iOS 또는 Windows Phone에서 얼마나 재사용 할 수 있습니까? 그것이 내가 만들려고하는 요점입니다. Java를 이미 알고 있었음에도 불구하고 Mono for Android에서 작동하는 기존의 C # 라이브러리를 다시 구현하는 데 걸리는 시간보다 훨씬 적은 시간이 걸렸습니다 . Mono 덕분에 웹 사이트, 데스크톱 프로그램 및 두 가지 모바일 플랫폼의 모바일 앱간에 공유-수정되지 않은 코드가 있습니다.

나는 모노가 모든 모바일 개발 상황에 완벽한 도구라는 것을 암시하는 것은 아닙니다. 그것은 절충이지만, Mono가 훨씬 더 나은 선택이 될 수 있다고 확신합니다.

다른 관점에 대한 Jason S의 답변을 참조하십시오.


12
그리고 Java는 "쓰기가 한 번 실행된다"는 슬로건을 가진 사람이라고 생각했습니다!
Luciano

3
@Luciano- OP가 C #을 배울 지 궁금해하는 Java를 알고 있다고 말한 경우에도 동일한 주장 적용될 있습니다. 중요한 것은 언어가 아니라 코드 재사용입니다.
ChrisF

14
같은 이유로 집에서 모노가 선택되었습니다. 여러 플랫폼과 모든 코더에서 새로운 C #으로 클라이언트를 구축해야했습니다. 이론적으로는 좋은 생각이었습니다. 그러나 실제로는 약간 악몽으로 변했습니다. 네이티브 .NET 플랫폼에서 작동하는 코드가 MacOS 플랫폼에서는 작동하지 않는 곳이 많으므로 예외를 만들어야했습니다. 동일한 코드가 LInux에서 작동하지 않았습니다. 전반적으로 모노는 너무 불안정 해 보였습니다. 결국, 우리는 아이디어를 버리고 대상 OS를위한 네이티브 코드 작성으로 돌아 가야했습니다.
Chu

4
여전히 재사용 가능한 유일한 코드 는 전화 하드웨어와 상호 작용하는 UI 코드 나 코드가 아닌 비즈니스 논리 입니다. 참조 나는 MonoTouch 또는 WindowsPhone과 7 응용 프로그램을 가지고, 난 그냥 안드로이드 및 대상 안드로이드 모노로 재 구축 할 수 있습니까? MonoDroid FAQ.
Jason S

2
@JasonS, 귀하의 의견을 반영하기 위해 답변을 업데이트했습니다. 기록상, Xamarin 및 Mono에 대한 유일한 참여는 만족스러운 사용자입니다.
Kevin

18

이것은 지금까지 답변에서 간과 된 것으로 보이는 한 가지 사실이 실제로 크로스 플랫폼에 관한 것이므로 일종의 보충 답변입니다. Xamarin 자체에 따르면 기본적으로 비즈니스 로직이며 UI 또는 GPS, 오디오, 주소록 등과 같은 하드웨어 컨트롤이 아닙니다 . 그것들은 각 플랫폼에 맞게 특별히 작성되어야합니다. FAQ 항목을 참조하십시오 . MonoTouch 또는 WindowsPhone 7 응용 프로그램이 있습니다. Mono for Android로 다시 빌드하고 Android를 대상으로 할 수 있습니까? .

Mono를 사용하면 C #을 사용하여 UI 및 전화 제어 코드를 작성할 수 있지만 어떤 플랫폼에서도 이식성이 없습니다. C #으로 작성할 수는 있지만 각 플랫폼에 대한 UI 및 전화 제어를 작성해야합니다. 어느 쪽이든, 여전히 Android의 UI 컨트롤의 특성과 Android가 전화 리소스를 처리하는 방법을 배워야합니다.

Mono를 사용하면 Android API를 호출하는 Mono API를 배워야합니다. 또한 새로운 Android 기능을 구현하기 위해 Mono를 기다려야하며 모든 Android 기능을 구현하기를 바랍니다. C #이 Java보다 강력하더라도 Java에서 Android SDK를 직접 사용하는 것보다 더 많은 기능을 수행 할 수 없습니다.

C #에서 Android로 바로가는 경우 C #은 구문 상 Java와 매우 유사하므로 대부분의 C # 개발자의 Android 학습은 Android API를 학습합니다.

몇 가지 고려 사항 ...

안드로이드 C #

배울 필요가있다

  • 안드로이드 API
  • Java API : 문자열, 캘린더 및 이벤트 처리 등

배울 필요가 없습니다

  • Java 구문 : C #은 매우 유사한 구문입니다.

다른 고려 사항

  • 여러 플랫폼에서 코드를 재사용 할 수 없습니다.
  • 귀하와 Android SDK 간에는 종속성이 없습니다. 새로운 Android 기능이 출시 될 때 제공됩니다.
  • 모노보다 안드로이드 코드에 대한 지원과 예제가 더 많을 것입니다.

C #에서 모노로

배울 필요가있다

  • Android : 여전히 Android UI 및 하드웨어 제어 기능을 배워야합니다.
  • 모노 API : 안드로이드의 UI 및 하드웨어로 작업하기 위해 모노 API를 호출하는 방법을 배워야합니다.

배울 필요가 없습니다

  • Java API 및 구문 : C #에서 개발할 수 있습니다

다른 고려 사항

  • 코드 재사용 : UI 또는 하드웨어 제어 코드가없고 순수한 "비즈니스 로직"인 C # 코드를 재사용 할 수 있습니다. 이상적이지만 깨끗하게 분리하는 것이 항상 쉬운 것은 아닙니다. UI 또는 하드웨어 제어가없는 코드의 양을 평가해야합니다.
  • 종속성 : Android API를 구현하는 Mono에 의존합니다. Android API 릴리스에서 약간의 지연이 있거나 일부 Android 기능이 구현되지 않을 수 있습니다.
  • 선택할 수있는 문서 및 예제가 적을 수 있습니다.

P / Invoke를 언급하지 않았습니다. 샘플.
Amir Karimi

-1 : 무슨 뜻 Learn the Mono API입니까? Android 앱을 개발하기 위해 실제로 얼마나 알아야합니까? 그리고 실제로 MonoDroid를 사용해 보셨습니까?
Jim G.

@JimG. 하여 Learn the Mono API, 나는 여전히 모노 복제, 부분뿐만 아니라 그렇지 않은 것을 안드로이드 API를 배울 필요가 있음을 의미한다. 얼마나 알아야합니까? 앱에 따라, 사람에 따라 다릅니다. 실제로 OP의 요지는 아니 었습니다. MonoDroid를 사용 했습니까? 아니요. C #, Java 및 Objective C 경험이 있으므로 필요하지 않습니다. 이식성을 위해 Mono를 고려했습니다. 내가 대답했을 때 아무도 이식성의 한계를 언급하지 않았다. 나는 사람들이 나와 동의하지 않는 것을 신경 쓰지 않지만 그 자체로는 내 대답이 나쁘지 않습니다.
Jason S

13

가능한 많은 리소스와 관련이 있다고 생각합니다.

C #과 Java 의 구문 은 비슷할 수 있지만 매우 다른 것을 제공합니다. 예를 들어 표준 Java 라이브러리를 사용하여 날짜를 다루는 것은 악몽이지만 C #에서는 매우 즐겁습니다.


2
흥미 롭기 때문에 .NET 라이브러리에 액세스하는 것이 더 매력적입니다. .NET이 Android와 관련하여 Java Android API로는 달성하기 어려운 많은 편리한 기능을 제공하는지 알고 있습니까?
Dan Tao

19
하나는 - C #을에서오고, 나는 ... 자바가 될 ... 최상의 특이한 찾을
오디드

4
C #과 Java의 유사성은 서로 전환 할 때 유리하지 않다는 것을 알았습니다. 깜박임없이 C #과 Python, Ruby 또는 Lua 사이를 전환 할 수 있지만 마지막으로 Java 코딩을 시도했을 때 치아를 연삭하고 바퀴를 돌 렸습니다.
Adam Crossland

1
@ Dan Tao : 표준 .Net에 대한 접근이 더 이상 중요 하지 않습니다 . 그것은 그와 재사용에 관한 것입니다. 재사용의 이점은 분명해야합니다. .Net에 대한 액세스는 이와 같이 봅니다. 예를 들어 XDocument 1000을 1 번 사용했습니다. 서비스의 XML 데이터를 통합하는 모바일 앱을 작성해야한다면 생각의 속도로 작성합니다. Java를 배우고 있다면 코딩 문서와 읽기 문서 사이에서 앞뒤로 튀는 데 4 ~ 8 배가 걸릴 수 있습니다 (또는 아는 사람은 10 또는 12 명). 업무용으로 사용되는 경우 언어를 배우면서 프로젝트를 수행하는 것은 책임이 없습니다.
quentin-starin

9

새로운 언어를 배울 수있는 좋은 기회 인 것 같습니다 .

C #에서 Java로 전환하는 것은 동일한 개념을 기반으로하는 바람입니다. Java는 C #의 하위 집합과 같으므로 속성 및 어셈블리와 같은 일부 내용을 익히고 새로운 규칙에 익숙해 져야하지만 대부분은 쉬운 일이 아닙니다.


10
그리고 각각의 제네릭이 어떻게 작동하는지, 그리고 속성이 존재하지 않는 이유와 이벤트 및 이벤트 사이의 차이점을 알아보십시오.
Oded

5
사소한 차이. 그가 하스켈을 배우는 것과는 다릅니다.
Martin Wickman

1
+1 몇 가지 다른 언어를 알고 실제 프로젝트를 진행하는 데 아무런 해를 끼치 지 않는 것은 이미 알고있는 언어와 비슷한 종류의 언어를 사용하는 경우 좋은 방법입니다.
glenatron

지불하는 사람이 학습 경험에 대해 지불하는 것이 좋습니다.
quentin-starin

1
@qes-중복되는 것을 배우는 것은 대부분의 경우 비용을 정당화하기에 충분하지 않지만 기본 환경에서 복잡한 앱의 개발은 대부분 매끄럽게 진행되어 학습이 더 많이 이루어질 수 있습니다. 장기적인 비용 절감.
Morgan Herlocker

3

빠른 히스토리 레슨-MonoDroid는 MonoTouch에서 자랐습니다. 당시에는 많은 의미가있었습니다. 불행히도 Novell은 팔리고 전체 Mono 팀이 해고되었습니다. 좋은 소식은 Miguel de Icaza가 자금을 확보하고 MonoTouch / MonoDroid를 재구성하기위한 새로운 복장을 시작했다는 것입니다. 그들이 실제로 발사 될 때까지 당신은 일종의 림보입니다.

2011 년 7 월 업데이트 : Miguel의 의상이 전체 Mono * 스택에 대한 권한을 되찾았습니다. 흐트러진 상태에서 가져옵니다.


잘 들었습니다 (2011 년 7 월 업데이트). 나는 전에 Mono를 사용해 보았고 조금 실망했습니다. 다시 시도하겠습니다!
Brian Knoblauch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.