전체 글 140

PostgreSQL Query architecture

1. ParserQuery 구문을 분석 → Syntax error checkParse Tree 생성이 단계에서는 System Catalog를 참조하지 않기 때문에 개별 요소들에 대한 의미분석(Semantic) 이 불가 → 단순히 문법체크(Syntax)만 수행📌 System Catalog : Table, Row, Schema 등의 메타데이터 정보를 저장하는 장소로 다른 RDBMS에서는 Data Dictionary라고 표기하기도 한다.2. Semantic ParserParse Tree의 의미를 분석하여 Query Tree를 생성한다.SQL이 참조하는 테이블, 함수, 연산자를 이해하기 위한 의미분석(Semantic) 과정을 수행한다.Query Rewrite나 최적화가 필요하지 않은 Simple Query의 ..

람다 식(Lambda Expression)

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

Programming/C++ 2025.01.30

string - substr 함수

개요C++의 string 클래스는 문자열을 다루기 위한 다양한 기능을 제공한다. 그 중 substr 함수는 문자열의 일부를 추출하는 데 사용된다. 이 함수는 특정 위치에서 시작하여 지정된 길이만큼의 서브스트링을 반환한다. 본 글에서는 substr 함수의 사용법과 특징을 설명하고, 예제 코드를 통해 실제 활용 사례를 제시한다.설명substr 함수는 std::string 클래스의 멤버 함수로, 다음과 같은 형식을 가진다:string substr(size_t pos = 0, size_t len = npos) const;pos: 서브스트링의 시작 위치를 지정하는 매개변수이다. 기본값은 0이며, 이는 문자열의 처음을 의미한다.len: 추출할 서브스트링의 길이를 지정하는 매개변수이다. 기본값은 npos로, 이는 문..

Programming/C++ 2025.01.29

vector정렬시 변경된 index도 정렬하기

개요코딩 테스트에서 주어진 벡터를 정렬한 후, 정렬된 벡터의 원래 인덱스를 활용해야 했다.정렬이 이루어진 후에는 0번째, 1번째, 2번째 등의 인덱스가 임의의 순서로 섞이게 된다.예) 3번째, 0번째, 2번째, 4번째, 1번째 ...이 글에서는 벡터의 값을 정렬한 후, 원래 인덱스의 순서가 어떻게 변화하는지를 확인하는 방법을 소개한다.핵심 코드 - itoa, sort + 람다함수의 사용index를 저장할 벡터 indices를 주어진 벡터 크기만큼 생성한다.vector v {4, 1, 3, 5, 2}; vector indices(v.size()); iota함수를 이용해 0부터 1씩 증가한 인덱스를 저장한다.#include ... iota(indices.begin(), indices.end(), 0); ..

Programming/C++ 2025.01.28

qsort를 사용하여 배열 정렬하기

개요C언어에서 배열을 내림차순, 오름차순으로 정렬해야 할 때, stdlib.h의 qsort 함수를 사용하여 데이터를 정렬할 수 있다.본 글에서는 C에서 제공하는 qsort 함수에 대해 알아보자.사용 방법#include 정수형 배열을 내림차순/올림차순 할 때 사용할 콜백함수 등록.qsort 함수 호출.기본 구조stdlib.h에서 Quick Sort 함수인 qsort 함수를 제공해준다.void qsort (void *base, size_t nel, size_t width, int (*compare)(const void *, const void *);base: 정렬하고자 하는 배열의 포인터nel: 배열의 각 원소들의 총 수width: 배열에서 원소 하나의 크기(*compare): 비교를 수행할 함수 포인터.예..

Programming/C 2025.01.27

Split 함수 만들기 #2 - string delimiter

