고양국제고/앱 개발 동아리 (가칭)

(가칭) 앱 개발 동아리(3): 프로그래밍 언어와 C#

카루-R 2021. 8. 6. 15:49
반응형

환영합니다, Rolling Ress의 카루입니다.

01010010 01101111 01101100 01101100 01101001 01101110 01100111 00100000 01010010 01100101 01110011 01110011

이게 무슨 뜻일까요? 이진수로 'Rolling Ress'를 표현한 겁니다. 문자가 어떻게 숫자가 되냐고요? 컴퓨터는 모든 것을 0과 1로 표현합니다. 그렇기 때문에 문자도 숫자와 1:1로 대응시킬 수 있어요. 이걸 아스키 코드라고 부르는데, A가 65, a가 97인 식입니다. 이걸 2진수로 변환해주면 저렇게 나오는 거고요.

아무튼, 프로그램을 만들 때도 컴퓨터는 프로그램을 저렇게 해석합니다. 그렇다고 사람이 0과 1을 연타하고 있을 시간은 없죠. 이론상으로 가능은 한데, 너무 비효율적입니다. 그래서 기계어와 1:1로 대응되는 '프로그래밍 언어'가 개발되었죠. 이 프로그래밍 언어가 바로 "어셈블리어" 입니다. 근데 너무 어려워서 못써요. 저도 몰라요. 그러다가 발전을 거듭해서 B언어가 나오고, 이 다음이 그 유명한 C언어입니다.

종류가 이렇게 많아요. C, C++, Java, Haskell, C-Sharp등이 보이죠. 아무튼, 대부분의 메이저 프로그래밍 언어는 C언어의 문법을 기반으로 만들어졌습니다. 그래서 대부분 프로그래밍을 처음 배우는 분들께 C언어를 권하죠. 그런데 예외가 있습니다. 파이썬. 파이썬은 괴상한 문법을 사용합니다. 코딩 스타일을 강제해요. 대신, 강제적으로 통일되기 때문에 코딩 스타일이 달라 해석이 어려울 수 있는 문제점을 사전에 막을 수 있습니다. 코드가 짧아지는 단점도 있지요. 그래서 파이썬의 문법을 다시 가져가는 언어들도 많습니다. 특히 C#은 파이썬과 C언어의 문법이 적절히 섞인 형태입니다. (f-string => $-string, with -> using 등등...)

순서도를 배운 적이 있죠? 일반적으로 C언어로 프로그래밍을 하면 '절차적 프로그래밍'이라고 해서, 그렇게 순서대로 딱딱딱 실행됩니다. 그런데 C++, C#등은 객체지향 언어로서, 클래스로 객체를 만들고 각 객체가 상호작용하는 방식으로 프로그램이 전개됩니다. 지금 당장은 몰라도 됩니다. 일단 넘어가세요.

컴파일 언어, 인터프리터 언어라는 것도 있습니다. 이건 언어를 분류할 때 쓰는 방법인데, C/C++/C#/Java 등 대부분의 언어는 소소코드를 기계어로 번역해서 실행합니다. 이걸 세분화하면 C#/Java처럼 중간 언어로 컴파일하는 녀석들이 있죠. 중간 언어를 실행하기 위해서는 가상머신이 필요한데, OS에 미리 설치되어있기만 하면 됩니다. 중간 언어로 컴파일 되는 언어들의 특징으로는 가비지 컬렉션(GC)이 용이하다는 점, 그리고 크로스 플랫폼을 지원한다는 점이 있습니다. 와! 크로스 플랫폼, 드디어 나왔네요. 이게 바로 이 뜻이었습니다. C#에서는 .NET 5(구 .NET Core)라는 이름으로 모든 운영체제에서 코드 사용을 지원합니다.

인터프리터 언어는 한줄한줄 읽어나가는 방식을 뜻합니다. 파이썬이 가장 대표적이죠. 한줄한줄 읽어서 해석하므로 속도가 비교적 느린 편입니다.


이제 C#에 대해 조금 더 자세히 설명드리겠습니다. 우리가 윈도우를 타겟 플랫폼으로 선정했죠? 윈도우 앱을 개발하기로 마음먹었다면, .NET Framework를 알아야 합니다. 윈도우 개발용 플랫폼 중 하나입니다. 즉, 닷넷 프레임워크를 대상으로 개발을 하면 윈도우 앱을 만들 수 있다는 것이죠. 거창해보이지만 별 거 없습니다. 그냥 이름이고, 이걸 가장 잘 표현할 수 있는 언어가 C#이에요. C#은 마이크로소프트가 C/C++을 기반으로 .NET 전용 언어를 만든 겁니다. C#을 배운다는 것은 곧 .NET Framework를 배우는 겁니다.

아무튼, C#은 현재 9.0 버전까지 나와있으며, 난이도는 제 기준으로 쉬운 편입니다. (C++이 워낙...잡것들이 섞여있어서 난이도가...특히 SFINAE등등..) 다만 코드가 쓸데없이 길어지고, 강제사항이 많다는 것 정도가 단점이겠네요. 전역 변수나 함수를 선언할 수 없다는 것 정도.

