[간단 책리뷰&플밍] C# 교과서 – 박용준



1. ‘C# 교과서’ 개요


[플밍] 경일게임IT아카데미 온라인 부트캠프 8개월 게임 개발자 과정 수료‘에서 교육을 받고 복습을 위해서 C#과 관련된 책을 읽는 시간을 가졌다. 기본기를 다시 챙기기 위한 시간이였다.

읽는 시간 집중력이 매번 떨어져서 읽기가 쉽지가 않았다. 읽는데 집중력이 떨어져서 7일 동안 조금씩 조금씩 읽어나가서 일단은 코드를 타이핑 하면서 익히지는 않았지만 70퍼센트까지는 진중하게 본 것 같다.

지금도 이 책의 리뷰를 어떻게 써야하는지 매우 고민이 된다. 매번 교육용 책을 읽을 때마다 생각하게 된다. 내가 이해하는데 실력이 부족한 것인가? 아니면 책이 그냥 이해하기 어렵거나 일반적으로 익히기 어렵게 구성되어 있는지 말이다.



책은 크게 3개의 큰 분류로 나눠져 있다. 실제로는 크게 4가지로 분류를 하긴 하지만 독자의 입장에서는 크게 3개로 분류가 된다고 본다. 왜냐하면 첫번째는 작업 환경을 설정하는 부분이기 때문이다.

그래도 1부라고 불리는 첫번째 분류를 간단히 설명하면 Visual Stdio에 관해서 설명하며 이와 관련된 작업 환경 설정이다. 간단히 출력문, 주석, 들여쓰기, 공백, 이스케이프 시퀀스, 자리 표시자에 관해서 설명한다.

2부에서부터 기본적인 문법이 전달되며 개인적으로는 3부까지는 배우기만 해도 프로그램을 만드는 것에 기초는 다질 수 있는 것으로 판단된다. 4부의 경우에는 깊은 내용 보다는 이러한 것들이 있다. 그러니 깊이 공부하고 싶다면 스스로 찾아서 공부해보자라는 느낌이 강하다.



책이 전반적으로 이러한 내용이 있고 기본적으로 이렇게 사용하고 쓸 수 있다를 전달한다. 게임 프로그래머를 준비하는 입장에서 책 자체에서는 뭔가 활용도와 그 목적성이 실제적으로 와 닫지 않는 문제가 있었다.

따라서 공부하는데 있어서 그래 이렇게 쓰는 것은 알겠는데 이걸 왜 쓰는거지? 이걸 쓰면 뭐가 좋고 작업이 어떻게 편해지구 구현에 어떻게 도움이 되는 걸까?를 알아가기는 쉽지 않다.

[플밍] 경일게임IT아카데미 온라인 부트캠프 8개월 게임 개발자 과정 수료‘를 통해서 용도를 받아들이지 않았다면 그 받아들임 정도가 더 좋지 않았을 것 같다. 내 기억에 최근에 다시 일주일 동안 책을 읽었지만 이전에 한번 전체를 읽었었다.


teacher asking a question to the class
Photo by Max Fischer on Pexels.com

읽으면서 느끼점은 이거 이전에 한번 읽은 기억이 있다와 교육을 받으면서 배웠던 내용을 책에서는 이렇게 풀어내는구나를 느낄 수 있었다. 본문에서는 각 부분을 조금 더 상세하게 나타내면서 독자인 필자가 느낀점을 좀 정리해보는 시간을 갖고자 한다.

2. ‘C# 교과서’ 본문


2부와 3부 내용이 독자로서 핵심이다!라고 생각은 들지만 책에서 어떤 것을 뺀다는 것은 쉽지 않는 일이다. 책을 읽어보면 많이 듣게 되는 것은 책의 범위를 벗어난다. 그리고 스스로 확인해서 공부하도록 하는 부분을 많이 읽게 될 것이다.

1부 C# 준비의 내용은 개요에서처럼 대부분의 독자들이 의욕이 만만한 상태에서 읽는 부분이라 지루함이 있어도 많은 분들이 완독을 했으리라 생각한다. C#이 무엇이고 그에 따른 배경과 관련된 사항과 사용하는 프로그램인 Visual Stdio의 설명 등이 주요한 내용이다.

개인적으로는 Computer Sicence 부분이 설명이 부족하기 때문에 일반적인 내용을 알고 있지 않다면 이해도가 떨어지지 않을까 생각이 든다. 그래도 하라는대로 해보면 일단은 된다는 느낌으로 진행이 가능하다.


blur business close up code
Photo by Pixabay on Pexels.com

단축키에 관한 설명 이제 뒷부분을 공부해서 다시 보면 보이는 내용들이 조금은 신선하다고 하겠다. 그리고 간간히 나오는 Visual Stdio 사용에 있는 팁들이 인상적이다. cw 입력 + Tap, Tap 을 누르면 Console.WriteLine()이 자동으로 작성된다는 것 등 최근에는 AI가 작성을 능동적으로 도와주는 편이지만 과거에는 좀 편리했던 기능들이 보인다.