개요앞서 포스팅한 글에서 언급했듯이, C++ 에는 delimiter를 이용한 split 함수가 없다. 필요한 경우, split 함수를 직접 만들어 활용해야 한다. 이번 글에서는 delimiter를 char 단위가 아닌 string단위로 활용하여 split 함수를 구현해 보자. 💡 delimiter가 char단위가 아닌 string단위이기 때문에, 보다 범용적으로 쓰일 수 있다.사용 방법strfind로 delimiter가 해당하는 위치를 찾는다.찾을 문자열의 0번째부터 strfind로 찾은 위치까지를 string 형식의 token으로 저장한다.token을 벡터에 저장한다.token부분을 찾을 문자열에서 지운다.2~4를 반복한다.찾을 문자열의 남은 부분을 벡터에 저장한다.결과를 리턴한다.핵심 코드vecto..

Programming/C++ 2025.01.26

Split 함수 만들기 #1 - char delimiter

개요C++ 에는 delimiter를 이용한 split 함수가 없다. 필요한 경우, split 함수를 직접 만들어 활용해야 한다.사용 방법input string과 delemiter를 입력받는다.input string을 sstream 헤더를 사용한 stringstream 변수로 복제한다.getline함수를 사용하여 stringstream변수를 delimiter를 단위로 반복하여 파싱 한다.결과를 벡터에 저장한다.핵심 코드vector split(string input, char delimiter) { vector result; stringstream ss(input); string tmp; while (getline(ss, tmp, delimiter)) result.push_back(tm..

Programming/C++ 2025.01.25

객체지향프로그래밍 - 추상화와 OOP 3요소와의 관계

개요객체지향 프로그래밍에서 추상화(Abstraction)는 OOP의 핵심 개념이지만, 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)이라는 "3요소"로 따로 분리되어 언급되지는 않는다. 그러나 추상화는 3요소에 깊이 관여하는 개념으로, 특정 요소에 포함되거나, 독립적인 개념으로 이해될 수 있다.추상화와 캡슐화의 관계추상화는 무엇을 해야 하는지에 초점을 맞추는 반면, 캡슐화는 어떻게 할 것인지에 초점을 맞춘다.예를 들어, 추상 클래스나 인터페이스를 사용하여 "행동의 골격(what to do)"을 정의한 다음, 세부 구현은 감추는 캡슐화를 통해 내부적으로 처리한다.추상화와 상속의 관계상속은 추상화를 실현하기 위한 도구로 사용된다.부모 클래스는 공통적인 특징과..

객체지향프로그래밍의 3요소 5원칙 #2 - 5원칙

개요객체지향 프로그래밍(OOP)의 SOLID 원칙은 객체지향 프로그래밍에서 설계의 유연성과 확장성을 높이기 위한 다섯 가지 중요한 원칙을 뜻한다.SRP (Single responsibility principle) 단일 책임 원칙OCP (Open-closed principle) 개방 폐쇄 원칙LSP (Liskov substitution principle) 리스코브 치환 원칙ISP (Interface segregation principle) 인터페이스 분리 원칙DIP (Dependency inversion principle) 의존 역전 원칙이번 글에서는 이 다섯 가지 원칙을 간단한 설명과 코드 예제로 알아보자. 1. 단일 책임 원칙(SRP, Single Responsibility Principle)클래스는 ..

객체지향프로그래밍의 3요소 5원칙 #1 - 3요소

개요객체지향 프로그래밍(OOP)은 소프트웨어 개발에서 중요한 패러다임으로, 코드의 재사용성과 유지보수성을 높이는 데 큰 기여를 한다.OOP는 객체 중심적인 사고를 하고 있으며 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 객체 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.이 글에서는 OOP의 핵심 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)이라는 세 가지 요소를 간단한 예제와 함께 알아보자.캡슐화(Encapsulation) = 정보은닉데이터를 외부로부터 보호하고, 객체의 내부 구현을 숨기며, 외부에서는 공개된 인터페이스를 통해서만 객체와 상호작용하도록 하는 개념이다.예제balance는 private로 보호되고, 외부에서 d..

728x90
반응형