[디자인패턴] 팩토리 메서드(Factory Method) 패턴이란? (+ GoF Factory Method Pattern)
·
공부/소프트웨어공학
Factory Method 패턴은 Creational pattern이다. 클래스를 선언할 때 new 구체적인클래스이름(); 처럼 내가 사용할 클래스를 구체적으로 명시하는 동시에 사용하는 경우가 있다. 사용할 클래스가 때때로 변경된다면 그때마다 new를 사용, 객체를 생성하게 된다. 이전에 배운 Strategy 패턴을 사용하여 전략을 변경하면 되는 것 아닌가요? 라고 물을 수 있지만 사용하는 방식이 다르다. 전략 변경만으로도 클래스가 정상 작동하면 좋겠지만 전략에 따라 요구사항이 달라지거나 동적으로 전략이 변경되어야 한다면 Strategy만으로는 클래스 생성을 감당할 수 없다. 전략을 지원하는 구체적인 클래스를 생성하고 기존 메서드도 변경되어야 한다. 👉 주어진 기능을 제공하는 클래스 생성 작업을 별도로..
[디자인패턴] 템플릿 메서드(Template Method) 패턴이란?
·
공부/소프트웨어공학
Template Method 패턴은Behavioral design pattern이다. 템플릿이라는 말은 평소에도 많이 사용하기에 익숙하다. 템플릿 메서드 패턴이라는 말을 들으면 대충 무슨 역할을 하는지 알 수 있을 텐데 느끼는 것 그대로다! 템플릿 메서드 패턴은 상위 클래스에서 전체적인 알고리즘을 구현하고 다른 부분은 하위 클래스에서 구현할 수 있도록 하는 디자인 패턴이다. 알고리즘 세부 동작을 하위 클래스에서 구현할 수 있어 유연성과 확장성이 높고 코드 중복을 줄이고 유지보수를 쉽게 할 수 있다. 현대사에서 나온 모터를 사용해 구동하는 엘리베이터가 있다고 하자. 모터가 확장될 것에 대비해 클래스를 상위 클래스와 하위 클래스로 분류하고 확장에 용이하도록 만든 모습이다. 자랑스럽지 않은가?! 기대에 맞춰 ..
[디자인패턴] 데코레이터(Decorator) 패턴이란?
·
공부/소프트웨어공학
Decorator 패턴은 Structural Patten이다. 말 그대로 프로그램을 꾸미면서 확장하는 형식이다. 도로를 그리는 프로그램이 있다. 기본프로그램에서 확장해 교통 상황, 차선, 교차로 등을 그릴 수 있도록 확장하려 한다. 이렇게 새로운 기능이 추가될 때마다 기존 코드를 활용하지 못하고 계속 extends를 통해 클래스를 추가하는 게 가장 단순하다. 이는 SOLID 원칙의 LSP를 위반한다. 기능을 재사용하기 위해 일반화 관계를 사용해서는 안된다. 일반화 관계를 사용하지 말고 연관 관계를 사용하는 방식으로 프로그램을 수정해보자.이때 Display가 자기 자신을 연관 관계로 맺는 이유가 헷갈렸는데 알고 보면 단순하다. RoadDisplay의 하위 개념으로 있는 클래스인 RoadDisplay, Ro..
[디자인패턴] 빌더(Builder) 패턴이란?
·
공부/소프트웨어공학
Builder 패턴은  Creational Design Pattern이다. 책 정보를 정리하는 프로그램을 만들고자 한다. 책의 정보에는 제목, isbn, 저자, 출판사, 출판연도 등이 담겨있다. 나는 필수 정보로 제목과 isbn이 들어가게 하고 싶다. 다른 정보는 있어도 좋고 없어도 좋다! 1. Telescoping Constructor Pattern(점층적 생성자 패턴)평소 알고 있는 정보로 프로그램을 작성한다면public class Book { private String title; private String isbn; private String author; private int pages; private String category; public Book(Strin..
[디자인패턴] 옵서버(Observer ) 패턴이란? 또는 Event-Listener
·
공부/소프트웨어공학
Observer 패턴은 Behavioral Design Pattern이다.개인적으로는 Observer 패턴보다 event-listener라는 이름이 더 직관적이라고 생각한다. 하지만 범용적인 용어를 사용하겠다. 휴대폰 가게 A와 손님이 있다고 가정해보자. 손님은 새로운 아이폰이 갖고 싶어 매일같이 가게에 방문에 아이폰이 출시되었는가 확인한다. 새로운 기기가 한 달 뒤에 나올지 일년 뒤에 나올지는 아무도 알 수 없다. 손님의 무의미한 방문은 계속된다.휴대폰 가게 B에서는 다른 방식을 택한다. 새로운 휴대폰이 나올 때마다 가게 인근에 사는 모든 사람들에게 이메일을 전송해 휴대폰이 출시되었음을 알린다. 일부 사람에게는 희소식이 될 수 있지만 이 소식에 관심없는 사람에게는 스팸 메일에 불과하다.문제점휴대폰 가게..
[디자인패턴] 커맨드(Command) 패턴이란?
·
공부/소프트웨어공학
Command 패턴은 Behavioral Design Pattern이다. 전등을 키는 버튼을 만든다고 해보자위와 같은 시스템에서 버튼을 눌렀을 때 Lamp가 아니라 Alarm이 켜지도록 하려면 어떻게 해야 하는가? 🤔또는 버튼이 한 번 눌리면 Lamp가 켜지고 두 번 눌리면 Lamp가 꺼지도록 하려면 어떻게 해야 하는가? 🤔➡️ 기존 코드의 Button(theLamp: Lamp)를 Button(theAlarm: Alarm)으로 변경해야 한다. OCP 위반 OCP를 만족하도록변화를 식별한다. 이번 경우에는 request다. 변화하는 것을 클래스로 분리한다. LampOnCommand, AlarmStartCommand변화하는 개념을 포용하는 개념을 추상 클래스나 인터페이스화한다. Command의 등장!2번..
[디자인패턴] 스트래티지(Strategy) 패턴이란?
·
공부/소프트웨어공학
쉽게 말해! 알고리즘의 변화를 캡슐화로 처리하자 Strategy 패턴은 Behavioral Pattern이다. 이처럼 Robot을 extends하는 두 개의 디테일한 로봇 태권브이와 아톰이 있다고 하자. 태권브이의 move는 걷기이며 attack은 미사일을 사용한다. 아톰의 move는 날기이며 attack은 펀치이다.public abstract class Robot { private String name; public abstract void move(); public abstract void attack(); public Robot(String name) { this.name = name; } public String getName() { return name; }}-pub..
[디자인패턴] 싱글톤(Singleton) 패턴이란?
·
공부/소프트웨어공학
싱글톤 패턴은 Creational Design Pattern이다.무엇인가?- 단 하나의 클래스 객체(instance)가 생기도록하는 패턴이다. 어디서나 접근 가능하다.​왜 사용하나?- 어디에서 접근 가능한 객체가 필요한 경우가 생기기 때문이다.최초로 객체를 생성하고 난 뒤에 추가로 객체를 생성할 필요가 없으니 메모리, 속도 면에서 이점이 있다. public static Logger getInstance() { if (instance == null) instance = new Logger(); return instance; }이렇게 ​instance가 null이라면 새로운 instance를 생성하고, instance가 이미 있다면 기존 instance를 사용하는 방식이다. 싱글 스레드에서는 아무 문..
mac python opencv 설치하기
·
카테고리 없음
sudo python3 -m pip install --upgrade pip setuptools wheelsudo pip3 install opencv-python
Defaulting to user installation because normal site-packages is not writeable
·
2024-여름
일반적으로 pip upgrade를 하면 사라지는 오류다pip install --upgrade pip이 코드 실행 후에 다시 pip install 시도한다~
AssertionError: Torch not compiled with CUDA enabled
·
2024-여름
GPU와 Pytorch가 맞지 않아 생기는 오류로 내 GPU는 사용할 수 있는 종류였지만 에러가 사라지지 않았다.https://developer.nvidia.com/cuda-gpus CUDA GPUs - Compute CapabilityExplore your GPU compute capability and CUDA-enabled products.developer.nvidia.com 위 사이트에 들어간다. 자신이 사용하는 GPU 종류에 맞게 클릭해보면 지원 여부를 확인할 수 있다. 기존 torch를 삭제하고 재설치하는 코드다. pip uninstall torchpip cache purgepip install torch -f https://download.pytorch.org/whl/torch_stable...
UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 9: illegal multibyte sequence
·
2024-여름
보통 한글을 읽으려 할 때 나는 오류, open('text.txt',encoding='UTF-8') 인코딩 타입을 알려준다!
ModuleNotFoundError: No module named ‘fastai.callback.all’; ‘fastai.callback’ is not a package
·
2024-여름
!pip install fastbook --upgrade fastbook 업그레이드하시면 해결됩니다. 반드시 노트북을 재시작하세요!
IProgress not found. Please update jupyter and ipywidgets.
·
2024-여름
pip install ipywidgets 설치해주시면 정상 사용 가능합니다
pip install 오류 : This error might have occurred since this system does not have Windows Long Path support enabled.
·
2024-여름
ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: 'C:\\Users\\SG\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python312\\site-packages\\tensorflow\\include\\external\\com_github_grpc_grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\client_load_reporting_filter.h' HINT: This erro..