[HOW-TO-C#]JavaToC#

Wang_Seok_Hyeon·2023년 10월 29일
0
post-thumbnail

Intro

나는 자바 웹/앱 개발자로 6개월의 부트캠프 과정을 거치고
공부를 마치고 취업 전선에 뛰어들었다. 취업 전선은 쉽지 않았고,
지금도 쉽지 않아 보인다.

그리고 나는 지금 고향 부근의 전장개발 임베디드 회사에서 C/C# 임베디드 개발자로 커리어를 시작했다. 자바|웹/앱 이 아니지만 내가 생각했던 최초의 목표인 개발의 영역으로 시작했으며 이를 통해 원하는 서비스를 개발하고, 개발 생태계에 기여하는 개발자가 되겠다는 것이 근본적인 학습의 목표였던 만큼 이를 달성하기 위한 여정이 앞으로 내가 해야 할 역할일 것이다.

나는 현재에도 CS스터디/알고리즘 스터디를 이어가며 학습의 방향성이 정해지지 않은 열심히를 실천하고 있지만 문제의식을 가지고 있다. 방향성 이것의 부재가 그 문제의식의 중점에 있다.

방향성이 없다는 것은 분명 또 하나의 장점이다. 여러가지를 넓게 살펴 보고 두루 볼 수 있는 넓은 시야를 가질 수 있기 때문이다. 하지만 그에 따라 깊이와 정확성 그리고 전문성의 부재가 뒤따른다.

이러한 문제를 알고 있고 이를 보완할 방법이 막연하게 떠오르지 않는 상태지만 나는 살아남아야 하고 나의 커리어를 쌓아 올려야 한다. 부족함 없는 개발자로 커리어를 쌓을 수 있는 방법 역시 개발자에게는 너무나 중요한 일이기 때문이다.

이에 따라 Java 언어에서 C#언어를 공부하며 정리해 가는 시간이 필요하다는 생각이 우선적으로 들었다. 돌아가는 것처럼 보일지라도 이러한 기초가 탄탄해야 무엇이든 할 수 있기 때문이다.

최초 C#을 하기 전에 C#에 대한 이미지와 차이점 그리고 어떻게 정리해 갈지의 가이드라인을 정해 보았다.

C#과 Java

C#에 대한 최초의 생각은 이랬다.
아 그거? 그냥 Microsoft에서 만든 Java 니까 Java를 나는 쓸 줄 아니까.
그냥 순식간에 쓸 수 있을꺼야!

하지만 현실은 달랐다.

My Boss : GUI 개발을 해주세요!
나의 내면 : ??? (GUI가 CLI를 말씀하시는 건가 <- 정말 이런 생각을 했습니다.)
그리고 Form에 들어있는 수많은 Initialized와 using 키워드 namespace는 또 뭐야??

이때 부터 생각했지만 비슷하다는 다르다와 동의어라는 걸 확실히 알았습니다.
제가 코틀린을 공부할 때도 Java를 발전시킨 언어다라는 말을 들으면서 공부를 하면서 앨비스 연산자라던지 when 문법이라던지를 공부하며 우와 이런 신기한게 많다니 신기하다! 이런 느낌을 받았는데,

C#은 라이브러리의 함수 호출에서 철저하게 카멜 원칙을 지키고 있고 시작을 대문자로 하는 원칙이 잘 지켜져 있어서 이 부분을 인지하는데에도 벌써 2주 그 정도의 시간이 걸렸던 것 같습니다.

지금 와서 느끼는 건 C#의 경우도 물론, 사용하는 것만 사용하겠지만 정말 다양한 변수들이 있고 var 이외에도 dynamic이라는 data type이 run time에 결정되어서 동적으로 data type을 바꿀 수 있는 data type도 있다.

이런 격변의 차이도 느끼고 특히나 현재도 완벽하지는 않지만
GUI 개발에서 도구상자를 아직 원활하게 사용하지 못해 어려움을 느끼고 익히고 있다. 그렇지만 새로운 것을 배우는 즐거움을 느낀다.

이게 개발자인가...하는 개발자 병이 생기는 것도 느끼지만, 더 많은 것들을 할 수 있는 가능성이 생기는 것 같다.

C#의 .NET Framework

C#을 사용하게 되면 필수적으로 만나고 나만 그랬을지 모르겠지만 ?를 가장 먼저 하는게 단연 이 .NET이지 않을까 생각한다.

우선 제목에도 붙였지만 Framework이라고 적어두었듯
Java로 따지면 SpringBoot에 해당한다.

처음에 SpringBoot를 배울 때 정말 쉽다. 이런 말을 들으며,
입문했지만 정말 어려웠던 경험이 있었고 여전히 대단히 넓고 엄청난 세계라고 생각하는데 또 새로운 Framework이라는 생각에 조금 떨리는 감정을 느끼지만...

여기서 기술적인 코드와 구조적인 것들을 비교하거나 도면을 가지고 와서 상술하지는 않을 것이다.(정확히는 내가 아직 못한다.)

다만, 여기서 조금 짚고 넘어갈 만한 재밌는 사실도 있고 23-10-29일 기준으로 2주 전에 읽었던 재밌는 기사가 있어 같이 공유하며 C#의 위상의 변화와 앞으로의 변화 등에 대해서 보고자 한다.

https://zdnet.co.kr/view/?no=20231017101736

해당 기사 내용을 간단히 말하면 Java의 인기가 떨어지고 C#의 인기가 상승하고 있다는 내용인데,

그 주요 원인은 주요 언어 개발사의 정책 변화를 꼽고 있는데 Java의 경우 오픈소스로 시작했고 오픈소스로 계속 유지한다는 조건으로 제임스 고슬링이 오라클에 인수합병 된 마이크로선시스템즈의 언어다.

그에 반해 C#은 윈도우즈라는 유료 OS를 판매하는 Microsoft에서 Java에 많은 영향을 받아 만들어진 OOP 언어였다. 유료는 아니었지만 이 회사가 어느 날 갑자기 어떻게 유료화 할지 알 수 없기 때문에 대한민국은 오픈소스이고 커뮤니티가 많은 Java를 정부 주도 하에 전자정부 프레임워크라는 이름의 Spring 설정들 몇 가지를 모아 만든 개발 기반을 다지고 그렇게 무료라는 이름을 강력히 내세운 Java민국이 되었지만

Oracle은 버전 업과 JDK의 특정 버전에 유료화를 도입하며 이러한 무료화는 이미 틀이 깨지게 되었다.

반면 닷넷(.NET)Framework를 사용하는 C#의 .NET 5.0, 6.0은 오픈소스로 대중에게 공개되었고 이에 따라 더 많은 개발자들이 손쉽게 이를 사용할 수 있게 되었다.

물론 대한민국은 여전히 무료인 Java8, Java11, 진짜 많이 쓰면 Java17을 사용하고 있지만 결과적으로 해당 버전들이 지속적인 업데이트와 지원을 받을 수 없는 리스크를 감수해야 할 우려가 생기고 이는 기업으로써 달갑지 않은 요소일 것이다.

즉 한국은 결과적으로 새로운 생태계를 찾아야 하며, 이에 대해서는 C#은 아닐지라도(사실 Python이 너무나 강력하기에)
필연적으로 오게 되는 선택의 순간이 오고 있다.

대한민국도 프로그래밍에 있어서 언어를 단순한 도구로 인식하고 더 다양하고 많은 개발자들의 세계가 열리고 이에 대해서 다양하게 커뮤니케이션이 발생할 수 있는 개발 환경이 펼쳐지지 않을까 하는 기대에서 조금 글을 써 보았다.

C#를 공부해 보자!

그렇다면 이제 본격적으로 어떻게 C#을 공부해 볼지 기입하도록 하겠다.
우선, 내가 기획하는 C# 스터디는 기본적으로 C# 설치와 같은 것은 건너 뛸 것이다. 필요하다면 아래의 영상을 참고하자.

https://www.youtube.com/watch?v=tUwuWdnasV0

나는 윤성우의 열혈 Java라는 책으로 Java를 제대로 학습할 수 있었다. 이를 통해 현재에는 C# 책을 약 2권 학습했고,
또 이를 정리하며 C#의 전체적이고 개괄적이 내용 그리고 Java와의 차이에 대해서 기입하며 앞으로 C#을 이야기할 것이다.

또한 Spring 또는 Springboot의 개념을 기반으로 차이가 나는 부분을 이야기할 것이며 최근에는 Unity를 이용한 개발에 대한 부분도 학습을 하고 있기 때문에 이러한 부분으로 GUI 부분의 강점 차이 등에 대해서 기술할 수 있도록 노력해 보겠다.(노력해 보겠다...가 포인트)

C#의 강의도 들어보고 책도 보며 느낀 바는 굉장히 좋은 언어라는 것이다. 여기서 좋은 언어라는 것은 많은 기능을 담고 있다는 뜻이고 이 말은 다르게 말하면 또한 복잡하다라는 말과 동의어가 된다. 하지만 이러한 복잡성이 처음에는 진입장벽이 될 수 있다.

foreach 구문에서만 봐도 foreach(int a in arr) 이러한 방식으로 사용이 된다.(사실 이건 Kotlin이랑 비슷해 보이는 측면이 있다. 실제로 코틀린에서도 상속을 받을 때 ':'를 사용하는데 C#도 이를 사용한다. modernLanguage로서의 심플함을 많이 담고 있는 셈이다. 뭐 물론, 근본 언의 마침표인 ;을 버리지 못했지만,...

언어를 다양하게 사용할 줄 알게 된다는 것은 그 차이를 정확히 인식하고 빠르게 변환할 줄 안다는 것을 의미할 것이다. 또한 각각의 차이를 인식하며 분류를 정확히 해 낸다면 또 다른 언어를 새롭게 정리하는 카테고리 분류를 더 잘하게 될 것이다.
가령, Python이라던지? 개인적으로 캐릭터가 귀여워서 선호하는 Golang이라던지, App개발에 강점을 가지고 있는 Kotlin이라던지 정말 많은 좋은 언어들이 있고 이러한 언어들을 다양하게 필요에 맞게 쓰고 싶은게 나의 개발자로써 지금 성장하고 싶은 방향성이라고 할 수 있겠다.

이를 통해 .NET과 Springboot에 대한 이해를 깊이 있게 하고 더 좋은 개발자가 될 수 있기를 희망한다. 추가적으로 Python의 Flask와 Django까지도 잘 쓸 수 있기를 바라며 오늘의 글을 마친다.

profile
하루 하루 즐겁게

0개의 댓글