안녕하세요 자바 신입 개발자입니다.
전공이 컴퓨터공학이라 자연스럽게 자바 쪽으로 공부를 하고 취업을 하게 됐습니다.
일을 하다 보니 게임 개발이나 C# 쪽으로 관심이 생겨 그 쪽 분야로 이직을 하고 싶은데 자바에서 C#으로 진로를 변경하는게 괜찮을까요? 사람을 구하는 곳도 많지 않다고 하기도 해서 먼저 일하고 계신 분들에게 의견을 듣고 싶어 여쭙니다.
전공이 컴공이라 C, C++에 대한 기초 지식은 있지만 C# 쪽은 공부를 해본 적이 없어서 짧으면 3개월에서 길게는 6개월까지 기간을 잡고 공부해서 취업해보려 합니다.
자바 일자리 잡았으면 일단 계속 하시는 거 추천합니다.
일단 여기 C#은 닷넷프레임워크라 업계상황이 도움이 안될거예요. 게임은 전혀 달라서요.
닷넷이나 유니티나 C#은 같지만(버전차이, 제약은 있지만요) 게임은 다른 개발과 많이 다릅니다. 게임개발 자체도 분야(2D, 장르, 클라/서버, UI, 그래픽디자인등)가 많아서 각각 다르긴하지만 경력 몇년 있어도 닷넷개발자 및 웹개발자와 유니티개발자는 서로 호환이 안될겁니다.
유니티개발한다고 닷넷/웹/앱개발자로 성장할 수 없으며 반대도 마찬가지입니다.
자바/닷넷은 프레임워크 단에서 고도화되어 준비된게 많아 도메인지식과 API만 알아도 되지만 유니티는 준비된게 별로 없습니다.
직접 다 만들어야하는데 직접 다 만들어야한다든 수준이 다른필드에서 당연하게 있는 것들이 없기때문에 매우 기초적인 기능을 매순간 하나하나 설계고민해가면서 이렇게 하는게 맞나? 하면서 만들게 됩니다.
예를들어 UI의 ListView나 MVVM 같은거 쓸때 라이브러리에서 준비된 델리게이트/이벤트 콜백 핸들러 이런것들만 찾아서 쓰면되지만 유니티에서는 그 시스템 자체를 직접 구현해야합니다. 스크롤 성능을 위해 가상화/재사용뷰가 필요하면 스크롤뷰 하나하나 화면높이 계산해서 이벤트도 직접 만들어주고 그래야되요. MS가 프레임워크 만드는 일 일부를 직접한다고 보면 됩니다.
업계는 또 보안에 민감해서 지식공유가 잘 되지 않습니다. 다른 필드에서는 고민자체를 할 필요가 없는 것들을 직접고민해서 만들어야할일이 많아요. 그러다보니 스스로 생각해봐야하고 이런 설계/알고리즘이 맞나?하는 고민을 매순간해야되는데 코딩경험이 적을수록 더 오리무중이겠죠.
닷넷프레임워크 같은걸 직접뜯어보고 이해해본 경험이 있으면 도움이 되긴하지만 그것도 일부만 겹칠 뿐입니다.
어찌보면 설계상 더 저급수준에서 논리적으로 프로그래밍을 하기때문에 더 원초적이라 재미있기도 합니다만 타이어를 재발명한다는게, 해야 할 일이 너무 많다보니 지칩니다.
물론 코딩분야 유료에셋 도움도 받을 수 있지만 3자 라이브러리는 오픈소스같은 경향이 큽니다. 비인기 에셋은 돈내고도 업뎃대응도 잘 못받고 그러다보니 직접만드는게 속편합니다.
참고로 Unity가 사용하는 Mono 기술 자체에 큰 변화가 있었기 때문에, .NET 영역의 기술 지형에 대한 정보를 언급하고 넘어갈 필요가 있어 댓글을 남깁니다.
지난 2024년 9월 17일부로, WineHQ 재단이 Mono 프로젝트에 대한 소유권을 이전받았고, 원본 Mono 프로젝트의 개발은 중단되었으며, Microsoft의 .NET Core 런타임에 기술이 병합된 상태입니다.
물론 WineHQ 재단의 Mono 런타임은 계속 업데이트가 이루어지고 있습니다. 그러나 개발 방향성이 기존과는 다르며, 개발자를 위한 추가 기능 개발이 중심이 아닌 Wine 프로젝트가 추구하는 Windows 애플리케이션의 크로스플랫폼 실행 전략에 방점을 두는 개발이 진행되므로 원본 프로젝트의 성격과는 많이 다릅니다.
Unity는 Mono 프로젝트 원본을 fork하여 본인들의 자체적인 .NET 런타임 개발을 지속하고 있습니다. 그래서 원본 Mono 프로젝트, WineHQ의 Mono 프로젝트와는 분리된 Mono 런타임 코드로 제품에 기능을 탑재하고 있습니다.
따라서 Unity에서 사용할 수 있는 C#과 Mono 런타임은 .NET과 호환성이 있는 기술이지만, 원본 .NET 기술과는 다를 수 있습니다. 이 간격을 채우는 것이 .NET 표준 (.NET Standard)이며, Unity는 .NET Standard 2.0의 규약을 준수합니다. 이는 .NET Core 2.x 버전대와 .NET Framework 4.6.x 버전대와 통용되는 표준 규약입니다.
이런 맥락에서, Unity의 C#과 .NET 런타임 지원은 최선의 노력 (Best Effort)으로 보는 것이 타당합니다. 그래서 실제 .NET 기술과는 차이가 있을 수 있음을 이해하셔야 합니다.
아울러 Unity 개발에 관련된 내용은 닷넷데브보다는 다른 Unity 개발자 커뮤니티나 게임 개발자 커뮤니티를 찾아보시는 것을 추천드립니다.
다만 최신 버전의 Unity를 써야 한다는 전제 조건이 따라 붙기 때문에, 최신 버전의 Unity로 빠르게 업데이트를 하지 못하는 상황에 해당하는 경우에는 여전히 fork 버전의 Mono와 IL2CPP를 기반으로 Unity 애플리케이션 개발을 시도할 가능성이 매우 높다고 생각이 되어 저는 보수적인 입장으로 이야기하게 되는 것 같습니다.