![]()
Author: 데인 힐라드 지음 / 황반석 옮김 출판사: 제이펍 Score /5: 5
예전에 할아버지가 나에게 하신 말씀이 있다. 사람이든 건물이든 기초가 튼튼해야 오래 간다고. 그땐 철도 없고 어릴적이어서 그렇게 마음속에 와 닿지 않았지만, 나이가 적당히 든 지금은 충분히 공감이 가고 이해가 가는 말이다. 그래서 이 책을 보면서 많이 반성한 것 같다. 솔직히 나는 파이썬을 공부하긴 했으나 깊이(?) 공부해 보진 않았다. 요즘 핫한 웹 프레임워크인 장고, 플라스크, 그리고 머신러닝쪽에서 많이 쓰이는 언어라 적당히 구글링하면서 공부했었으나 이 책은 나에게 '너는 프로그래머 이니? 아니면 단순한 코더니?' 라는 질문을 통렬하게 던진다.
그동안 '제대로 공부하지 않았다' 라는 생각과 어떻게 하면 앞으로 나아갈지 알려주는 나침반 같은... 이 책은 그런 책이 아닐까?
필자는 철저하고 세심하게 독자의 눈높이에서 한 스텝 한 스텝 조심히 진도를 진행한다. 그럼 이론만 있느냐? 아니다! 실제로 적용가능하고 이론을 뒷받침하는 탄탄한 연습 코드가 있기 때문에 스토리 -> 증명의 순서를 여실히 따른다.
물론 나는 코드를 한번에 이해하면 좋았겠지만 여러번 돌려보기도 하고 디버거로 순서를 끊어가면서 보아서 조금 책을 느리게 진도를 나갔다. 물론 코드에 대한 설명도 충분히 해주므로 초보자라도 충분히 빠른 시간안에 이 책을 볼 수 있다. 하지만 좋은 것을 천천히 먹듯이 천천히 그 뜻과 의미를 음미하며 공부하는 것도 괜찮지 않을까?
이 책은 파이썬을 공부하거나 프로그래밍을 공부하는 모두에게 추천할 만한 책이다. 단순히 한번만 보고 끝낼 수 있는 책이 아니고 두고두고 마음속에 레퍼런스로 삼을 수 있고, 현재 내가 잘하고 있는지 확인할 수 있는 하나의 지침서로도 볼 수 있을 것 같다. 어릴적 할아버지의 말씀처럼 여러분들도 이 책으로 여러분들의 프로그래밍 기초 토대를 탄탄히 하길 바란다. |
|
제이펍 출판사가 2020년 11월에 출판한 '프로그래머를 위한 파이썬' 도서의 서평 이벤트에 당첨되어 무료로 제공받은 도서를 읽고 적는 서평입니다. 가격을 보니 250페이지 분량에 25,000원 이네요. 책은 무료로 증정 받았다고 서평을 결코 우호적으로 적지는 않았음을 미리 밝힙니다. ![]() 딥러닝 이후로 파이썬 기초 서적들이 하루가 멀다 하고 출간되는 상황입니다. 최근 일반인부터 프로그래머들까지 다양한 계층에서 파이썬을 공부하고 있기 때문에 책이 잘 팔려서 많은 파이썬 책들이 출판되고 있는 겁니다. 한가지 아쉬운 점은 기존의 책들이 비슷 비슷한 기초 수준의 내용을 주로 다루고 있다는 점입니다. 기존에 출판된 파이썬 책들은 문법 위주의 책들이 대부분인 상황이고, 파이썬은 다른 프로그래밍 언어에 비해서 상대적으로 쉽기 때문에 누구나 시간을 투자하면 문법을 익힐 수 있습니다. 그리고 조금 더 노력하면 간단한 프로그램을 쉽게 만들 수 있습니다. 하지만 그 다음 단계인 '좋은 디자인, 확장성이 있는 디자인' 이런 것들을 고민하는 분들에게 적당한 책은 많지 않았습니다. 물론 여러 좋은 책들이 있었지만 필자가 보기에는 일반인이나 파이썬 초보자들이 보기에는 갑자기 내용이 어려워 지는 책들이 대부분 이었습니다. 그 중간을 채워줄 수 있는 책이 없었다고 보는게 정확할 겁니다. '프로그래머를 위한 파이썬'이라는 책을 한 마디로 표현하면 파이썬 프로그래밍 초보자를 위한 좋은 설계 방법론을 소개하는 책이라고 말하고 싶습니다. 테스트 주도 설계와 디자인 패턴, 리팩토링을 간단한 예제(콘솔 기반 북마크 관리)를 통해서 구현하고 해당 프로그램에 점점 기능을 추가하는 상황에서 어떻게 하면 더 좋은 프로그램을 설계를 가져갈 수 있는지를 책의 후반부까지 잘 설명하고 있습니다. 몇 가지 예를 들어보겠습니다. 필자를 비롯하여 많은 초보 프로그래머는 다음과 같이 if ~ else 구문을 자주 사용합니다. 하지만 이런 형태의 구조의 확장성에 한계가 있음을 지적하고 이를 커맨드 패턴으로 변경하고 변경했을 때 얻게되는 장점을 잘 설명하고 있습니다. ![]() 두 번째로 파이썬 생성자에서 다른 클래스의 객체를 직접 instantiation하는 경우의 문제점 역시 그림으로 설명하고 이에 대한 해결책도 잘 설명합니다. 각각의 클래스 간의 결합을 낮추는게 중요하다고 여러 곳에서 강조합니다. 그렇지 않으면 하나를 수정하면 여러 곳을 모두 수정해야 하거든요. ![]() 마지막으로 상속에 대한 부분도 상속의 문제점을 이야기하고 상속을 사용할 수 있는 경우에 대해서 잘 설명을 해줍니다. 무조건 상속이 좋다는 생각은 이제 버려야 겠지요? ![]() 여기에 추가로 책의 중반부에는 unittest와 pytest를 사용한 유닛 테스트 챕터도 있습니다. 필자는 초보 프로그래머나 또는 파이썬을 이용한 디자인 패턴을 공부하시려는 분들께 이 책을 추천합니다. 물론 비 프로그래머 분들이 여러 목적으로 파이썬을 공부하시는 경우에 이 책은 규모가 있는 프로그램을 위해서 어떻게 설계하는게 좋은지를 예제를 통해서 설명하므로 비 프로그래머 분들께도 도움이 될 겁니다. 필자는 파이썬 책을 거의 모두 읽어보고 있는데 이 책은 최근에 읽었던 책 중에서 가장 빨리 완독을 했을 정도로 번역도 잘 되고 내용도 상당히 좋았습니다. 아마존의 서평을 보니 너무 쉽다고 쓰시는 분들도 많은데 이제 파이썬의 독자층이 넓어지고 있기 때문에 분명히 이 책은 큰 도움이 될 것이라고 생각합니다. 디자인 패턴을 이미 잘 알고 현업에서 잘 사용하고 있는 프로그래머가 아니라면 이 책에 만족하시리라 봅니다. 필자 역시 파이썬 디자인 패턴 책을 몇 권 읽었는데 다 완독하지는 못했는데 이 책은 그런 점에서 볼 때 꽤 좋은 책이라 생각합니다. 이상으로 설명을 마칩니다. |
|
프로그래밍 언어에 대한 책을 꽤 많이 읽는 편입니다. "실용주의 프로그래머"가 시발점 이었던것 같은데요. 다양한 언어를 공부하라는 조언은 뼛속깊이 와 닿았었습니다. 그래서 파이썬 책도 꽤 여러권 읽었습니다. 물론 업무에서는 전혀 쓸 기회가 없었지만, 파이썬은 온갖 장점을 모조리 가지고 있는 것 같은 그런 언어입니다.
뭐니뭐니해도 가장 큰 장점은 읽기 쉬운 언어 형태입니다. 이건, 정말 압도적인 장점인데요. 읽기 쉬운 코드는 그만큼 다른 사람이 읽고 수정하기 쉬운 코드라는 의미이고, 지속적으로 발전할 수 있는 소프트웨어를 만들수 있는 기초가 되기 때문입니다. 일찍이 브룩스는 <맨먼스 미신>에서 소프트웨어를 성장시키라고 했습니다. 소프트웨어는 그 용어가 은유하듯 아주 말랑말랑해서 고치기 쉬운 것을 뜻합니다. 건축물 처럼 한번 지으면 고쳐쓰기 힘든 그런 존재가 아니거든요. 그래서 건물을 건축하거나 기계를 만드는 것과 같은 방식으로 소프트웨어를 대하면 안됩니다. 지속적인 성장이 가능한 프로세스를 구축하고 그 프로세스위에 소프트웨어를 올리고 나무를 가꾸듯 지속적으로 성장시켜야 하죠. 게다가 파이썬은 커뮤니티가 방대합니다. 흔히 루비와 파이썬을 비교할때 많이 화자되는 이야기인데요. 언어 자체의 강력함은 루비와 파이썬이 비등비등하지만 커뮤니티는 파이썬이 압도적입니다. 필요한 라이브러리가 다 있다고 봐도 과언이 아니죠. 루비를 배우면 루비온레일즈와 함께 배워서 웹 서비스를 만드는 것 이외에는 할게 없지만, 파이썬은 장고와 플라스크로 웹서비스를 만들는것 뿐 아니라 인공지능과 딥러닝 용으로 사용할 수도 있고, 판다스나 넘파이 같은 라이브러리로 수치계산에 대해서도 쓸수 있으며 그래프도 그릴 수 있고, 다양한 OS용 어플리케이션을 개발 할 수도 있습니다.
서론이 길었네요. 이 책은 제가 읽었던 다른 파이썬 책들에 비해 단연 독특한 특징을 가지고 있습니다. 파이썬을 어느정도 공부한 개발자에게 맨토링 하는 느낌의 책이거든요. 프로그래밍 언어를 안다고 해도 막상 코딩을 하다보면 "이 길이 맞나"라는 의문을 가지게 됩니다. "이렇게 짜면 되는건가?"라는 거죠. 물론, 지근에 훌륭한 맨토가 있어서, 코딩의 방향성을 짚어 줄 수 있다면 좋겠지만, 그게 쉬운일은 아닙니다. 나이가 많이 들었다고 코딩의 맥을 알고 코딩하는게 아니고, 맥을 안다고 해도 그렇게 하려면 많은 연습이 필요하기 때문인데요. 결국, 막막하고 암담함에 놓이게 됩니다. 이 책은 그 부분에 대해서 제시하고 있습니다. 파이썬 문법에 대한 이야기 보다는, "관심사 분리"에 대해서 이야기하고 절차적 프로그래밍과 함수형 프로그래밍의 차이점을 예를 들어서 설명합니다. 객체지향에서 상속과 포함관계를 그림으로 설명하기도 하고요. 우리는 객체지향을 C++과 클래스를 통해서 접했기 때문에 의외로 "상속"을 주로하는 객체지향을 "맞는 길"로 인식하기 마련입니다만, 사실 객체지향은 "조합"을 위주로 사용해야 합니다. 제록스의 "팔로알토"연구소에서 스몰토크라는 언어로 객체지향을 대중화 시켰던 "엘런케이"는 다음과 같이 이야기했습니다.
이 책에서는 그걸 이야기하고 있습니다. 클래스 상속 방식은 구식이라는 식으로 표현하기는 하지만, 클래스는 조합으로 쓰는 것이 바른 길입니다. ( 이 부분은 "객체지향의 사실과 오해"라는 "조영호"님의 저서를 더 참고 하세요 ) 그 외에도 시간/공간복잡도 라든지, 자동화 테스트라든지, 프로그래머가 알아야할 기본적인 소양들을 집어 주고 있습니다. 그리고 저자의 지식 습득 노하우를 설명해주기도 하는데요. 마인드 맵으로 습득할 지식 맵을 만드는 겁니다. 사실, 프로그래밍 언어 책은 프로그래밍 언어에 대해서만 이야기 해야 한다는 고정관념같은게 있을 수있는데, 오랜 시간 개발을 해야 하는 초보 개발자에 경우는 이런 식으로 어떻게 개발해 나가야 하는지 길을 보여주는 책도 상당히 중요한 것 같습니다.
|
|
Python의 아래와 같은 개념을 어느정도 알고 계시는지?
만약 위 개념들이 생소하거나, 들어는 봤지만 익숙치 않다면 이 책이 많은 도움이 될 것이다. 더불어 키워드를 통해 본 도서의 난이도에 대한 감도 어느정도 잡을 수 있을 것이다. 키워드에 해당하는 내용들을 아주 상세하게 깊숙히 다루는 것은 아니다. 약 250p 정도 되는 다소 가벼운 분량에 키워드별 핵심이 되는 중요한 개념 혹은 코드 몇가지를 개괄적으로 소개한다. 분량이 짧다고 해서 깊이가 결코 가벼운 것은 아니다. 저자의 오랜 실전 경험을 바탕으로 학습 시간 투자 대비 가장 효과적으로 지식을 얻을 수 있도록 구성되어 있다는 인상을 받았다. 즉, 실전에 많은 시간이 투입되었으나 전체적인 프로젝트 숲이 보이지 않는 개발자에게는 이 책이 단시간 내 막혔던 부분을 뚫을 수 있게 도와줄 것이다. 또, 반대로 프로젝트 경험이 많고 이미 위 키워드를 능숙할 정도로 알고 있는 이에게는 깊이 측면에서 약간 부족할 수도 있다. 개인적으로 생각하는 이 책의 최고의 백미는 파트3에 해당하는 실전 프로젝트이다. 위에서 열거한 개념들을 어떻게 실전에 적용할지 한가지 일관된 좋은 예제를 개발한다. 바로 브라우저 즐겨찾기 내용을 등록, 관리할 수 있는 Bark 설계, 구현 단계를 오롯이 따라하는 것만으로도 프로젝트 한 사이클을 경험할 수 있으므로 충분히 가치가 있는 과정인데, 그보다 더 큰 장점은 이 일반적으로 설계에 대한 책은 각 관점별로 동떨어진 예제들이 열거되어 있어 실전에 돌입하면 메타지식 간 연결고리가 부실하여 바로 적용하기 어렵기 마련인데 저자는 그런 다른 책들의 비효율적인 부분들을 잘 이해하고 있다는 생각이 들었다. 독자들에게 자신과 같은 시행착오를 거치지 않도록 노력하고 있어 인상적이었다. 그 외 다른 파트의 내용은 다음과 같다.
Python의 입문 과정을 마치고 중급 과정 혹은 실전에 돌입하는 이에게는 이 책이 매우 적합하다고 생각한다. 위에서 소개한 바와 같이 설계의 큰 그림을 정말 빠른 시간내에 익힐 수 있기 때문이다. 정리하자면 |
|
자바 개발자이지만 대세가 대세인지라 파이썬 책을 많이 접하게 된다. 자바도 완벽하지 않은데... 라면서 다른 언어는 잠깐잠깐 보는게 전부이지만 이런 내용의 책이라면 언제든 환영이다.
오늘의 리뷰할 책은 바로 ![]() ![]() 프로그래머를 위한 파이썬 이다.
딱히 별 기대는 하지 않고 읽게 되었고 파이썬을 주력으로 사용하지 않아도 정말 멋진 내용이라 재미나게 읽고 있다. 물론 뒤로 갈수록 파이썬 심화 내용을 사용하거나 코드를 읽는게 약간 어렵긴 하지만 그런걸 감안하더라도 정말 멋진 내용들을 담고 있다.
![]() 일단 이 책은 '프로그래밍을 막 시작한' 개발자를 대상독자로 잡고 있지만... 어느정도 개발을 해본 2~3년차 개발자가 읽으면 정말 좋은 책이라고 생각이 든다.
가끔 대상독자를 너무 낮은 수준으로 잡는 책들을 보면 책을 쓰는 사람들은 본인들이 너무 잘해서 초보자를 과대평가 하는게 아닐까...? 하는 생각도 든다. (후... 내실력.눈감아...)
이 책은 파이썬 설치를 부록에 넣어놨다. ![]() 그만큼 파이썬은 딱히 신경 안써도 된다는 뜻인것 같다.
이 책은 입문서 같은 내용이 들어있지 않다. '개발을 어떻게 하면 더 잘할 수 있을까?'에 대한 심오한 내용이 들어있다. ![]() ![]() 매번 파이썬 책 하면 '설치', '변수', '반복문' 같은 평범한 언어 입문서였지만 1장의 제목부터 느낌이 남다르다 '더 큰 그림'
사진의 내용을 살짝만 봐도 알겠지만 개발을 할 때 '설계'가 얼마나 중요한지를 설명한다. (설계가 좋으면 좋은 프로그램이 탄생한다...!!)
설계에 대한 이론뿐만 아니라 개발을 어떻게 하면 더 잘했다고 말하고 다닐 수 있는지에 대해서도 이야기한다.
![]() ![]() 가끔 팁이나 경고도 나오고 활용된 코드에 대한 설명도 친절한 편이다.
![]() ![]() 그림도 적절히 활용하여 이해를 돕는다.
그리고 가끔 강조되는 내용을 하나씩 넣어놨는데 '테스트는 모두를 위한 것이다.' (정말 명언이 아닐 수 없다.) 같은 공감되는 말들이 있다.
![]() ![]() 사실 엄청난 성능을 요구하는 프로그램이 아니라면 개발을 할 때 시간복잡도 같은 성능적인 측면은 잘 고려하지 않는다. 단위 테스트나 디버깅 도중에 성능이 안나올 경우, 실서버에서 사용자가 몰리거나 예상치못한 에러가 발생한 경우를 제외하면 현업에서 개발 2년차가 넘었지만 시간복잡도를 사용한 프로젝트를 해본적은 없다.
요런부분은 잘 이해도 안가고, 시간제한을 엄격히 하는 현업에 활용하기에도 에매하기 때문이지만 제대로 배워보고 싶은 마음이 굴뚝같다. 이런 마음을 갖고 있는 개발자라면 한번쯤은 쭉 훑어보는것도 나쁘지 않은 내용인것 같다.
'프로그래밍'의 근본적인 문제들은 대부분 지루한 이론에서 나온다. 코드는 경험에서 우러나오는 바이브(?)에 의해서 비슷한 기능이라면 딱히 설계가 없어도 만들어진다. 설계대로 간다고 다 좋은 성능을 내는것도 아니고 설계대로 만든다고 완벽한 결과물이 나오는것도 아니다. 하지만 완벽하게 까진 아니더라도 이정도면 훌륭하다 라고 생각될 정도의 결과물을 만들기 위해선 반드시 필요한 것이 '설계'와 '이론' 이 아닐까 싶다.
오랜만에 멋진 서적을 만나서 재미나게 읽을 수 있었다. |
|
Python이 가진 '양날의 검'을 잘 쓰는 방법 Python은 굉장히 간결하고 직관적인 언어입니다. 프로그래밍을 '논리를 언어로 정리하여 표현하는 행위'로 정의한다면, 간결함과 직관성은 프로그래밍 언어가 가져야 할 최고의 덕목일 것입니다. 이 때문에 배우기 쉽고 사용하기 쉬운 언어로 널리 알려져있으며 많은 사람들이 Python을 통해 프로그래밍에 입문하고 있습니다. 내년이면 Python이 나온지 30년이 되는 지금, Python은 정말 다양한 곳에서 사용되고 있습니다. 단순한 스크립팅에는 이보다 나은 언어가 없을 정도이고, 더 나아가 백엔드 개발, 정보 보안 계열, 데이터 분석, 머신러닝 등 수 많은 분야에서 사례를 찾아볼 수 있습니다. 심지어 이 책의 저자인 데인 힐라드도 초장부터 책의 큰 꼭지를 하나 빌려 Python은 엔터프라이즈 언어다라고 소개할 만큼 많이 성숙해져 있습니다. 하지만, Python을 지금의 입지에 오르게 만든 간결함과 직관성은 양날의 검입니다. 다른 언어들보다 자유도가 높은 탓에 조금만 느슨하게 코딩해도 코드의 엄밀함이 상하기 쉽고, 어느 순간 잘 정리되지 않은 코드가 되어 있을 수 있습니다. 실제로 그렇게 되어버린 코드들이 오픈소스 상에서 많이 발견되고 있으며, 이는 코드의 가독성을 해치고 프로그램의 유지보수성을 크게 감소시키고 있습니다. 저는 특히 머신러닝 계열의 코드에서 그런 부분들을 많이 발견하는데, 실험 코드가 Python으로 짜여지고 동작을 위해 조금씩 수정된 흔적들이 프로젝트 내에 광범위하게 남아있는 경우를 심심치 않게 찾을 수 있습니다. 구조적으로 꼼꼼하게 설계되지 않고 편하게 쓰여진 코드는 어느 순간 굉장히 읽기 힘들고 재사용하기 힘든 코드가 되어있고, 전체적인 프로젝트의 안정성과 유지보수성을 떨어뜨리는 주요한 원인이 되기 쉽습니다. Python 역시 설계하는 과정을 충분히 거치면 굉장히 좋은 코드를 작성할 수 있습니다. Python 본연의 장점인 간결함과 직관성이 발휘되면서, 동시에 엄밀하고 유지보수하기 편한 코드는 결국 어떻게 설계하느냐에서 나온다고 해도 무방할 것 같습니다. 이 책의 저자는 좋은 설계에는 시간과 노력이 필요하며 여기에 시간과 노력을 들이는 것이 얼마나 중요한 것인지를 책 전반에 걸쳐 설명하고 있으며, 그 설계를 Python을 활용해서 어떻게 할 수 있는지를 자세하고 명확하게 설명합니다. 기본적인 객체지향 이론을 Python에 적용하는 방법부터 시작해서 디자인 패턴과 유닛 테스트에 이르기까지 Python을 통해 만드는 프로그램이 점점 커질 때 어떻게 해야 하는지에 대한 길을 제시하고 있으며, Python을 처음 써보는 초보자부터 어느 정도 사용하고 있지만 더 잘 사용하고 싶은 중급자까지 모두에게 추천할 만한 내용으로 책의 구석구석을 채워두었습니다. 특히 상속과 조합의 차이를 통해 결합성을 낮추는 것을 설명하는 부분은 이 개념을 처음 받아들이시는 분들도 쉽게 이해하실 수 있도록 잘 설명해두었고, `unittest`나 `pytest`를 활용한 테스트를 어떻게 잘 진행할 수 있는지에 대해 다룬 부분도 큰 도움이 되실 것입니다. Python을 단순한 도구로써가 아니라 "프로그래밍 언어"로써 잘 쓰고 싶은 분들께 이 책을 강력하게 추천합니다. |
|
파이썬 웹 프레임워크인 장고로 현재 프로젝트의 백엔드를 구현하고 있습니다. 파이썬을 사용하여 웹 개발을 하고 있으면서 파이썬을 파이썬답게 사용하고 있는지 늘 의구심이 들었습니다. 향후 유지보수가 쉽고 재사용할 수 있고 또한 객체지향적인 소프트웨어를 개발하고 싶었습니다. 그러던중 이번에 "프로그래머를 위한 파이썬" 이라는 책을 알게 되어 기대감을 가지고 이 책을 읽기 시작했습니다. 그러면 이 책에 대해서 간단히 살펴보겠습니다. PART 1 - 모든 것이 중요한 이유(Why it all matters) 첫번째 파트에서는 이책에서 배울 전체 범위에 대해서 설명합니다. 현대 소프트웨어 개발에서 파이썬이 왜 중요한지를 설명합니다. 그러면서 소프트웨어를 설계를 설명하고 그것이 왜 중요한지, 일상 업무에 어떻게 적용되는지를 설명합니다. Chapter1 더 큰그림 - 1장에서는 이책을 어떻게 활용할 것인가에 대한 내용입니다. 파이썬의 최근 역사를 살펴보고, 소프트웨어 설계의 중요성과 개념에 대해서 살펴봅니다. 요약한다면 파이썬은 사용자층이 가장 빠르게 성장하는 언어중의 하나이며 설계는 단지 종이에 그리는 작업이 아니라 과정이고 프로젝트에 설계를 선행하는 것은 훗날 깨끗하고 유연한 코드를 만들기 위한 투자다. 다양한 사용자가 있음을 염두에 두고 소프트웨어를 구축해야 한다고 합니다. Part2 설계의 기초 파트 2에서는 소프트웨어 설계와 개발을 뒷받침 하는 고급 개념에 대해서 다룹니다 Chapter2 관심사 분리 명확한 코드의 초석은 여러 기능을 관리 할 수 있는 작은 조각으로 나누는 것입니다. 명확한 코드는 어느 시점이 되면 머리를 쓰지 않아도 쉽게 이해되는 코드입니다. 명확한 의도를 가진 짧은 코드를 만드는 것은 매우 중요하지만, 임의의 기준으로 코드를 분할해서는 안된다고 합니다. 관심사에 따라 나누는 것이 효과적입니다. Chapter3 추상화와 캡슐화 3장에서는 대규모 시스템에서 추상화의 가치를 이해하고 관련 코드를 클래스로 캡슐화, 파이썬에서의 캡슐화, 상속, 조합사용하기에 대해서 알아본다. 전 장에서 알아본 관심사의 분리에서 코드를 작은 단위로 만들기 위한 추상화와 캡슐화를 어떻게 사용하는지에 대해 배워봅니다. Chapter4 높은 성능을 위한 설계 코드를 작성하면, 일반적으로 해야 할 추가 작업이 있습니다. 작성한 코드는 작업을 잘 수행해야 할 뿐만 아니라 빠르게 수행해야 합니다. 코드의 성능은 메모리나 성능은 메모리나 시간과 같은 리소를 얼마나 잘 활용하는가에 달려 있습니다. Chapter5 소프트웨어 테스트하기 5장에서는 테스트의 구조 이해, 애플리케이션에 다양한 테스트 방법 사용하기, unittest 프레임워크로 테스트 작성하기 pytest프로그레임워크 테스트 작성하기 등 소프트웨어 테스트 전반에 대해서 알아봅니다. Part 3 대규모 시스템에 적용하기 파트3에서는 파트2에서 배운 개념들을 토대로 애플리케이션을 구축해 볼것입니다. 개발에서의 다양한 부분에 소프트웨어 개념들이 어떻게 적용되는지 보게 될 것입니다. Chapter6 실전! 관심사 분리 2장에서 파이썬의 관심사 분리에 대한 예를 설명하였습니다. 관심사 분리는 코드를 이해하기 쉽게 하기 위해 고유한 동작을 하는 코드 간 경계를 만드는 것을 의미합니다. 이번 장에서는 관심사 분리에 대한 좋은 예로 실제 애플리케이션을 만들어 봅니다. Chapter7 확정성과 유연성 이번장에서는 코드를 유연하게 만들기 위한 제어 반전 사용하기, 코드를 확장할 수 있도록 인터페이스 사용하기, 기존 코드에 새로운 기능 추가하기등 코드의 확장성과 유연성에 대해 알아봅니다. Chapter8 상속의 규칙과 예외 클래스는 다른 클래스로부터 사용할 수 있으며, 부모 클래스의 데이터와 동작을 받게 됩니다. 이번 장에서는 파이썬의 상속을 자세히 배울 것이며, 어디에서 사용해야 하고 어디에서 피해야 하는지 배울게 될것입니다. Chapter9 경량화하기 9장에서 다루게 될 내용은 복잡도를 측정하여 리팩토리할 코드를 식별하고 코드를 분해하기 위한 파이썬 언어의 기능을 알아봅니다. 또한 파이썬 언어의 기능들을 이용하여 이번 버전과의 호환성을 지원하는지 알아봅니다. Chapter10 느슨한 결합 만들기 느슨한 결합은 각 부분의 코드를 변경해도 다른 곳에서 문제가 발생할 것이라는 걱정 없이 작업을 할 수 있게 합니다. 또한, 확장성과 같이 프로그램에 기대하는 다른 특성들의 기초가 됩니다. 10장에서 강한 결합의 단점과 그것을 해결하는 방법에 대해 배울 것입니다. Chapter11 향상과 진보 이 책의 마지막장에서는 소프트웨어 개발 경력에서 다음 단계를 어떻게 선택할 것인지, 그리고 지속적인 학습을 위한 계획은 어떻게 세울것인지에 대해 어떤 방향을 잡아야 할지 이번 장을 통해서 파악해 본다. 이 책은 파이썬을 어느정도 다뤄보고 소프트웨어 개발을 더욱 깊게 공부하기를 원하는 사람들에게 딱 좋은 책인것 같습니다. 다양한 주제들을 던져놓고 독자들로부터 한번 생각해 보게끔 유도하여 차례 차례 생각하며 읽어갈수 있도록 한점이 좋았습니다. 비단 기술적인 내용뿐인 아닌 소프트웨어 전반에 대한 개념과 '복잡한 소프트웨어를 어떻게 개발하는가'에 대해 소개합니다. 파이썬 책이지만 소프트웨어 개발 방법론을 충실히 설명하고 있는 책이여서 잼있게 읽었습니다. 소프트웨어 개발의 원리와 정석을 파이썬을 통해 잡고 싶으시다면 읽어보시는것을 추천합니다! |