no image
c++ 객체 반환, 포인터 관리, 스마트 포인터
객체를 반환하는 3가지 형태 1. 정적으로 생성한 객체 반환 TestInstance TTest::getTestInstance(int i) { TestInstance test_instance{i}; return test_instance; } int main() { std::cout
2024.04.23
no image
윈도우10 Qt6/ Qt Creator13/ Opencv4.9 연동, 설정
Window Qt6 OpenCV 연동 cv2 연동 확인용으로, 별도의 빌드 없이 windows를 다운로드하고 extract 해준다. 윈도우는 시스템 환경 변수 path에 dll 폴더 위치를 넣는다. C:\Users\~~\opencv\build\x64\vc16\bin 환경 변수가 잘 들어갔는지 opencv_version을 입력해 확인한다. Qt를 설치할 때, 여러 옵션이 있는데 for desktop dev를 고르면 오른쪽과 같이 체크가 되는 듯하다. Custom으로 설치해도 무관한데 윈도우의 경우 MSVC 옵션들을 선택해 주자. Qt Creator(윈도우) 에서 MinGW(gcc/g++) 컴파일러로 cv2를 사용하려면 cv2를 MinGW로 빌드해줘야 한다. Qt creator에서 New Project를 만..
2024.04.15
no image
c++ inline compile
클래스 정의에서 함수의 정의는 컴파일된 이후에 링커에 의해 하나의 실행파일로 묶이기만 하면 된다. //Car.h #ifndef __Car_h__ #define __Car_h__ class Car { private: int fuelGauge; public: void getFuelGauge(); void setFuelGauge(int fuel); }; #endif //Car.cpp #include "Car.h" #include inline void Car::getFuelGauge() { printf("now fuel : %d", this->fuelGauge); } inline void Car::setFuelGauge(int fuel) { this->fuelGauge = fuel; } //Main.cpp #i..
2024.04.08
no image
열혈 C++ 프로그래밍) Part 1
C++은 함수 호출 시 매개변수 자료형이 안 맞아도 에러를 던지지 않고(경고만 함) 자동 형변환 되고 데이터 손실이 난다. 인라인 함수 inline int add(int a, int b) { return a + b; } inline 키워드를 사용해 함수를 정의할 수 있다. inline 키워드를 사용하면 해당 함수가 호출되는 대신 컴파일러가 해당 함수의 코드를 호출 지점에 직접 삽입하려고 시도한다. 이로 인해 호출 오버헤드가 제거되어 실행 시간을 단축할 수 있다. 하지만 코드 크기가 증가한다 그리고 컴파일러에게 인라인으로 처리하도록 제안하는 것으로 수용하지 않을 수도 있다. 매크로 함수 #define SQUARE(x) ((x) * (x)) ... void main(void) { cout
2024.03.04
no image
Jmeter STOMP test (WebSocket Samplers)
Jmeter STOMP test (WebSocket Samplers) jmeter plugins manager를 설치하고 WebSocket Samplers by Peter Doornbosch를 설치한다. BeanShell Sampler에 자바 문법을 작성할 수 있다. JAVA에서 특수문자(큰따옴표)를 String에 넣으려면 앞에 역슬러쉬를 붙여야 한다. 그래서 STOMP_SEND의 경우 { "type" : "talk" }은 { \\"type\\":\\"talk\\" } 다음과 같이 작성한다. ( 역슬러쉬 1개인데 1개로 작성하면 구글 Search Console에 파싱할 수 없는 구조화된 데이터 문제가 감지된다고 나와서 2개로 표현함 ) STOMP 프레임은 이전 글을 참고 Stomp protocol Sto..
2024.01.27
no image
python) asyncio/코루틴, 동시성과 병렬성
병렬성 (Parallelism) task1 ====== task2 ====== task3 ====== 실제 동시에 수행 동시성 (Concurrency) task1 === === task2 === === task3 === === 실제 동시에 수행하진 않고 여러 task를 진행 coroutine co(협동) + routine = 메인 루틴과 동등한 관계를 가진 루틴으로 메인 루틴과 함께 순차적으로 실행된다. asyncio 애플리케이션을 작성하는데 선호되는 방법이다. 서브루틴과 차이는 실행 후 종료되는게 아닌 대기(suspend) 상태가 가능하다는 것, 그래서 동등한 관계라 말한다. 별도의 쓰레드에서 실행되는게 아니므로 문맥 교환 비용이 발생하지 않는다. asyncio 코루틴을 기반으로 비동기 프로그래밍을 위..
2023.12.13
no image
java thread (자바의 정석)
자바의 정석(남궁성)을 읽으면서 Thread 싱글 코어에서는 멀티 쓰레드로 하나의 작업을 수행해도 싱글 쓰레드로 작업을 수행할 때 보다 더 시간이 걸린다. 이유는 th1 -> th2 -> th1 -> th2 의 순차 반복일 뿐이여서 오히려 context switching 비용만 추가로 생긴다. 멀티 코어에서는 효과가 있다. th1과 th2가 겹쳐서 수행될 수 있기 때문이다. (하나의 코어는 하나의 쓰레드를 실행한다는 전제) (여기서 쓰레드를 tomcat 쓰레드 풀의 쓰레드와 연관지어 생각하지 말자.) java가 JVM 에서 동작하므로 os에 독립적이라고 하지만 실제로 os 종속적인 부분이 몇 가지 있는데 쓰레드도 그 중 하나이다. JVM 의 쓰레드 스케쥴러에 의해서 어떤 쓰레드가 얼마동안 실행될 것인지 ..
2023.12.10
no image
python GC(Garbage Collector)
python Garbage Collector 기본적으로 Reference Counting으로 해제하면서 Generational Garbage Collection이 세대별 임계점마다 동작하는 듯 하다. Reference Counting 참조하는 카운트가 0이 되면 garbage를 정리한다. Generational Garbage Collection 순환 참조의 경우 카운트가 0이 될 수 없는 문제를 해결할 수 있는 GC이다. 세대와 임계점이라는 개념이 있다. import gc print(gc.get_threshold()) #(700, 10, 10) 튜플의 첫 번째부터 0세대, 1세대, 2세대를 나타낸다. 0세대 객체의 수가 700개(임계값)를 넘지 않으면, 순환 참조를 비롯한 garbage들은 메모리에 할당..
2023.10.22
no image
java factory method pattern
Factory Method Product 객체를 직접 생성하지 않고 Factory 클래스에서 Product를 만든다. 여러 Product 구현체가 있고 그 Product 를 만드는 Factory 구현체가 있다. 각각의 Factory 구현체가 그에 해당하는 Product 객체 생성의 책임을 가지고 있다. 객체 생성에 필요한 과정과 메서드를 템플릿 처럼 구성해놓고 과정과 메서드의 내부 동작은 Product 구현체와 Factory 구현체에서 유연하게 만들 수 있다. 장점 생성자와 구현 객체의 강한 결합을 피할 수 있다. 팩토리 메서드를 통해 객체 생성 후 공통으로 할 일을 수행하도록 지정할 수 있다. 캡슐화, 추상화를 통해 생성되는 객체의 구체적인 타입을 감출 수 있다. SRP(Single Responsibi..
2023.09.06