| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- vue.js
- VUE
- npm
- generic
- security
- C++
- property
- Python
- C#
- bash
- nginx
- 앙상블
- TypeScript
- vuetify
- AI
- var
- BOJ
- scss
- type
- condition
- JavaScript
- dotenv
- webpack
- leetcode
- machine learning
- git
- Clone
- loop
- 보안
- docker
- Today
- Total
목록분류 전체보기 (166)
ice rabbit programming
1. 컬렉션, 코루틴, LINQCollection동일 타입의 객체를 보관하는 자료구조다. C#에서는 성능과 타입 안정성을 위해 주로 제네릭 컬렉션(List, Dictionary)을 사용하며, 멀티 스레드 환경에서는 Concurrent 컬렉션을 사용한다.Enumerator (열거자)와 Co-Routine (코루틴)열거자: IEnumerator 인터페이스를 구현하며, MoveNext(), Current를 통해 컬렉션을 순회한다. foreach 문은 내부적으로 열거자를 사용한다.코루틴 (yield return): 컬렉션을 순회할 때 값을 한 번에 리턴하지 않고, yield return을 만날 때마다 호출부로 돌아갔다가 다음 호출 시 중단점부터 다시 실행되는 상태 머신 구조다.LINQ (Language Inte..
생성 및 컬렉션 패턴Container & Iterator (반복자)Thin Template Container: void* 기반의 컨테이너를 상속받는 얇은 템플릿(Thin Template) 기법을 사용하면, 강력한 타입 안정성을 챙기면서도 과도한 템플릿 인스턴스화에 따른 코드 폭발(Code Bloat)을 차단할 수 있어 하드웨어 제약이 큰 모바일이나 임베디드 라이브러리에서 매우 유용하다.Iterator 패턴: 컨테이너 내부 구현(배열, 연결 리스트 등)을 노출하지 않고 요소에 순차적으로 접근할 수 있도록 돕는다. Java/C#의 인터페이스 기반 다형성 처리와 달리, C++의 STL 반복자는 런타임 가상 함수 호출 성능 저하를 방지하기 위해 연산자 오버로딩(++, *)과 컴파일 타임 템플릿 매칭 기법을 사용..
간접층의 원리를 활용한 패턴들간접층을 도입하여 의존성을 제어하며, 목적에 따라 아래와 같이 나뉜다.Adapter 패턴: 기존 클래스의 인터페이스가 요구 사항과 맞지 않을 때 인터페이스를 변경(호환성 제공)하기 위해 사용한다.Class Adapter: 다중 상속 또는 값으로 포함하여 수정.Object Adapter: 객체를 포인터/참조로 포함(Composition)하여 수정. STL의 std::stack 및 std::reverse_iterator가 이에 해당한다.Proxy 패턴: 특정 객체에 대한 접근을 제어하거나 대행하기 위해 대리 객체를 제공한다. (예: Remote Proxy, Virtual Proxy, Protected Proxy).Facade 패턴: 복잡한 서브시스템 구조의 의존성을 감추고, 호출..
지난 정규표현식 간단 정리 글에 이어서 이번에는 디자인 패턴에 관해 강의를 들으며 정리했던 필기를 정리하려고 합니다.약 4년 반 전에 포스팅했던 Typescript 강의를 듣고 정리했던 글과 비슷하겠네요.어느새 처음 입사한지 만 5년이 흐른 지금, 기존 코드도 나름 많이 읽었고 선배 및 동료 개발자들과 리뷰를 하면서 더 나은 코드를 작성할 수 있도록 노력해오기도 했습니다. (개인적으로는 아직 많이 부족하다고 생각합니다만...)C#, 파이썬과 Typescript를 거쳐서 현재는 C++을 주로 사용하고 있어서 GoF 패턴을 C++ 강좌로 접할 기회가 있어 듣고 간략하게 정리한 내용입니다.대부분 한 번씩 사용해봤을 법한 패턴들입니다. 다만 패턴에 너무 매몰되지 않고 생산성과 현재 프로덕트가 처한 상황에 맞게 ..
개발을 할 때 종종 정규표현식을 사용할 일이 있습니다. 특정 패턴의 버전을 입력해야 하는 유효성 검사를 하거나, string으로 넘어온 인자들을 파싱할 때 등 여러 경우에 사용합니다.최근에는 언어에서 지원해주는 라이브러리들도 많고, 자주 쓰이는 패턴의 경우에는 검색하면 금방 나오기도 합니다.하지만 코딩과 마찬가지로 긁어서 가져다 쓰는 것만이 아니라 이해하고 활용하고, 수정하고 나아가서는 직접 만들 줄도 알아야 한다고 생각합니다.아래는 근래에 정규표현식 관련해서 책을 읽으면서 나름대로 정리한 내용입니다.(근래라고는 썼지만 몇 달 되긴 했네요.)https://regexr.com/ 와 같은 곳에서 직접 만들고 테스트해볼 수도 있습니다.(혼자 정리용으로 필기한 글이라 최대한 가독성 좋게 수정하기는 했습니다만 잘..
https://leetcode.com/problems/reverse-string/char 배열로 들어있는 string을 뒤바꾸는 간단명료한 문제이다. 참고로 일부 언어들에서 .resverse를 지원하기도 하지만 이를 방지하기 위해 모든 언어에서 char 배열로 input을 제공한다.본인은 stack에 넣고 앞부터 차례대로 넣어주도록 간단하게 구현하였다.class Solution {public: void reverseString(vector& s) { stack stack; for(char ch : s) { stack.push(ch); } int i=0; while(!stack.empty()) { s..
https://leetcode.com/problems/binary-tree-preorder-traversalTree가 주어질 경우 이 값을 root부터 순차적으로 값을 배열에 저장하는 심플한 문제이다./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, Tr..
https://leetcode.com/problems/path-sum/ tree에서 root~leaf 까지의 합이 주어진 값과 일치하는 경우가 있는지 확인하는 문제이다. 학부생 시절 코딩테스트를 준비할 때에는 tree 문제를 아주 많이 풀었으나, 요즘에는 잘 풀지 않아 DFS라는 개념만 기억하고 있었다. 따로 예전의 스킬을 찾아 보지는 않고, 논리에 맞게 생각하면서 분기를 태웠다. 아래가 제출한 코드인데, 분기 코드가 좀 지저분하다. 주어진 TreeNode가 부모는 갖고 있지 않아 stack에 push/pop하면서 비교하고, 한 쪽만 비거나 양 쪽 모두 비었을 경우 모두를 분기하느라 분기 조건이 길어졌다. 이 문제 또한 요즘 C++을 사용하고 있어 문제도 C++로 풀어 보았다. /** * Definiti..