파이썬 기초 27

파이썬(PYTHON) 클린코드 #10_ SOLID, 의존성 역전 원칙(DIP)

안녕하세요. 문범우입니다.이번 포스팅에서는 SOLID 원칙 중 마지막 원칙인, 의존성 역전 원칙(Dependency Inversion Principle)에 대해서 알아보도록 하겠습니다. 1. DIP(Dependency Inversion Principle) 우선 의존성 역전 원칙(DIP)의 정의에 대해서 알아보자. 의존성 역전 원칙은, 추상화를 통해 세부 사항에 의존하지 않도록 해야 하지만, 반대로 세부 사항(구체적인 구현)은 추상화에 의존해야 한다는 원칙이다. 쉽게 말해서, 보다 고수준 모듈(클래스)은 보다 저수준 모듈(클래스)에 대해 의존하면 안된다는 것이고, 의존하지 않는다는 것은 저수준 모듈의 변경이나 추가 등에 있어서 변경점이 없어야 한다는 것이다. 파이썬이라는 언어의 특성상 융통성이 있으며, 동..

파이썬(PYTHON) 클린코드 #8_ SOLID, 리스코프 치환 원칙(LSP)

안녕하세요. 문범우입니다.이번 포스팅에서는 SOLID 원칙 중, 리스코프 치환 원칙(Liskov Substitution Principle)에 대해서 알아보도록 하겠습니다. 1. LSP(Liskov Substitution Principle) 리스코프 치환 원칙은, SOLID 원칙 중에서도 많은 분들이 헷갈려하거나 어려워하는 원칙이다.리스코프 치환 원칙에 대한 정의(LISKOV 01)는 다음과 같다.만약 S가 T의 하위 타입이라면, 프로그램을 변경하지 않고 T타입의 객체를 S타입의 객체로 치환 가능해야 한다. 이것이 어떤 의미일까?필자가 공부하고 있는 "파이썬 클린코드" 서적에서는 다음과 같이 이야기한다. LSP의 주된 생각은 어떤 클래스에서든 클라이언트는 특별한 주의를 기울이지 않고도 하위 타입을 사용할 ..

파이썬(PYTHON) 클린코드 #7_ SOLID, 개방 폐쇄 원칙(OCP)

안녕하세요. 문범우입니다.이번 포스팅에서는 SOLID 원칙 중, 개방 폐쇄 원칙(Open/Close Principle)에 대해서 다뤄보도록 하겠습니다. 1. OCP(Open/Close Principle) 개방 폐쇄 원칙(Open/Close Principle)이란 소스가 기능 확장에는 열려있지만, 기능 수정에는 닫혀있어야 한다는 원칙이다. 보다 쉽게 말해서, 새로운 기능을 추가함에 있어서는 신규 기능에 대한 소스 추가만 진행해야 하고 기존의 코드를 수정해야 하는 일은 없어야 한다는 것이다.만약, 새로운 기능을 추가하는데에 있어서 기존의 코드를 수정해야 한다면 기존의 코드가 좋지 않게 디자인 되었다는 것으로 생각할 수 있다. 바로 예제를 통해 확인해보도록 하자. 다음의 코드는 OCP가 잘 지켜지지 못한 코드..

파이썬(PYTHON) #25_ 파이썬 패키지 등록하기 (pip 배포하기)

안녕하세요. 문범우입니다.이번 포스팅에서는 파이썬 패키지를 배포하는 방법에 대해서 함께 살펴보도록 하겠습니다. 1. pip: 파이썬 패키지 관리자 파이썬 패키지를 배포하는 방법에 대해 설명드리기에 앞서 간단하게 pip, 파이썬 패키지 관리자에 대해 짚고 넘어가보겠습니다.파이썬을 공부하고 어느정도 사용을 해본 분들이라면 자연스럽게 pip를 사용해 보셨을 것이라고 생각합니다. 가령, 데이터 분석을 위해서 주로 numpy나 pandas, 웹 개발을 할 때에는 django, flask 등을 이용하기 위해 아래와 같이 pip를 이용하여 필요한 라이브러리를 다운받아 사용하셨을 겁니다. 1pip install cs 이때 우리가 사용하는 pip는 무엇일까요?pip란, Python Package Index(PyPI)라는..

파이썬(python) #22_ 언더스코어(_)란?

안녕하세요. 문범우입니다.이번 포스팅에서는 파이썬에서 사용되는 언더스코어(_)에 대해서 정리해보고자 합니다.언더바라고도 읽는, ' _ ' 와 같은 표시를 언더스코어라고 하는데 이것이 파이썬에서는 보다 특별한 의미를 가지고 사용되는 경우가 있습니다. 어떤 의미로 어떻게 사용되는지 하나씩 알아보도록 하겠습니다.1. 값을 무시하고 싶은 경우 제일 먼저 알아볼 경우는 값을 무시하고 싶은 경우입니다. 물론 쓰레기 변수를 만들어서 사용해도 되겠지만 언더스코어를 사용하는 경우 더 깔끔하고, 코드를 확인할 때 사용하지 않는 값임을 나타내기 때문에 보다 직관적일 수 있다고 생각합니다.사실상, 값을 무시하는 경우가 언제 필요할까? 라는 생각이 드시는 분도 있겠지만 간단하게는 아래와 같은 코드에서 값을 무시할 경우가 생깁니..

