- My Reviews & etc

김진철
- 작성일
- 2023.5.30
이것이 C#이다
- 글쓴이
- 박상현 저
한빛미디어
이제 씨샵은 MS가 개발한 가장 강력한 객체지향 프로그래밍 툴로서, 대중적 기반까지 확고히 갖췄다고 해도 과언이 아닙니다. 초기 윈도는 자바가 기본으로 깔려 있었으나 이후 썬 측과 소송이 벌어지고, 윈도 유저들은 썬 홈페이지를 주기적으로 방문해서 업데이트를 실시하거나 새 버전 인스톨러를 수동으로 깔기도 했습니다. 물론 이건 좀 깔끔떠는 사용자들 이야기고, 자동 업데이트 옵션도 가능했었습니다(대부분이 이렇게 썼을 듯). 21세기 들어 MS는 닷넷 프레임워크를 더욱 강화했고 닷넷과 찰떡궁합인 씨샵의 중요성도 그에 비례하여 커졌죠. 닷넷도 그 초기에는 블루스크린 오류 등 트러블을 많이 일으켰으나 지금은 그런 일이 좀처럼 없습니다.
저자 박상현 선생님의 교재는 기본 원리에 충실하다는 게 제가 공부할 때마다 느끼는 점입니다. 입문서라고 해도, 그저 쉽게만 쓰인 책보다는, 나중의 심화 확장을 위해 기본 원칙들에 충실하게 쓰인 책이 학습자들에게 훨씬 유익합니다. 물론 이 책은 (심지어) 쉽게 쓰이기까지 했습니다. 박상현 선생님의 다른 책으로는 <이것이 자료구조+알고리즘이다 with C 언어>가 있는데 요즘 자료구조 공부하는 분들이 많고 저도 친구들 따라 잠시 기웃거려 봤는데 당시에(또 그 후에도) 많은 도움이 되었더랬습니다. 저자가 본래 C 달인이시기도 하고, 학습자 입장에서 설령 복습을 게을리하여 디테일은 좀 까먹는다고 해도 펀더멘털만큼은 휘발 안 되고 머리 안에 오래 남는 것 같았습니다. 이런 게 진짜 공부고, 이게 나중에 진짜 실력이 됩니다.
폰트도 큰 편이 아닌데 면수가 848이나 됩니다. 입문서치고 부담스러운 분량이라는 사람도 있는데 그렇지 않습니다. 처음에 조금 고생하고 나중에 편해질 생각을 해야 합니다. 프로그래밍 공부는 더욱 그렇습니다. 또 쌤 필치가 워낙 다정하고 친절(?)해서 정만 잘 붙이면 마치 소설책 읽듯 잘 넘어갑니다. 입문서에서 이렇게 풍성하게, 또 빡세게 해 놓으면 나중에 들일 수고가 훨씬 줄어들고 재미도 더 붙습니다.
"모든 데이터 형식은 object 형식으로부터 상속받는다." 이 말은 p69에 나옵니다. "object 형식이 무슨 힘을 가졌기에 다른 형식의 데이터도 마구 담을 수 있는 것일까? ... 데이터, 메소드 모두를 물려받은 자식은 부모와 (이제) 똑같이 동작할 수 있습니다. 컴파일러는 자식을 부모로 간주할 수 있게 되죠." 삭막한 프로그래밍 공부 중 이런 정감어린 비유를 들으면 마음 한 구석에 비가 촉촉하게 내리는 듯합니다. 이러니 박상현쌤 책에 몰입을 안 할 수 없습니다. 뒤 p96에서 GetType() 메소드와 ToString() 메소드를 설명하며 이 "상속론"이 다시 거론되는데, 박상현쌤은 객체라고 호칭해야 할 경우에도 일단은 변수라고 부릅니다. 모두 초보 학습자들의 혼란을 최소화하기 위한 배려입니다.
제가 공부하면서 언제나 느끼는 점이지만, 프로그래밍 공부에 근본 같은 게 생기려면 수학 베이스가 좀 탄탄해야 합니다. 다만 수학의 함수론에서와는 달리 프로그래밍에서는 변수든 상수든 "선언"만 해 주면 뭔가 다루기가 편해집니다. 상수, 변수 선언 과정이 서로 닮기까지 했습니다. 책에서도 설명하듯 형식상 const 키워드가 위치하며, 또 (본질이 상수니까) 데이터를 반드시 대입해 줘야 하는 점이 다를 뿐입니다(p81). 또 한번 선언하면 이후 데이터 변경이 안 된다는 점이 다르다고 합니다. 상수니까 말입니다. ("전 언제나 변하지 않을거에요.") 상수 말고 또 데이터가 절대 안 바뀌는 게 또 있는데 열거형식(enumerator)이라고 합니다.
씨샵뿐 아니라 C 언어 전체에서 요긴하게 쓰이는 게 점프문인데 씨샵을 공부해 보니 특히 여기서 중요도가 더 높은 것 같았습니다. 특히 저는 goto 점프문 설명이 좋았는데, p180에서 쌤은 "자신을 포함해 많은 프로그래머들은 goto문을 별로 좋아하지 않는다"고 합니다. 흐름을 자주 끊어 코드를 읽기 어렵게 만들기 때문이라시네요. 하지만 어떻게보면 점프문의 본질이 그런 것이고, 책에도 나오듯 goto 아니면 도저히 수행 못 할 기능이라는 게 있지요. 쌤 교재가 다 그렇듯, 딱 해당 주제에 도움될 만하게 만들어진 예제가 많이 실려서 더 좋았습니다.
앞에서 여러 번 나왔기 때문에 맥락상으로(또, 전에 다른 C 언어들을 공부해봤다면) 메소드가 무슨 뜻인지 다 짐작하지만 p201에서 싹 몰아서 또 설명해 줍니다. 사실 여길 공부하며, 그간 메소드에 대해 뭔가 흐릿했던 부분까지도 구름이 싹 걷히는 것 같았습니다. 학습자들도 아마 여기서 그렇게 느끼겠지만 메소드가 클래스 안에서 선언된다는 건 확실히 독특한 포인트입니다. "객체의 일을 처리하는 방법 또는 방식이라고 생각하면 이해하는 데 도움이 될 것입니다." 명쾌한 설명 아닙니까. 출력 전용 매개변수가 메소드 오버로딩으로 이어지며 다시 가변 개수의 인수로 연결되는 개념도도, 학습자한테 바로 개념이 잡히게 도와 줍니다.
"객체지향 프로그래밍에서도 사용자에게 필요한 최소 기능만 노출하고 내부를 감출 것을 요구합니다. 이것을 은닉성(encapsulation)이라고 합니다.(p261)" 이 이치를, 쌤은 모터, 회로, 배선 등은 감춰진 채 마치 버튼이 일을 다 하는 듯 외관이 꾸며진 선풍기에 비유합니다. 탁월합니다. 그 바로 밑에서는 객체지향 프로그래밍의 3대 특징을 가르쳐 줍니다.
제가 전에 어렵게 느꼈던 점이 확장 메소드였습니다. 개별 상황에만 잘 대응하게 쓰인 교재를 읽으면 심지어 메소드와 확장메소드도 서로 연결이 안 됩니다. 이 책은 개념 체계를 마치 탄탄한 구조의 집을 짓듯 매우 섬세하게 논리를 진행시킵니다. 확장 메소드도 메소드이니 만큼 클래스 하나가 일단 선언되어야 합니다. 이렇게 간단명쾌한 걸, 다른 책에서 파편화된 서술을 보며 고개를 갸웃했던 걸 생각하면... p355에는 레코드 형식으로 만드는 불변 객체가 설명되는데 마치 학부에서 선형대수학(linear algebra) 배울 때처럼 꼬리에 꼬리를 무는 설명이 너무도 재미있습니다.
아무래도 C 언어 계통은 또 일반화 프로그래밍 파트가 꽃 아니겠습니까. 이 부분 설명도 기가 막힌데 p423을 보면 "사람, 돼지, 오리너구리 등은 사는 곳, 생김새, 번식 방법 등이 모두 다르지만 하나 공통점이 있는데 바로 수유입니다."라는 문장이 있습니다. 이게 바로 씨샵에서는(아니, C 언어 전체에서) 일반화 프로그래밍(generic programming)이란 뜻입니다. 쌤 책의 진가가 다시 드러나는 대목입니다.
많은 이들이 try~catch 문과 throw 문 사이의 유기적인 관계를 자연스럽게 이해 못 하고, 따로따로만 알기 때문에 실력이 늘지 않습니다. p456을 보면 참 예외 처리에 대해 알기 쉽게 설명합니다. 바로 다음의 예제도, 대체 throw 문이 뭐하는 데 쓰이는지, 따라하며 한 번에 이해할 수 있습니다. 예제도 참 이쁘게 만드십니다.
많은 학습자들이 공감하겠지만 리플렉션은 정말 유익하고 강력한 기능이죠. p576에서 저자는 세 가지로 요약하는데 실행 중 원하는 형식의 정보를 읽어낼 수 있고, 동일 형식의 인스턴스를 만들 수 있으며, 프로퍼티나 필드에 값을 할당하고 메소드를 호출할 수 있는 기능들입니다. 여기까지는 C 언어 일반이며, 씨샵에서는 새로운 형식도 가능하다는 게 두드러진 특징입니다. p577의 표가 정말 깔끔합니다.
쌤 교재는 학습자들이 실제 느낄 만한 의문점을 잘 짚어 주는 게 또 자상합니다. p636을 보면 우리가 흔히 마주치는 오류인데, long 형식으로부터 변환된 바이트 배열, 그 저장 순서가 꼬이는 경우(정말 자주 접하죠) 원인이 무엇이며 어떻게 대처할지를 가르쳐 줍니다. 바이트 오더의 차이를 잊지 말라는 점, 꼭 기억해야 하겠네요. 바이너리 라이터/리더에 대한 p645의 예제와 그 해설을 보면 입문서 단계에서 이런 내용까지, 그것도 쉽게 배우는 게 가능하구나 싶었습니다.
닷넷이 스레드 제어 클래스로 System, Threading, Thread를 제공하기 때문에 여기서 다소 초보자들이 혼란을 겪기도 합니다. p662 이하의 설명이 그런 시행착오를 줄여 주는 유익한 설명입니다. p680의 스레드 간 동기화라든가, p712의 닷넷 제공 비동기 API 에 대한 설명도 같이 연계하여 이해하니 더욱 분명하게 이해되는 듯했습니다. 개인적으로 WinForm UI를 어려워하는 편인데 p744 이하의 서술이 직관적이어서 이해가 수월했어요. 언제나 제 발목을 잡았던 TCP/IP의 동작 과정도, 왜 나는 그동안 안 되고 저 사람은 척척 잘 다루는지 비로소 원인이 캐치되어서 속이 다 후련한 공부였습니다.
*예스24 리뷰어클럽을 통해 출판사에서 책을 제공 받고, 실제 공부를 해 본 후에 솔직하게 쓴 독후감입니다.
- 좋아요
- 6
- 댓글
- 0
- 작성일
- 2023.04.26
댓글 0
댓글이 없습니다.
첫 번째 댓글을 남겨보세요.