본문 바로가기

전체 글

[Python 36] 파이썬 책 소개 2022년 12월에 파이썬 책을 출간했습니다. 파이썬 문법, 알고리즘, 테스팅/디버깅, 객체지향 개념을 함께 다루고 있습니다. 파이썬을 라이브러리로 접하는 분들도 많기 때문에 데이터 분석도구인 판다스(Pandas), 데이터 시각화도구인 맷플롯립(MatplotLib)도 함께 포함하고 있습니다. 책의 타이틀은 [파이썬 알고리즘 객체지향 코딩의 기술]입니다. 줄여서 "파알객코"라고 부르고 있습니다^^. 2023년 11월에 [2023 세종도서 우수학술도서]에 선정되었습니다. 많은 관심 바랍니다. 더보기
[Python 35] 오류 메시지를 통해 본 파이썬 타이틀을 "오류 메시지를 통해 본 파이썬"이라고 조금 거창하게 붙였다. 모든 컴퓨터 언어들이 컴파일하거나 실행할 때 에러가 발생하면 "어디서 무슨 에러가 났는지"에 대한 정보를 보여준다. 물론, 코드에 존재하는, 내가 미처 파악하지 못했던 에러를 찾는 (아주 감사한, 가끔은 너무 힘든) 기회를 제공하지만, 그와 별개로 컴퓨터 언어의 내부를 들여다 볼 수 있는 기회가 되기도 한다. 파이썬에서 흔히 보게 되는 몇가지 대표적인 오류 메시지와 해결방법에 대해서 한번 살펴보자. ○ NameError : name '-----' is not defined 가장 대표적인 에러로 NameError가 있다. (억지로 만든) 간단한 예를 한번 보자. 아래의 In[3]에서 Something 이라는 이름의 클래스를 하나 선언하.. 더보기
[Python 34] 파이썬의 matplotlib와 예제 이번 글에서는 파이썬의 그래픽 라이브러리인 matplotlib에 대해서 살펴보도록 하자. (matplotlib의 기초에 대한 소개는 다음에...) 학교의 수업 중에 파이썬의 matplotlib 과제로 인터넷 기사에서 임의로(?) 구한 그래프와 최대한 유사하게 만들어서 제출하라는 과제를 내었다. 모범적인 여러 답안들이 나와서 이 글에서 소개해 보고자 한다. 가장 모범적인 답안이었던 1학년 김태희 학생의 답안을 비롯해 몇가지 재밌는 아이디어를 소개해 보고자 한다. ○ 문제 아래의 그래프를 파이썬의 matplotlib를 이용해서 최대한 비슷하게 그릴 것. 단 matplotlib의 함수적 접근인 pyplot 을 사용하지 않고 객체지향적 접근을 사용할 것. ○ 모범답안 1 (20학번 학생) 우선 결과부터 보자. .. 더보기
[Python 33] 객체들 간의 관계-1 : 컴포지션(composition) 모든 프로그램은 "객체들"과 "객체들 간의 관계"로 만들어진다. 사실 모든 소프트웨어란 클래스를 정의하여 객체를 생성하고, 생성된 객체들 간에 관계(연결)을 만들어 주게 되는데, 그 관계를 통해 객체들이 서로 연관되어지고 서로 커뮤니케이션하고 상호작용하게 된다. 사람들이 서로 상호작용하면서 세상이 움직여 가듯, 객체들이 서로 상호작용하면서 소프트웨어가 움직이는(구동되는) 것이다. 우리는 여태껏 하나의 클래스 만을 사용해 왔다. 객체도 한두개 만들어 본 것이 전부이다. 그런데, 세상은 그렇게 단순하지가 않다. 세상에는 수없이 다양한 클래스들과 객체들이 존재한다. 단순히 존재하는 것에 그치는 것이 아니라, 객체들은 다른 객체들과 어떤 특별한 관계 (relationship)를 가지게 된다. 어느 세상의 한토막.. 더보기
[Python 32] 객체 : Encapsulation 객체지향을 설명하는 3가지 원리 (principles)로 Encapsulation (캡슐화), Inheritance (상속), Polymorphism (다형성)을 얘기한다. 이번 글에서는 그 중에서 첫번째 원리인 Encapsulation에 대해서 살펴보도록 한다. 이 과정을 통해 인스턴스 변수는 객체의 상태를 나타내고, 객체의 메쏘드는 객체에 대한 인터페이스 (interface)에 해당한다는 것을 이해하기를 바란다. 항상 하는 말이지만, 객체는 변수와 함수를 묶어 놓은 것이다. 그러면 바로 떠오르는 질문은 "왜 묶은거지?"이다. 같이 답을 한번 찾아보도록 하자. 객체란 변수와 함수를 묶어 둔 것이라고 했으니 우선 변수와 함수를 제대로 이해하는 것이 먼저겠다. 앞의 글에서도 계속해서 말해왔던 부분이지만 객.. 더보기
[Python 31] 코딩, 이것만 알자 의외로 코딩은 단순하다. 아주 전형적인 패턴이 하나 있는데, 리스트와 For 이다. 이 리스트와 For 만 잘 활용할 수 있으면 코딩은 의의로 매우 단순해 진다. 그런 의미에서, 리스트와 For 에 대해 한번 더 복습해 보는 시간을 갖도록 하자. 과연, Coding = List 와 For 일까? ○ 데이터 구조와 알고리즘은 하나의 문제에 대한 2개의 관점으로서, 서로 연관되어 있다. 컴퓨터학과에서 전공필수로 배우는 과목 중에 "데이터구조와 알고리즘" 이라는 수업이 있다. 이것은, 알고리즘은 별개로 독립되어 있는 것이 아니라, 그 알고리즘에서 다루어지는 데이터가 어떤 구조로 만들어져 있는가에 따라 달라진다는 뜻이다. 즉, 데이터 구조가 달라지면, 알고리즘도 달라지게 된다는 의미이다. 내가 다룰 데이터가 리.. 더보기
[Python 30] 함수 지향 vs. 객체지향 프로그래밍 (*작성중*) 더보기
[Python 29] 객체의 상태와 인스턴스 변수 ○ 객체의 행위는 객체의 속성(attributes) 값에 따라 달라진다 f( )라는 이름의 행위(behaiour) 를 가지고 있는 A 클래스에 대해 생각해 보자. 만약 a 가 A의 객체라면, a는 f( ) 라는 행위를 할 수 있다는 뜻이다. 하지만, 모든 A 객체들이 f( ) 행위를 동일하게 하지는 않는다. 행위의 방식은 동일하더라도 겉으로 드러난 행위는 서로 다르게 보일 수 있다. 예를 들어, 모든 Car 객체들은 move( ) 할 수 있다. 하지만, 어떤 Car 객체들은 3초 안에 시속 100 미터에 도달할 수 있을 만큼 "빠르게" move( ) 하는데 비해, 또 다른 Car 객체들은 1분 이상 달려도 시속 100미터에 도달하지 못할 만큼 상대적으로 "느리게" move( ) 한다. 이런 차이는 왜 생.. 더보기