Language 40

[Python] 클립 보드 with Python

클립 보드 개요 클립 보드 기능은 우리가 효율적으로 데이터를 관리하고 사용할 수 있게 한다. 우리는 일반적으로 텍스트를 복사하거나 붙여 넣을 때 이 클립 보드를 사용하지만, 이보다 더 다양한 활용법이 존재한다. 지난 게시글에서 클립 보드에 저장된 이미지를 특정 하위 디렉토리에 png 형식의 파일로 저장하는 방법에 대해 간략하게 소개하였다. 이번 글에서는 ImageGrab에 대해 좀 더 자세히 탐구하고, 클립 보드를 통한 이미지 관리법에 대해 알아보자. 본문 이 코드는 사용자가 클립 보드에 이미지 파일을 저장한 경우, 해당 이미지를 example.png라는 파일로 저장하는 프로그램이다. 이를 위해선 PIL(Python Imaging Library)이라는 라이브러리를 활용한다. PIL은 파이썬에서 이미지 처..

Language/Python 2023.07.29

[C++] Python 연동 with VS code

C++ Python 연동 개요 간단한 토이 프로젝트를 작업하던 도중, 클립보드를 캡처하는 기능이 필요해졌다. C++로 이를 구현하려고 하니, 윈도 API를 이용하면 가능하다는 걸 알았다. 하지만 이 방법에는 다른 OS와의 호환성이 떨어질 수도 있다는 문제점이 있다. 이에 대한 방안을 찾던 중, 파이썬에서는 이를 쉽게 구현할 수 있다는 걸 알게 되었다. 이번 시간에는 파이썬에서 작성한 코드를 C++에서 호출하는 기능을 알아보도록 하겠다. Python 3.11.4 버전을 쓰고 있으며, visual studio는 2022 버전을 사용하고 있다. 또한, 이를 통해 C++과 파이썬 사이의 간접적인 연동 방법을 알아보겠다. 이런 방법은 프로그래밍 언어 간의 장벽을 넘어, 더 효과적이고 확장 가능한 솔루션을 만들 수..

Language/C++ 2023.07.18

[C++] 진수 변환

진수 변환 개요 프로그래밍에는 여러 가지 다양한 알고리즘이 존재하며, 그중 십진수를 이진수로 바꾸는 알고리즘은 매우 중요한 개념이다. 이진수 변환은 많은 프로그래밍 문제에서 요구되는 기술로서, 백준 1094 막대기 문제나 프로그래머스의 다음 큰 숫자 문제와 같이 이진수에 관한 연산이 필요한 경우가 대표적이다. 이 게시글에서는 C++을 사용하여 십진수를 이진수로 변환하는 방법을 자세히 알아보도록 하겠다. 원리 일반적으로 10진수를 2진수로 변환하는 과정은 다음과 같다. 십진수 n을 2로 나눈 나머지를 구하고, 이 값은 이진수의 가장 낮은 자릿수가 된다. n을 2로 나눈 몫을 새로운 n으로 설정한다. n이 0이 될 때까지 이 과정을 반복한다. 이 원리는 이진수가 2의 지수 형태로 표현되는 것에서 기인한다. ..

Language/C++ 2023.07.06

[C++] CH5 함수와 참조, 복사 (1)

함수와 인자 전달 방식 Call by Value 정의: 호출하는 코드에서 넘겨주는 실인자 값이 함수의 매개 변수에 복사되어 전달되는 방식 특징 함수 내에서 실인자를 손상시킬 수 없음 실인자의 크기가 크면 오버헤드가 발생하여 복사하는 시간이 길어짐 생성자는 실행되지 않고, 소멸자만 실행됨 (생성자와 소멸자 비대칭 문제) Call by Address 정의: 주소를 직접 포인터 타입의 매개 변수에 전달하는 방식 특징 의도적으로 함수 내에서 실인자의 값을 변경시킬 때 사용 원본 객체를 복사하는 시간 소모가 없음 생성자와 소멸자의 비대칭 문제가 없다 함수 호출 시 객체 전달 다음 예제에 있는 각각의 출력문 cout에서 waffle의 radius 값을 생각해보자. // 예제 5-1 #include using nam..

Language/C++ 2023.02.28

[C++] CH4 객체 포인터, 배열, 동적 할당 (2)

객체와 객체 배열의 동적 생성 및 반환 // 예제 4-7 #include using namespace std; class Circle { int radius; public: Circle(); // default constructor Circle(int r); // constructor ~Circle(); // destructor void setRadius(int r) { radius = r; } // Inline function double getArea() { return 3.14 * radius * radius; } // Inline function }; Circle::Circle() : radius(1) {} Circle::Circle(int r) { radius = r; cout

Language/C++ 2023.02.03

[C++] CH3 클래스와 객체 (2)

소멸자 소멸자 : 객체가 소멸되는 시점에서 자동으로 호출되는 클래스의 멤버 함수. 특징 소멸자(destructor)의 목적은 객체가 사라질 때 필요한 마무리 작업을 하기 위함이다. 소멸자의 이름은 클래스 이름 앞에 ~를 붙인다. 생성자와 같이 리턴 타입이 없고, 어떤 값도 리턴해서도 안 된다. 생성자와 같이 오직 한 개만 존재하며, 매개 변수를 가지지 않는다. 소멸자가 선언되어 있지 않으면 기본 소멸자가 자동으로 생성된다. 생성된 반대 순으로 객체가 소멸됨. 반지름 1인 원 생성 -> 반지름 30인 원 생성 -> 반지름 30인 원 소멸 -> 반지름 1인 원 소멸 // 예제 3-7 #include using namespace std; class Circle { public: int radius; Circl..

Language/C++ 2023.01.30

[C++] CH3 클래스와 객체 (1)

객체에 대한 이해 캡슐화 : 객체(object)의 구성 요소들을 캡슐로 싸서 보호하고 볼 수 없게 하는 것으로, 객체의 가장 본질적인 특성 객체는 이 캡슐화(encapsulation)를 통해 외부의 접근을 통제하여 자신의 내부 요소들을 보호한다. 구성: 상태(state)인 멤버 변수와 행동(behavior)인 멤버 함수 행동으로 상태가 변하고, 어떤 행동은 객체 상태를 외부로 전달 클래스 : 객체를 정의하는 틀 혹은 설계도로서, 클래스에 멤버 변수와 멤버 함수를 선언한다. 이때 객체는 클래스라는 틀에서 찍어낸 멤버 변수와 멤버 함수를 실제로 갖고, C++ 프로그램이 실행되는 동안 실존하는 실체(instance)다. 객체가 생성되면 상호 별도 공간에 생성된다. 요약 캡슐화: 객체의 구성 요소들을 보호하는 ..

Language/C++ 2023.01.28