728x90 반응형 파이썬16 02 싱글톤 패턴 & 게으른 초기화 "게으른 개발자"의 유래 한국에서 익히 사용되는 개발 언어(?)이다. '긍정적인 의미'로는 일부 개발자들은 혁신적이고 효율적인 방법을 찾기 위해 노력하면서, 기술적인 문제를 해결하는 데 시간을 들이고 고민하는 모습을 기리는 것이다. 개발 작업에서 늘 새로운 방법과 해결책을 찾기 위해 고심하고 실험하는 과정에서 '게으름'이라는 말은 실제로 창의적인 사고와 혁신을 이끌어냈다는 관점에서 긍정적으로 받아들여진다. 반면, '부정적인 의미'로는 개발자들이 일을 귀찮아하거나 적극적으로 문제를 해결하지 않는다는 부정적인 해석으로도 사용될 수 있다. 이는 느슨하거나 무관심한 태도로 인해 일정을 맞추지 않거나 문제에 대처하지 않는 상황을 비판하는 의미로 사용될 수 있다. 게으른 초기화(Lazy instantiation):.. 2023. 12. 21. 02 싱글톤 디자인 패턴 싱글톤 디자인 패턴 개요 싱글톤 디자인 패턴은 글로벌하게 접근 가능한 하나의 객체를 제공하는 패턴이다. 싱글톤 디자인 패턴은 주로 하나의 인스턴스를 공유하여 로깅, 데이터베이스 관련 작업, 프린터 스풀러 등과 같은 동일한 리소스에 대한 동시 요청의 충돌을 방지하는데 사용된다. ex) 1) DB작업 수행 시 일관성 유지를 위해 하나의 데이터베이스 객체를 사용하는 경우 2) 로그를 기록하는 작업 시 여러 서비스의 로그를 하나의 로그 파일에 순차적으로 동일한 로깅 객체를 사용해 적제하는 경우 [싱글톤 디자인 패턴의 목적] 클래스에 대한 단일 객체 생성 전역 객체 제공 공유된 리소스에 대한 동시 접근 제어 위와 같은 다른 언어의 경우 생성자(Constructor)를 private로 선언하고 객체를 초기화하는 s.. 2023. 12. 18. 01_02 디자인 패턴의 개념 디자인 패턴의 JAVA를 기반으로 제시된 소프트웨어 설계 단계에서 흔히 발생하는 여러 문제의 해결책이며, 디자인 패턴이라는 개념은 발명보다 발견에 가깝습니다. [디자인 패턴의 주요 기능] - 언어에 독립적이며 모든 프로그래밍 언어에 적용할 수 있다.(python에도???) - 새로운 패턴이 아직도 연구되고 있다. - 목적에 맞게 변경될 수 있기 때문에 개발자에게 유용하다. [디자인 패턴에 대한 개발자의 인식] - 디자인 패턴은 모든 디자인 문제에 만병통치약이다.(???! 그런가?) - 문제를 해결하는 훌륭한 해결책이다. - 대부분의 개발자가 인정하는 해결책이다. - 패턴이라는 단어는 디자인에 반복적인 요소가 있다는 것을 나타낸다. 책의 주장: 설계 단계에서 뿐만 아니라 개발 단계에서도 디자인 패턴에 대한.. 2023. 12. 15. 01_01 디자인 패턴 개요: 객체지향 디자인의 기본 원칙 개방-폐쇄 원칙(The open/Close Principle) 정의: 클래스와 객체, 메소드 모두 확장엔 개방적이고 수정엔 폐쇄적이어야 한다는 원칙이다. 클래스 또는 객체의 기능을 확장할 때, 기본 클래스 자체를 수정하지 않아도 되도록 클래스와 모듈을 설계해야 한다. 클래스 확장만으로 새로운 기능을 구현할 수 있어야 한다. 추상(abstract)클래스를 수정하지 않고 확장해서 새로운 기능을 추가하는 것이 개방-폐쇄 원칙을 따르는 것이다. [원칙의 장점] (1) 기본 클래스를 변경하지 않기 때문에 문제가 발생할 가능성이 낮다. (2) 기본 버전과의 호환성 유지가 수월하다. 제어 반전 원칙(The Inversion of Contral Principle) 정의: 상위 모듈은 하위 모듈에 의존적이지 않아야 한다.. 2023. 12. 6. 파이썬 GIL 극복을 위한 방법 파이썬에서는 Global Interpreter Lock(GIL)이라는 메커니즘으로 인해, 동시에 하나의 스레드만 파이썬 코드를 실행할 수 있습니다. 이는 멀티코어 CPU를 사용하는 경우에도, 파이썬의 병렬 처리 성능을 제한하는 요소가 됩니다. GIL을 극복하기 위해서는 다음과 같은 방법들이 있습니다. 멀티 프로세싱: 파이썬에서는 멀티 프로세싱 모듈을 통해 병렬 처리를 구현할 수 있습니다. 각 프로세스는 독립적인 GIL을 가지기 때문에, 여러 개의 프로세스를 이용하여 병렬 처리를 구현할 수 있습니다. 다만, 프로세스 간의 통신이 필요한 경우에는 추가적인 구현이 필요합니다. C extension 모듈: 파이썬의 C extension 모듈을 이용하여 GIL을 우회할 수 있습니다. C extension 모듈은 .. 2023. 3. 20. [중급 파이썬_1]*args와 **kwargs c언어의 포인터!!!!???? 놀라지 마세요..ㅎ 파이썬에서, *, **는 주소값을 저장하는 의미가 아닙니다. 바로 여러 개의 인수를 받을 때, 키워드 인수를 받을 때 사용하는 표시입니다. 1. *args - *args: *arguments의 줄임말 즉, 어떤 단어를 사용하던지 상관음 없다...! - 사용이유: 여러 개(복수)의 인자를 함수로 받고자 할 때 사용 ex) 내가 영어공부를 할 때, 하루에 외우려고 하는 영어 갯수가 매일 다를 수 있잖아요?ㅎ 즉, 사용자가 입력을 '얼마나' 넣을지 알 수가 없는 것입니다. 이러한 경우 *args를 인자로 받습니다. 2. **kwargs - *kwargs: *keyword arguments의 줄임말로써 지워드를 제공 - 형태: 키워드 = 특정 값 (딕셔너리 형태.. 2023. 2. 16. Python만으로 어플을 만들어보자 A SimplePaint App with kivy 그림판 어플을 만들어보자 1. Adding Behaviour (touch -> new color) from random import random from kivy.app import App from kivy.uix.widget import Widget from kivy.graphics import Color, Ellipse, Line class MyPaintWidget(Widget): def on_touch_down(self, touch): color = (random(), random(), random()) #1 with self.canvas: Color(*color) #2 d = 30. Ellipse(pos=(touch.x - d / 2, touch.y - d / 2), size=(d, d)) tou.. 2023. 2. 8. 파이썬 언더스코어(_)에 대하여 파이썬에서 언더스코어(underscore, _)는 특별하다. 타 언어에서 언더스코어(_)는 단지 스네이크 표기법의 변수나 함수명을 위해서만 사용되어지는 반면 (물론 그렇지 않은 언어도 있다), 파이썬에서는 이 문자의 의미가 다양하다. 아마 파이썬 프로그래머라면 for _ in range(10)나 __init__(self)등의 문법들이 굉장히 익숙할 것이다. 이번 포스트에서는 이 언더스코어(_)가 언제 어떤 의미로 쓰이는지에 대해 다루어보려고 한다. 크게 기술적인 내용은 아니지만 파이썬 프로그래머로서 알아두면 좋을 것 같아 정리해보려고 한다. 파이썬에서 언더스코어(_)는 다음과 같은 상황에서 사용되는데 크게 5가지의 경우가 있다. 인터프리터(Interpreter)에서 마지막 값을 저장할 때 값을 무시하고 .. 2023. 1. 26. Python만으로 어플을 만들어보자 (create an application) kivy 실행해보기 kivy도 설치했으니 이제 kivy공식문서를 따라 어플리케이션 개발을 진행해보고자 합니다. kivy에서는 kivy를 익히기 위한 튜토리얼로 단순한 형태의 핑퐁게임개발을 제공하고 있습니다. 초창기 컴퓨터에 들어가는 게임처럼 생겼군요 그런데 시작 하기 전에 먼저 Create an application 을 보고 오라고 하는군요! 그럼 보고옵시다. Create an application 여기서는 더욱 간단한 형태의 어플리케이션 구동을 설명하고 있습니다. 우선 가이드의 코드를 그대로 따라해 보겠습니다. kivy_venv를 생성했던 디렉토리에 main.py 파일을 생성한 뒤, 공식문서에 있는 코드를 그대로 복사해 넣어보겠습니다. import kivy kivy.require('2.1.0') # r.. 2023. 1. 20. 파이썬 type hints 파이썬은 동적으로 입력되는(dynamically typed)언어입니다. 그래서 다음과 같은 코드도 동작이 됩니다. name = '딥러닝 마스터' name = 26 name = True 'name'변수는 1. 'string(문자열)'로 시작하여 2. 'number(숫자)'가 되고 3. 마지막엔 boolean이 됩니다. 이러한 코드는 동작이 될지는 몰라도 유저 장치에서 실행되는 도중에 발생하는 수많은 런타임 에러의 원이이 되기도 합니다. def add(a, b, c): return a + b + c add(1, 2, 3) => 6 'a', 'b', 'c'를 취하고 'a+b+c'를 리턴하는 함수가 있습니다. 사람은 그 함수를 숫자로만 불러야 한다는 것을 알지만 파이썬은 그 사실을 알지 못합니다!!! 파이썬은 .. 2023. 1. 16. 이전 1 2 다음 728x90 반응형