이 정도로 앞에서 1부에서 주요한 내용은 반복하지만 개요에서 언급했다 싶이 출력문, 주석, 들여쓰기, 공백, 이스케이프 시퀀스, 자리 표시자의 이해라고 하겠다.



2부 C# 기초로 들어가면 많은 언어에서 설명하고 Computer Sicenec가 언급되는 내용이다. 변수, 연산자, 제어문(조건문, 반복문), 배열, 함수와 관련 된 내용이 설명 된다. 800페이지의 책에서 200페이지를 차지하지만 모든 프로그래밍 언어에서 빠지지 않는 핵심이라 생각한다.

변수의 형식 선언이 없는 언어도 있기는 하지만 변수 자체가 없는 언어는 없기 때문에 존재를 정의하는 변수는 매우 중요해 보인다. 또한 존재 만으로는 이야기가 되지 않기 떄문에 이후에 연산, 제어도 필수라 할 수 있다. 이후 변수를 용이하게 다룰 수 있는 배열 그리고 반복 작업을 줄여주는 함수 등

프로그래밍을 배우면서 반복적으로 읽게 되는 부분에 관해서 다시 한번 들여다 볼 수 있는 내용이다. 조금씩 다른 부분이 있기 떄문에 비슷한 점과 다른 점을 인지하는 것이 중요할 것이다.



3부 C#의 활용에서는 정말로 활용이다. 다만 C# 교육을 받았을때는 내용이 이렇게 난해하지 않았던 것 같은데 책에서 볼때는 매우 난해하다는 생각이 들었다. 아마도 교육에서는 게임이라는 요소가 함께해서 이렇게 사용하면 되겠구나라는 것을 느낄 수 있어서 받아 들이는게 오히려 쉬었던 것 같다.

닷넷 API를 첫 설명으로 클래스, 구조체, 열거형, 네임스페이스를 언급해 주는데 그와 더불어 nameof 연산자를 3부 첫 장에서 가르쳐주지만 교육에서 사용하는 용이성이 책에서는 화면으로 보여주면서 보는게 아니라서 와닫지 않는다는게 정말로 책이라는 것이 설명을 하기는 어렵구나라는 생각이 들었다.

이후로는 앞서 언급된 내용중에서 차례로 구조체, 열거형, 클래스를 다루고 클래스를 다루고 값작이 문자열을 다루며 예외 처리에 관해서 배우게 된다. 이후에는 컬렉션 사용하기 장인데 흔히들 자료구조에 관해서 배우게 되는데 솔직한 심정으로 C# 교과서이기 때문에 주요 내용을 언급은 하고가야 하기 때문인지 요소들이 과하게 많다고 생각이 들었다.



흔히들 자료구조를 선택할 이유를 활용에서 많이 고민해보고 고르는 기준이나 원칙에 관해서 알고 있는게 중요할 것처럼 보이지만 일단은 책에서는 어떤게 있는지 보여주고 어떻게 쓰는지 보여주는 매우 절제가 된 설명을 보여준다.

이후에는 바로 제네릭, 널(null), LINQ가 설명된다. LINQ가 많이 사용되기는 하지만 왜 들어갔는가 조금은 당혹스럽기는 하지만 화살표 연산자와 람다 식을 자연스럽게 보여주기 위해서인가 생각이 들었다. LINQ가 매우 유용한 API이기에 포함 것으로 보인다.

이후로는 기본적인 알고리즘과 절차 지향 프로그래밍에 관해서 알려준다.

이후에 다시 돌아오는 느낌으로 개체 만들기 다시금 5장만에 잊혀졌던 클래스를 불러온다. 앞선 제네릭, 널(null) LINQ 설명에 클래스가 빠진 것은 아니겠지만 왠지 클래스 설명이 쪼개져 있다는 느낌을 받았다.



이후에 네임스페이스, 필드, 생성자, 소멸자의 설명으로 진행이 되고 메서드와 매개변수, 속성 등으로 이어졌다. 지나친 생각인지는 모르겠으나 뭔가 교육에서 받았을 때와는 다르게 설명이 쪼개져 있다는 느낌을 받았다. 집필 전략상으로 반복 숙달이라는 목적이 있었는지는 모르겠지만 독자로서는 그렇게 느껴졌다.

그 다음에는 인덱서와 반복기를 설명해준다. 솔직한 심정으로 나로서는 아직까지 이해도가 떨어지고 어디에 사용할지 애매한 느낌을 받은 부분이였다. 쳇 GPT 선생에게 물어보기는 했지만 그도 답편이 쉬원하지는 않았다.

