Programming 58

unistd.h의 getopt() 함수를 활용한 argument 핸들링

개요getopt() 함수는 C 프로그래밍에서 명령줄 인자를 파싱 하기 위해 사용되는 함수이다. 이 함수는 unistd.h 헤더 파일에 정의되어 있으며, 주로 UNIX 계열 운영체제에서 사용된다. getopt() 함수를 사용하면 복잡하고 다양한 형식의 명령줄 인자를 쉽게 처리할 수 있어 프로그램의 사용성을 높일 수 있다.getopt() 함수의 사용법getopt() 함수는 명령줄 인자 중 옵션에 해당하는 인자들을 순차적으로 검사하여, 발견되는 옵션 문자를 반환한다. 옵션 문자란 -로 시작하는 짧은 명령어 (예: -a, -b)를 말합니다. 옵션에 추가 데이터가 필요한 경우, 콜론(:)을 사용하여 표시할 수 있다.함수 원형은 다음과 같다:cint getopt(int argc, char * const argv[]..

Programming/C 2025.03.15

if-else 구조 vs lookup table구조

개요C 언어를 사용하다 보면 if-else 구문을 많이 사용할 것이다. 하지만 if-else 구조가 많아질수록 효율성은 많이 떨어지게 된다.이때, if-else 구조로 처리해야 하는 로직이 많을 경우 lookup table 형식으로 보다 효율적인 코딩 및 유지보수를 할 수 있다.if-else 구조 예제 코드아래는 기본적인 if-else를 사용하여 특정 조건에 맞는 값을 리턴하는 코드이다.#include #include #define PG_CIPHER_AES_GCM 0#define PG_CIPHER_AES_CTR 1#define PG_CIPHER_AES_KWP 2#define PG_CIPHER_AES_XTS 3#define PG..

Programming/C 2025.03.13

YAML 개요 및 libyaml 사용법

개요YAML은 사람이 읽을 수 있는 데이터 직렬화 언어이다. 구성 파일과 데이터가 저장되거나 전송되는 응용 프로그램에 일반적으로 사용된다.YAML은 XML(Extensible Markup Language)과 동일한 많은 통신 응용 프로그램을 대상으로 하지만 SGML(Standard Generalized Markup Language)과는 의도적으로 다른 최소 구문을 가지고 있다.파이썬 스타일 들여쓰기를 사용하여 네스팅을 나타내며 대부분의 문자열 값에 대한 따옴표를 필요로 하지 않는다.사용자 지정 데이터 유형이 허용되지만 YAML은 기본적으로 스칼라(예: 문자열, int 및 float), 목록 및 연관 배열(map, dictionary 또는 hash)을 인코딩한다. 이러한 데이터 유형은 펄 프로그래밍 언어를..

Programming/C 2025.03.10

OpenSSL로 ARIA-CCM 구현

서론ARIA(Advanced Reversible Information Algorithm)는 한국에서 개발된 블록 암호 알고리즘으로, 128비트 블록 크기와 128, 192, 256비트 키 길이를 지원한다. ARIA는 한국 표준으로 채택되어 다양한 보안 응용 프로그램에서 사용되고 있으며, 특히 데이터의 기밀성을 보장하는 데 중요한 역할을 한다.CCM(Counter with CBC-MAC)은 인증된 암호화 모드로, 데이터의 기밀성뿐만 아니라 무결성도 보장한다. CCM 모드는 블록 암호를 사용하여 데이터를 암호화하고, 동시에 인증 태그를 생성하여 데이터가 변조되지 않았음을 확인할 수 있게 한다. 이러한 특성 덕분에 CCM 모드는 네트워크 프로토콜, 파일 암호화, 그리고 다양한 보안 응용 프로그램에서 널리 사용..

Programming/C 2025.03.04

pyenv로 여러 개의 Python 버전 관리하기

개요Python은 다양한 버전이 존재하고, 각 프로젝트마다 필요한 버전이 다를 수 있다. 이럴 때 pyenv를 사용하면 여러 개의 Python 버전을 쉽게 관리할 수 있다. pyenv는 특정 프로젝트에 맞는 Python 버전을 설정하고, 필요에 따라 쉽게 전환할 수 있도록 도와준다. 본 글에서는 Mac에서 pyenv를 설치하고 사용하는 방법에 대해 자세히 알아보자.설치pyenv를 설치하기 위해 Homebrew를 사용한다.brew install pyenv이제 pyenv가 정상적으로 설치되었는지 확인해보자. 다음 명령어를 입력하면 pyenv의 버전이 출력된다.pyenv --version설치가 완료되면, 다양한 Python 버전을 설치할 수 있다. 예를 들어, Python 3.12.9를 설치하고 싶다면 아래의..

Programming/python 2025.02.17

string::compare의 개념과 활용

개요C++의 std::string 클래스는 문자열을 다루기 위한 다양한 메서드를 제공하며, 그중 string::compare() 함수는 두 문자열을 비교하는 데 사용된다. 이 함수는 문자열 간의 사전적 순서를 판단할 수 있게 해 주며, 문자열 비교 작업에서 매우 유용하다.설명string::compare() 함수는 다음과 같은 형식을 가진다:이 함수는 대소문자를 구분하며, 비교할 문자열의 길이를 넘어서는 경우에는 std::string::npos를 사용하여 기본값을 설정할 수 있다.int compare(const string& str) const noexcept;int compare(size_t pos1, size_t len1, const string& str) const;int compare(size_t ..

Programming/C++ 2025.02.12

std::find 함수의 개념과 활용

개요C++의 std::string 클래스는 문자열을 다루기 위한 다양한 메서드를 제공한다. 그중 string::find() 함수는 특정 문자열이나 문자를 검색하는 데 사용된다. 이 함수는 문자열 내에서 지정된 부분 문자열이 처음으로 나타나는 위치를 반환하며, 검색 기능은 문자열 처리에서 매우 유용하게 활용된다.이 함수는 문자열 검색과 관련된 코딩 테스트에서 자주 출제되는 유형 중 하나이다. 예를 들어, 주어진 문자열에서 특정 단어가 몇 번 나타나는지를 확인하는 문제가 있을 수 있다. 이때 string::find() 함수를 사용하면 효율적으로 문제를 해결할 수 있다.설명string::find() 함수는 다음과 같은 형식을 가진다:size_t find(const string& str, size_t pos =..

Programming/C++ 2025.02.11

std::move의 개념과 활용

개요C++11에서 도입된 std::move는 객체의 소유권을 이동(move semantics) 시키는 역할을 한다. 이는 객체 복사를 줄이고 성능을 최적화하는 데 중요한 기법이다. 특히 동적 메모리를 많이 사용하는 경우, 복사 연산을 피하고 기존 자원을 재사용함으로써 불필요한 성능 저하를 방지할 수 있다.본 논문에서는 std::move의 개념을 설명하고, 다양한 예제 코드를 통해 활용법을 분석한다.설명std::move란?std::move는 C++ 표준 라이브러리 헤더에 정의된 유틸리티 함수로, 좌값(lvalue)을 우값(rvalue)으로 변환하는 역할을 한다.다음과 같은 특징을 갖는다:std::move 자체는 객체의 이동을 수행하지 않으며, 단순히 우값 참조(rvalue reference) 로 변환하는..

Programming/C++ 2025.02.05

Vector 최대값, 최소값, 인덱스 구하기

개요C++의 헤더에는 다양한 유용한 알고리즘이 포함되어 있으며, 그중 std::max_element는 컨테이너에서 가장 큰 값을 가진 원소를 찾는 기능을 제공한다. 이번 포스팅에서는 std::max_element의 사용법을 예제와 함께 자세히 살펴보자.설명std::max_element는 주어진 범위에서 가장 큰 값을 가진 원소의 반복자(iterator)를 반환하는 함수이다.이 함수는 선형 탐색(O(n))을 수행하며, 기본적으로 operatorstd::max_element는 헤더에 정의되어 있으며, 다음과 같은 두 가지 형태로 사용된다.std::min_element는 주어진 범위에서 가장 작은 값을 가진 원소의 반복자(iterator)를 반환하는 함수이다. max_element와 사용법이 동일하므로 본..

Programming/C++ 2025.02.04

람다 식(Lambda Expression)

개요람다식은 C++11 이상에서 도입된 기능으로, 함수의 인수로 호출되거나 전달되는 위치에서 정의되는 함수 객체이다. 이는 개발자가 특정한 동작을 수행할 수 있도록 코드 블록을 간편하게 캡슐화할 수 있게 해준다. 람다식은 특히 간단한 연산이나 조건을 필요로 하는 경우에 유용하다. 본 글에서는 람다식의 정의, 주요 기능 및 다양한 예제를 살펴보고자 한다.설명람다식의 기본 구조는 다음과 같다:1. 캡처(capture): 외부 변수에 접근하기 위한 방법으로, 값으로 캡처할 것인지 참조로 캡처할 것인지를 지정한다. 예를 들어, [&]는 모든 외부 변수를 참조로 캡처(외부 변수에 대한 업데이트를 반영이 가능)하고, [=]는 값으로 캡처한다. [ ]는 람다 식의 본문이 외부 변수에 액세스하지 않음을 나타낸다.2. ..

Programming/C++ 2025.01.30
728x90
반응형