중요한 건, C#만 안다고 해서 프로그램을 개발할 수 있는 것은 아닙니다. 디자인을 위한 도구가 따로 필요해요. 물론 Windows Forms를 사용하면 C#만으로 개발이 가능하긴 한데..아무튼, 윈도우 플랫폼을 타겟으로 개발하기 위해선 아래들 중 하나를 선택해야 합니다.

- Windows Forms

- WPF (Windows Presentation Foundation)

- UWP (Universal Windows Platform)

WPF와 UWP는 비슷한 점이 많으므로 우선 묶어서 설명하겠습니다.

Windows Forms는 제가 예전에 많이 이용했습니다. 간단하고, 직관적이고, 쉬워요. 그리고 디자인이 간편합니다. 따로 XAML을 배울 필요도 없고요. 모든 창은 Form을 기반으로 만들어지며, 픽셀 기반입니다. 창 크기를 조절할 경우 문제가 생길 수 있죠. WPF/UWP에 비해 상대적으로 꽤 구식입니다.

WPF는 Windows Presentation Foundation의 줄임말이며, UWP는 Universal Windows Platform의 줄임말입니다. 둘의 차이점은 메트로 및 스토어 지원인데, 이건 밑에서 얘기하죠. 아무튼, 두 언어 모두 XAML로 디자인을 하고 C# 등의 .NET 언어로 프로그래밍을 합니다. 장점은 디자인과 코드가 완전히 분리될 수 있다는 점이에요. 아직 코드 구현이 안 됐다면 디자인만 미리 해서 볼 수도 있습니다. 프로그래머와 디자이너가 따로 일하기도 편하죠. 단점은, 그걸 혼자서 다 하는 경우에는 XAML을 따로 익혀야 한다는 점입니다. 진입 난이도도 WinForms에 비해 높아요. 대신 그만큼 기능이 다양합니다. 훨씬 표현할 수 있는 것도 많고, 다양하게 디자인이 가능하죠. 성능도 단순 비교했을 때 WinForms보다 빠릅니다.

또한, 벡터 그래픽을 사용합니다. 창 크기를 조절해도 크게 깨지거나 하는 부분이 없어요.

WPF와 UWP를 비교했을 때는 조금 신경쓸 게 많습니다. WPF는 그냥 일반적인 프로그램으로 봤을 때, UWP는 마이크로소프트 스토어(구 윈도우 스토어)를 통해 받을 수 있는 앱을 뜻합니다. 특히 특유의 메트로 디자인이 특징이죠. 평면적입니다. 그런데 WinUI 2.6즈음부터 아이콘과 버튼들이 점점 입체적으로, 예쁘게 변하기는 했는데, 이 얘기는 다음 글에서 하죠. 아무튼, UWP는 윈도우 데스크탑, 윈도우 모바일, TV, Xbox등 모든 플랫폼에서 이용할 수 있는 것을 목표로 합니다. 이게 뭐죠? 네, 크로스 플랫폼을 지원한다는 뜻입니다. UWP 초기에는 마이크로소프트에서 UWP를 많이 밀어줬는데, 요즘엔 지원이 다소 약해졌어요. 그러나 윈도우 11이 나오고 WinUI 2.6 이상이 되면서 UWP의 디자인이 전체적으로 변화되고, 예뻐졌습니다. 멀리 갈 필요도 없이, 제가 2021년에 만들었던 GGHS Time Table을 보여드릴게요.

이건 기존 UWP 앱입니다. 버튼들이나, 콤보박스 (텍스트 선택 상자) 등을 잘 보바주세요.

이건 Windows 11에 맞추어 새롭게 변한 UWP 앱입니다. WinUI 2.6.1을 사용했고, 버튼이나 콤보박스들이 둥글둥글해진 모습을 볼 수 있죠. 참고로 저 둥글둥글하는 건 개발자가 직접 설정해야 합니다. 기존에는 그런 설정 옵션조차 없었다는 게 차이점이랄까요.

무엇이 되었든 간에, C#으로는 다양한 플랫폼을 타겟으로 앱 개발을 진행할 수 있습니다. 우리는 UWP를 선택할 겁니다. WPF 프로그램도 좋기는 한데, 배포가 문제예요. 우리가 서버를 구축하거나 사이트를 임대해서 앱을 배포하면 참 좋겠지만, 그럼 또 설치해주는 프로그램도 만들어야 하고. 일이 좀 많아집니다. UWP 앱을 만들면 마이크로소프트에 등록 신청만 하면 됩니다. 약 3시간 정도 걸려서 심사에 통과되면 마이크로소프트 스토어에 올라가게 되죠. 그럼 우리가 신경 쓸 건 없습니다. 크래시 분석, 앱 설치/제거, 이런 모든 것들은 마이크로소프트가 대신 관리해줍니다. 우린 앱 개발에만 신경쓰면 됩니다.

다음 글에서는 윈도우의 디자인 철학에 대해 알아보겠습니다.

반응형