이후로는 대리자, 이벤트, 클래스 기타, 상속으로 클래스 확장하기 등으로 이어진다. 대리자와 이벤트를 이어서 설명한 것은 좋아보이는데 이벤트에 관한 설명이 조금은 부족해 보이고 대리자의 설명이 많지만 그 유용성은 작가가 언급했다 싶이 중간 단계인데 그게 이벤트보다 더 상세히 집중적으로 설명되어 있다는 것이 아이러니 했다.



이후로 나오는 클래스 기타는 이게 배운 사람들이 유용성을 느낄 수 있게 전달 될 수 있었는가? 하면 아닌 것 같다는 생각이 들었다. 이후로는 상속 클래스를 설명해주는데 게임을 예로 들었을 때보다 자동차를 가지고 설명을 하지만 그 와닫는게 확실히 달랐다.

두괄식 표현에 익숙해져서 그런가 책은 미괄식으로 되어 있어서 마지막에 개체와 개체 지향 프로그래밍으로 3불 마무리 짓는데 개체와 개체 지향 프로그래밍으로 흥미를 주고 관련 내용을 설명하는 것은 안되었을까 생각이 들었다.

솔직히 대리자, 이벤트 부분부터 읽는 속도가 늦어지고 읽기가 곤혹스러웠다. 내용이 복잡하고 이해하기 힘들어서 그랬을까? 애매한 것은 이미 배웠던 것이고 복습하는 것인데도 불구하고 이게 읽히지가 않는다는게 알수 없는 답답함이 느껴졌다.



그 만큼 세삼 느끼기로는 ‘[플밍] 경일게임IT아카데미 온라인 부트캠프 8개월 게임 개발자 과정 수료‘에서 가르치셨던 강사진 분들이 설명이 좋고 이해하기 싶게 가르쳐주신다는 것이다.

상속으로 클래스 확장하기 이후로 메서드 오버라이드, 인터페이스, 특성과 리플렉션 이후에 개체와 개체 지향 프로그래밍이다.

메서드 오버라이드 상속 이후에 배워야 하는 것이 맞으니 어쩔 수 없다고 생각이 들고 인터페이스도 상속 이후에 바로 나오지 않고 메서드 오버라이드를 언급하고 진행 했다는 것이 갸우뚱해지는 요소다.

심지어 상속을 설명할때 다중 상속을 언급하면서 인터페이스를 언급해주는데 말이다.



특성과 리플렉션의 경우에는 유니티를 사용하면서 사용하기는 했지만 사용자 지정 특성을 만드는 것은 좀 낯설게 느껴졌다. 앞서서 인덱서와 반복기와 같이 유니티를 사용하면서 시제로 건드리지 않은 부분이라 이해도와 받아들이는 것이 떨어진 부분이다.

3부 C#활용의 마지막으로 개체와 개체 지향 프로그래밍 마지막 부분이다. 이 부분을 통해서 일단은 책이 마무리 되었다(?)는 느낌을 받았고 이후에는 뭔가 곁드리는 느낌으로 받아들여졌다. 실제로는 그렇게 언급되어 있지는 않지만 말이다.



4부 C# 확장 기능이다. 제네릭 클래스 만들기, 확장 메서드 만들기, 동적 형식, 튜플, 클래스 라이브러리와 닷넷 스탠다드 등 곁가지라고 보는게 맞는 것 같으면서도 그래도 필요한 것 아닌가 싶은 것들이다.

제네릭 클래스 만들기는 교육 받으면서 이게 되네?!라는 느낌을 받았었는데 다시 보면서 좀 더 익숙해져야겠다는 생각이 들었다. 확장 메서드 만들기는 어뎁터 패턴이 생각나는 요소였는데 타입 변환이 없고 다향성에 참여하지 못하기 때문에 다르다고 한다. 어뎁터 패턴은 책에서 언급되지는 않았다.

동적 형식은 인터프리터 언어와 관련되어 있는 것인 아닌가 싶은 요소로 아마도 고정된 값을 받는게 아닌 것으로 보아 유연성이 느껴지는 부분이였다. 웹에서 사용이 용이할 것 같다는 의견을 책에서 보았는데 스트링이 만능 아닌가?! 싶기도 하고 나로서는 사용에 공감력이 떨어졌다.

튜플은 람다식을 사용하면서 이게 되네라고 느꼈던 것인데 여기서 좀 명확해진 것 같다.



클래스 라이브러리와 닷넷 스탠다드를 통해서 .DLL이 무엇인지 인해하는데 도움이 되었다. 생각보다 이 부분에 관해서 가르쳐주는게 많지 않다. 알면 넘어갈 수 있는 내용이여서 그런 것 같다.

테스트 프로젝트와 단위 테스트는 뭐가 난해한 내용이다. 용도도 솔직히 책에서 반복해서 언급해준 것과는 다르게 와 닫지 않았다.

