본문 바로가기
728x90
반응형

파이썬18

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.
01 디자인 패턴 개요: 객체지향 프로그래밍 알아볼 내용 - 객체지향 프로그래밍의 이해 - 객체지향적 디자인 패턴의 원리 - 디자인 패턴의 종류와 맥락에 대한 이해 - 동적 프로그래밍 언어 패턴 - 생성과 구조, 행위 패턴 [객체지향 프로그래밍] 디자인 패턴을 설명하려면 그전에 객제지향 프로그래밍(OOP)의 기본 원리와 특히 파이썬의 객체지향 패러다임을 알아야 한다. [기본적인 객체지향 설명] ex. Car 객체에는 속성: 연료잔량, isSedan, speed, steering wheel, coordinates 등 함수: accelerate() - 속도 조절, takeLeft() - 좌측 변경 등 파이썬은 객체지향 언어이다. '파이썬의 모든 것은 객체'라는 말이 있듯이 파이썬의 클래스 인스턴스와 변수는 개별적인 메모리 공간에 저장된다. 클래스 인스.. 2023. 12. 6.
[OpenCV 오류] THRESH_OTSU mode: > 'src_type == CV_8UC1 || src_type == CV_16UC1' import cv2 img = cv2.imread('./image1.png') _, thresh = cv2.threshold(img, 0, 255.0, cv2.THRESH_BINARY + cv2.THRESH_OTSU) 보통 이미지의 특정 포인트를 탐지하거나 Segmentation Task를 다루다보면 threshold를 기준으로 Binary 이미지로 바꾸어주는 threshold 함수를 자주 접할 수 있을 것입니다. 보통 Binary 이미지를 만들 때, 특정 threshold (임계값)를 사람이 지정해 주어야하는데, 오츠 이진화 방법은 threshold를 지정하지 않고 모든 경우의 수 중에서 적절한 바이너리한 두 부류의 명암 분포가 균일할 때를 선택해주는 방법으로 자주 사용됩니다 (방법에 대한 더 자세한 .. 2023. 4. 5.
파이썬 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.
멀티 스레드(Multi Thread) & 멀티 프로세스(Multi process) Computer Science 프로세스(Process)란? 프로그램 : 어떤 작업을 위해 실행할 수 있는 파일. 정적인 개념 프로세스 : 프로그램이 메모리에 올라와 cpu를 할당받고 프로그램이 실행되고 있는 상태. 동적인 개념 프로세스 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 메모리에 올라와 실행되고 있는 독립적인 인스턴스 (개체) 운영체제로부터 시스템 자원을 할당받는 작업 단위 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가진다 프로세스는 독립된 메모리 영역 (code, data, stack, heap)을 할당 받는다. 프로세스는 별도의 주소 공간에서 실행되므로, 다른 프로세스의 주소 공간(변수, 자료구조 등)에 접근할 수 없다. 프로세스 간의 데이터 통신을 위해 IPC(inte.. 2023. 2. 9.
Python만으로 어플을 만들어보자 Kivy 빌드 with 구름 IDE, goorm IDE 구름IDE에서 빌드하기 + 폰에 설치하기 참고영상: https://youtu.be/Pi510YawopE 1. 구름 컨테이너(가상머신) 만들기 구름IDE - 설치가 필요없는 통합개발환경 서비스 구름IDE는 언제 어디서나 사용 가능한 클라우드 통합개발환경(Integrated Development Environment IDE)을 제공합니다. 웹브라우저만 있으면 코딩, 디버그, 컴파일, 배포 등 개발에 관련된 모든 작업을 클라 ide.goorm.io 1. 구름IDE가 처음이시라면 회원가입 후 [콘솔로 가기]를 눌러 콘솔에 접속해주세요 2. [새 컨테이너]를 만들어줍니다. [새 컨테이너]를 누르면 만들 수 있습니다. 새 컨테이너를 클릭합니다. 적당히 이름을 부여합니다. 소프트웨어 스택으로 Python을 선택합니다.. 2023. 2. 8.
728x90
반응형