본문 바로가기

Python

(16)
Python OOP - Part 1 ( Object Oriented Programming) 안녕하세요. 이번에는 객체지향프로그래밍에 대한 간단한 이야기와 함께 파이썬에서의 OOP에 대해 이야기해보려고 합니다. 꽤나 긴 글이 될 것 같네요! 시작하겠습니다 :) OOP란? 먼저 OOP란 즉 객체지향 프로그래밍이란 뭔지에 대해 알아야한다. 기술면접 등에서 쉽게 접할 수 있는 듯한 질문이면서도, 쉽게 대답하기는 어려운 질문이라고 생각한다. 우선 정의를 짚고 가자면 "데이터를 추상화시켜 속성과 행위를 가진 객체로 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법" 이다. 객체지향에 대한 개념을 조금 배워본 사람이라면 쉽게 와닿을 수도 있을 것이다. 하지만, 그렇지 않다면 추상적인 말처럼 느껴질 수 있다. 이에 대해 조금 더 이야기해보고자 한다. 사실 프로그래밍에서의 많은..
Python - Decorator 이번에는 파이썬에서 아주 중요하면서도 유용한 개념인 Decorator에 대해서 알아보도록 하겠습니다. :) Decorator Decorator란 무엇일까? 단어의 의미를 그대로 생각해보면 꾸며주는 것이다. 그렇다면 뭘 꾸며주는 걸까? decorator는 함수를 꾸며주는 역할을 한다. 그렇다면 꾸며준다는 게 어떤 의미일까? 우선 정의를 하자면, 함수의 객체와 함수를 변경하는 다른 객체를 wrapping해주는 역할을 하는 것으로 기존의 함수를 꾸며주는 역할을 한다. decorator의 단어의 의미를 살려서 기존의 함수에다가 어떤 기능을 첨가, 추가하거나 기존의 함수를 변형하여 새로운 함수를 만들어주는 것이다. 우리는 기존의 함수를 꾸며주거나, 기존의 함수에 뭔가를 첨가해준다는 느낌을 잘 살려야한다. 예를 들..
Python - Variable Length Arguments 이번에는 파이썬에서 함수의 인자로 가변 인자를 받는 것에 대해 알아보도록 하겠습니다 :) 파이썬 관련 공부를 하면서 어떤 document를 보거나, source code를 보면 *args나 **kwargs를 종종 마주치게 된다. 이 둘은 함수의 파라미터의 개수가 정해지지 않았거나, 상황에 따라 매번 다른 길이의 파라미터를 넣어줘야 할 때 사용하는 가변 인자를 의미한다. 대표적으로 print function이 가변인자를 받는 함수일 것이다. 여러 개를 넣을 수 있고, 가변적이게 넣을 수 있는 것이다.) *args 함수의 정의에서 파라미터로써 *args와 같은 표현은 positional 가변인자를 의미한다.( point는 저 위치에 *를 변수명앞에 붙인 파라미터가 의미하는 것이다.) 사실 args는 다른 변..
Python - Iterable / Iterator / Generator 이번에는 파이썬에서 iterable한 객체를 어떻게 다루는지와 함께 이와 관련된 개념들을 함께 살펴보도록 하겠습니다. :) Iterable Obejct Python Document에서는 iterable object의 의미를 객체에서 member 혹은 element를 하나씩 차례로 반환 가능한 object라고 정의한다.(쉽게 와닿을 것 같다.) Iterble object로는 sequence type인 list, string, tuple 등과 함께 non-sequence type인 dict나 __iter__() 나 __getitem__() 매직메소드를 메소드로 가지고 있는 사용자 정의 클래스 등이 있다. 사실은 빌트인 타입들 또한 소스코드를 확인해보면 __iter__나 __getitem__을 가지고 있다. ..
Python Scoping Rule ( by LEGB rule ) 파이썬에서 Scope 즉 범위의 개념은 코드에서 변수와 name을 찾는 방법을 결정한다. 이러한 변수와 name의 범위는 일반적으로 해당 변수 혹은 name을 생성하는 코드상의 위치에 따라 나뉘게 된다. Python에서의 Scoping rule은 LEGB 규칙이라고 부르는 rule에 의해서 정의된다. 그렇다면 먼저 파이썬에서 범위 Scope란 무엇이며, 파이썬에서 어떻게 동작할지에 대해서 알아보자. Scope 프로그래밍에서 name의 scope는 변수, 함수, 객체 (파이썬에서는 모두 객체이지만) 등과 같이 해당 name에 명확하게 접근할 수 있는 프로그램 영역으로 정의된다. 이러한 Scoping rule을 사용하는 이유는 name의 충돌 및 혼란을 피하기 위해서이다. 우리가 흔히 알 듯 범위는 일반적으..
Python - Call by Object Reference 프로그래밍 공부를 하다보면, Call by Value와 Call by Reference에 대해서 많이 듣게 되고 해당 개념이 매우 중요하다는 것은 한번쯤 들어봤을 것이다. 이번 기회에 이 둘의 차이점과 함께 파이썬은 어떤 방식을 사용하고 있는지를 확인해보자. 사실 Call by '_____' 는 함수의 Argument를 전달하는 방식에 따라서 구분된다. 즉, 어떤 함수 func(param1, param2) 가 있다고 할 때 이 함수의 변수를 인자로 전달할 때 어떤 방식으로 전달하냐에 따라서 구분된다는 것이다. Python의 경우 Call by Object Reference 혹은 Call by Assignment 라는 방식을 사용한다. 이 방식은 passing되는 객체의 타입에 따라서 인자를 전달하는 방식..
Python Dynamic Typing 앞서 파이썬의 특징을 살펴볼 때 봤던 Dynamic Typing에 대해서 이야기해보려고 한다. 프로그래밍 언어들은 각자 기본적인 자료형인 Primitive Data Type을 가진다. 이러한 자료형들을 어떻게 결정하는지를 Typing이라고 한다. 즉, 처음 특정 데이터의 data type을 결정하는 것을 Typing이라고 한다. Python은 기본적으로 Dynamic typing이 지원된다. 일반적으로 Typing은 Static Typing과 Dynamic Typing으로 구분된다. 💡Static VS Dynamic 간단히 자주 등장하는 static과 dynamic에 대해서 구분의 느낌을 살리자면, Static은 실행 이전에 정의, 결정된다는 느낌이고, Dynamic의 경우 실행 시점에 결정된다는 느낌을..
Python이라는 언어 Python이라는 Programming Language Guido Van Rossum이라는 프로그래머에 의해 개발된 언어로 오픈소스 언어다. 그래서 오픈소스 커뮤니티에서 파이썬의 개선을 위한 의견이 공유되고(PEP), 이를 바탕으로 업데이트를 하게 되는데 이 업데이트의 최종 의사결정자를 보통 자비로운 종신 독재자라고 부른다. ( 파이썬은 귀도 반 로섬일 것이다.) Python의 특징 플랫폼에 독립적이다. 여기서 말하는 플랫폼은 OS정도로 생각하면 될 듯하다. Windows, Linux, Android, MacOS, IOS 등 프로그램이 실행되는 여러 플랫폼에서 큰 변화없이 python으로 짠 프로그램이 동작한다는 말이다. 인터프리터 언어 그럼 위와같은 플랫폼 독립적인 특징이 어떻게 가능한 것일까? 먼저 ..