NuGet 패키지는 이해하는 정도에서 넘어갔다. 파이썬을 사용할때 Cmd에서 판다스를 다운로드 받아 인스톨 했던 것이 생각이 났다.

스레드는 모의 면접을 준비하면서 들었던 내용이 생각나서 이해하는데 큰 문제는 없었다. 비동기 프로그래밍이 바로 이어서 나왔는데 비동기 프로그래밍의 어떻게 보면 수박 겉햝기라는 느낌을 받았다. 게임 개발에 있어서 비동기로 최적화를 시킬 수 있는 부분이 어디일까 고민하게 된다.



그 이후로는 맛보기 주제이다. 그리고 흔치 않은 함수와 함수형 프로그래밍 설명이 있다. 인메모리 데이터베이스, 스트림과 파일 입출력, XML과 JSON, 네트워크 프로그래밍이 소개된다. 인메모리 데이터베이스에서는 C#언어를 통해서 일반적으로 쿼리의 동작을 구현했다는 것으로 보인다. 이후 스트림과 파일 입출력으로 파일을 다루는 법을 간단하게 배운다.

이후에 XML, JSON 형식의 파일을 불러와서 가공 생성하는 것을 간단히 설명해준다. 이후에는 네트워크에서 데이터를 가져오는 것을 가볍게 설명했는데 맛보기 부분은 앞서 대리자, 이벤트 부분부터 떨어진 집중도 때문에 휙휙 넘겼다.

함수형 프로그래밍을 보면서 이게 가능한가? 라는 생각을 했고 굳이라는 생각이 들었으며 앞으로 쓸일이 없을 것이라 판단이 되었다. 그리고 제발 쓰는 상황이 오지 않았으면 좋겠다는 판단이 들었다.



모던 C#이 무엇인가 했는데 .NET을 통해서 C#에 최신 버전에 관한 내용의 설명이였다. 그 C#의 최선 패치나 변경 사항을 모던 C#이라고 언급하는 것이구나를 그때 이해하게 되었다.

이것으로 책의 내용은 마무리가 되었고 부록으로 디버거 사용하기, 팁과 트릭이 있다. 디버거 사용하기는 많은 이미지로 실습을 해주어서 이해하기는 보다 쉽게 되어 있다. 팁과 트릭은 그렇게 중요한 내용은 아닌것 같다.

3. ‘C# 교과서’ 마무리


책을 읽고 책을 가볍게 훑어 보면서 글을 작성했다. 책을 훑어보기 보다는 책 목록을 살펴보면서 책을 읽으면서 느꼈던 점을 좀 정리하는 시간을 가졌던 것 같다. 개인적인 리뷰로는 이 책으로 C# 공부를 시작한다면 읽다가 포기할 것 같다는 생각이다.

어느 정도 알고 있는 상태에서 책을 읽었는데도 불구하고 읽는데 곤혹스러운 부분이 있었다. 개인적인 생각으로는 응용과 관련 된 책을 읽으며 공부를 하다가 어느 정도 지식이 20~40% 정도 있을때 접근하는 것이 맞지 않을까 생각한다.

Unity로 게임을 만든다고 한다면 Unity 게임 프로그래밍 관련 책으로 먼저 시작을 하고 이후에 ‘C# 교과서’를 보면서 기본기를 다지는 방법으로 진행하는게 순서에 맞지 않을까 생각한다.



공부용 책을 읽으면 이 부분은 향후에 보아서 좀 더 익혀보아야지 해서 다시 읽는 부분이 있기 마련인데 읽고 나서 좀 쉬어야겠다는 생각이든 책이였다. 그래도 책의 양이 적지는 않기에 인상적이고 용이하다고 생각되는 부분이 없지는 않았다.

그럼에도 솔직히 전부 읽기 힘든 책이였다. 읽기 쉽고 이해가 잘되는 C# 관련 책이 있는지 확인이 필요해 보인다. 코드가 있어서 읽기 힘든 걸까? 모르는게 있으면 최근에 챗 GPT에게 물어보는데 참으로 공부함에 있어서 획기적인 것 같기는 하다.

할루시네이션을 조심해야 하겠지만 말이다. 프로그래밍의 공부 방법은 어쩔 수 없이 부딪히면서 과제를 풀어내면서 경험적으로 배울 수 밖에 없는 것인가 생각이 든다. 그나마 의견(?)을 들을 수 있는 챗 GPT의 등장으로 손도 못 쓰고 있었던 프로그래밍 공부에 조그만 빛이 보이는 것 같다.



결론적으로 ‘C# 교과서’의 책 리뷰는 내용이 쉽지 않다. 이겠다.

구독
통지
0 댓글들
가장 오래된
최신 최다 투표
인라인 피드백
모든 댓글 보기