파이썬(python) #21_ 정규 표현식::메타문자 총 정리!

안녕하세요. 문범우입니다.이번 포스팅에서는 정규표현식에서 사용되는 메타문자에 대한 총정리를 해보려 합니다.지난 포스팅에서 기본적인 메타문자들을 정리해보았는데, 그 내용들을 포함해서 함께 정리해보도록 하겠습니다.정규표현식에 대해 조금 더 궁금하신 분들은 아래의 포스트를 참고해주시길 바랍니다 :) 정규표현식이란? (1) 정규표현식이란? (2) 1. 백슬래시(\) 우리가 메타문자에 대해 총 정리를 하기 앞서서, 정규표현식을 사용할 때 혼란이 될 수도 있는 백슬래시(\)에 대해서 잠깐 이야기해보겠습니다.먼저 백슬래시는 보통 자판의 엔터위에 있는 버튼을 통해 입력할 수 있습니다. 우리가 정규표현식을 이용하여 TEST라는 파일에서 "\section" 이라는, 백슬래시를 포함한 문자열을 찾으려고 한다고 생각해봅시다...

#6_ 파이썬으로 링크드 리스트(Linked list) 구현하기

안녕하세요.이번 포스팅에서는 파이썬을 이용하여 링크드 리스트를 구현해보도록 하겠습니다. 1. 링크드 리스트(Linked list)란? 먼저 링크드 리스트가 무엇인지 간단히 살펴보도록 하겠습니다. 링크드 리스트는 위와 같이 세개의 형태를 가지고 있습니다.그림에서 두번째, 양방향 연결 리스트는 *Prev 가 자신보다 앞의 요소를 가르키는 것입니다.단순히 단방향 연결리스트를 구현하면 어떤 요소의 앞의 요소를 탐색하기 위해서 결국 다시 처음부터 검색을 진행해야 하는 일이 발생할 수 있기 때문에 수행능력이 보다 안좋을 수 있습니다.이러한 것을 보완하기 위해 양방향 연결 리스트 및 환형 연결 리스트라는 개념이 있는데, 이들은 단방향 연결 리스트보다 구현하기는 상대적으로 어려울 수 있지만 앞에서 말씀 드린 상황과 같..

#4_ 파이썬으로 스택(Stack) 자료구조 구현하기

안녕하세요.최근 파이썬을 공부하면서 기본적인 자료구조 알고리즘을 구현해보고자 생각이 들어서 포스팅을 하게 되었습니다.제 노트북이 고장나서 노트북은 센터에 고이고이 잠들어있기 때문에.. 구름IDE로 코딩을 진행하였습니다.나름 괜찮다고 생각이 드네요. 그럼 파이썬으로 구현한 스택 자료구조를 소개해드리도록 하겠습니다.1. 스택이란? 먼저 스택 자료구조를 구현하기 전에 간단하게나마 해당 자료구조에 대해 알아보도록 하겠습니다. 위의 그림과 같이 스택은 push와 pop이라는 기능을 가지고 있습니다.스택 자료구조는 말 그대로, 쌓아 올리는 것과 같은 자료구조입니다.즉, push은 item을 쌓아올리는 기능이고, pop은 쌓여져 있는 item에서 제일 위의 것을 꺼내는 작업입니다.따라서 스택 자료구조는 Last In..

파이썬(python) #19_ 정규 표현식이란? (1)

안녕하세요. 문범우입니다. 지난 포스팅에서 파이썬의 내장 및 외장함수까지 알아보며 파이썬에 대한 전체적인 설명은 마무리 된 것 같습니다.추가적으로 이번 포스팅에서는 정규 표현식이라는 개념에 대해서 알아보려고 합니다.정규 표현식은 파이썬 이외에도 많은 곳에서 사용될 수 있습니다.1. 정규 표현식(Regular Expressions)이란? 정규 표현식(Regular Expressions)은 복잡한 문자열을 처리할 때 사용하는 기법입니다. 위에서도 말씀드렸듯, 파이썬 만의 고유 무법이 아니라 문자열을 처리하는 모든 곳에서 사용되는 것입니다. 즉, 정규표현식을 배우는 것과 파이썬과의 직접적인 연관은 크게 없습니다.정규 표현식은 고급 주제이기 때문에 아직 프로그래밍이 익숙하지 않으신 분들에게는 많이 어려울 수 있..

파이썬(python) #18_ 내장함수와 외장함수

안녕하세요.이번 포스팅에서는 파이썬의 내장함수 및 외장함수에 대해서 알아보도록 하겠습니다.1. 파이썬 내장 함수 이번에는 파이썬의 내장 함수 몇가지에 대해서 알아보도록 하겠습니다. 여기서 언급하는 내장함수들 이외에도 매우 많은 내장함수가 있으니, 추가적으로 찾아보면서 공부하시면 좋을 것 같습니다. all all(x)는 반복 가능한(iterable) 자료형 x를 입력 인수로 받아서 x가 모두 참이면 True를, 거짓이 하나라도 있으면 False를 반환합니다. any any(x)는 반복 가능한(iterable) 자료형 x를 입력 인수로 받아서 x 중 하나라도 참이면 True를, 하나라도 없으면 False를 반환합니다. dir dir은 객체가 자체적으로 가지고 있는 변수나 함수를 보여줍니다. 위의 예는 리스트..