반응형
앞선 글에서는 브리지(Bridge) 패턴을 통해 모던 C++에서 상속 기반의 전통적 설계를 어떻게 Concepts, 함수 객체, std::variant 등으로 대체하며 더 유연한 구조를 만들 수 있는지 살펴보았습니다. 이번에는 데코레이터(Decorator) 패턴을 재조명합니다.데코레이터 패턴은 객체에 기능을 동적으로 추가하는 방법을 제시합니다. 전통적으로는 상속이나 래핑(wrapper) 클래스를 사용해 "장식(Decoration)"을 더했지만, 모던 C++에서는 람다, std::function, Ranges, Concepts 등의 기능을 활용해 상속 계층 폭발을 줄이고, 훨씬 간결하고 가독성 높은 코드로 기능을 확장할 수 있습니다.패턴 소개: 데코레이터(Decorator)의도:객체에 추가 책임(기능)을 ..
이전 글에서는 추상 팩토리(Abstract Factory) 패턴을 모던 C++로 재해석하며, 상속 기반의 전통적 구현 방식이 어떻게 Concepts, std::expected, std::variant 등을 활용해 보다 탄탄하고 유연한 구조로 바뀔 수 있는지 알아보았습니다. 이번에는 브리지(Bridge) 패턴에 주목합니다.브리지 패턴의 핵심 의도는 "추상(Abstraction)과 구현(Implementation)을 분리하여 둘을 독립적으로 확장할 수 있게 하는 것"입니다. 전통적인 C++ 구현에서는 추상 클래스 계층과 구현 클래스 계층을 상속으로 연결하는 경향이 많았으나, 모던 C++에서는 Concepts, 컴포지션(합성), std::function, 그리고 Ranges나 람다를 통한 파이프라인형 사고로 ..
여러분, 알고리즘 인터뷰에서 자료구조를 다루는 문제는 매우 빈번합니다. 그중에서도 연결 리스트(Linked List), 스택(Stack), 그리고 큐(Queue)는 가장 기본적이면서도 면접관이 여러분의 기본 자료구조 이해도, 포인터 조작 능력, 추상적 개념을 코드로 구현하는 능력을 평가하기 좋은 주제입니다. 이번 글에서는 이 세 가지 자료구조에 대한 알고리즘 문제 접근 패턴을 하나하나 단계별로 아주 구체적으로 살펴볼게요.우리는 단순히 "연결 리스트 문제는 포인터 조작" 정도로 끝내지 않고, 실제 문제를 받았을 때 어떤 사고 과정을 거쳐 솔루션을 도출하고, 면접관 앞에서 어떻게 설명하면 좋을지, 각 자료구조별로 어떤 유형의 문제들이 빈출되는지, 코너 케이스나 최적화 포인트는 무엇인지까지 심층적으로 다루겠습..
이전 글에서는 팩토리 메서드(Factory Method) 패턴을 살펴보며, 가상 함수 기반의 고전적 구현을 어떻게 모던 C++20 이상의 기능(Concepts, std::expected, std::variant, std::optional, std::format)으로 개선할 수 있는지 논했습니다. 이번에는 추상 팩토리(Abstract Factory) 패턴으로 한 걸음 더 나아갑니다.추상 팩토리는 "연관되거나 의존적인 객체 패밀리를 생성하는 인터페이스"를 제공하는 패턴입니다. 즉, 서로 관련 있는 여러 종류의 객체를 일관성 있게 생성할 수 있는 팩토리를 추상화하는 것입니다. 전통적인 C++ 구현에서는 인터페이스 클래스를 상속받아 구체 팩토리를 제공했고, 다양한 제품 계열(class family)을 다룰 때 ..
지난 글에서는 싱글톤(Singleton) 패턴을 모던 C++ 관점에서 재조명하며, 전역 상태 관리와 초기화 안정성, 에러 처리 측면에서 어떤 개선이 가능한지를 살펴보았습니다. 이번 글에서는 팩토리 메서드(Factory Method) 패턴에 주목합니다. 팩토리 메서드는 인스턴스 생성 로직을 서브클래스나 별도 함수로 위임함으로써, 객체 생성 과정을 캡슐화하고, 클라이언트 코드는 구체적인 클래스에 종속되지 않도록 하는 패턴입니다.고전적 C++에서는 가상 함수 기반 인터페이스를 통해 팩토리 메서드 패턴을 구현했으나, 모던 C++에서는 Concepts를 통해 인터페이스 요구사항을 더 명확히 표현할 수 있습니다. 또한 std::optional, std::expected, std::variant 등을 활용해 생성 실..
여러분, 코딩 인터뷰를 대비하며 알고리즘 문제를 풀다 보면, 배열(Array)과 문자열(String) 문제에서 시작하는 경우가 아주 많습니다. 왜일까요? 이 두 자료구조는 프로그래밍에서 가장 기본적이면서도, 문제 출제자가 난이도와 형태를 손쉽게 조절할 수 있는 재료이기 때문입니다. 이번 글에서는 배열과 문자열 문제를 다루는 과정에서 자주 등장하는 접근 패턴을 하나하나 아주 구체적으로 파헤쳐 볼게요.단순히 “투 포인터를 써라”, “슬라이딩 윈도우를 적용하라”, “KMP로 문자열 검색 시간 단축” 같은 키워드에 머무르지 않고, 각 패턴을 적용하는 정확한 단계, 문제를 접했을 때 머릿속에서 어떤 논리적 흐름으로 접근 방법을 도출하는지, 면접 상황에서 어떻게 이를 설명할지, 그리고 실제 구현 시 어떤 점에 유의..
이전 글에서 시리즈의 개요를 살펴보았고, 이번에는 GoF 디자인 패턴 중 하나인 싱글톤(Singleton) 패턴을 다룹니다. 싱글톤 패턴은 "프로그램 전역에서 단 하나의 인스턴스만 존재하며, 어디서든 접근 가능한 객체"를 보장하는 설계 기법입니다.전통적 C++(C++98/03) 환경에서 싱글톤 구현은 멀티스레드 안전성, 초기화 시점 관리, 전역 상태로 인한 테스트 난이도 등의 문제로 유명했습니다. C++11 이후 표준에서 정적 지역 변수 초기화의 스레드 안전 보장, std::call_once 등의 도구가 등장하면서 구현 난이도가 감소했지만, 여전히 싱글톤은 "전역 상태"를 갖는다는 본질적 단점을 완전히 해결하지는 못했습니다.모던 C++20 이상의 기능을 활용하면 어떤 측면이 더 개선될 수 있을까요? 이번..
C++20 이상의 모던 C++ 언어 기능들은 개발자들에게 이전에는 상상하기 어려웠던 수준의 표현력, 안전성, 유지보수성을 제공합니다. 한편, 소프트웨어 개발의 전통적인 지식인 “디자인 패턴(Design Patterns)”은 여전히 유지보수성과 확장성이 요구되는 대규모 코드베이스에서 널리 활용되는 개념입니다.이 시리즈에서는 고전적인 GoF(Gang of Four) 디자인 패턴들을 모던 C++ 스타일로 재구현하며, 기존 C++11/14/17 시대의 구현 방식과 비교 분석할 것입니다. 이를 통해 독자들은 각 패턴의 본질을 재확인하는 동시에, Concepts, Ranges, Coroutines, std::format, std::expected, std::jthread, std::variant, std::stri..
여러분은 미국 빅테크(FAANG: 페이스북(메타), 아마존, 애플, 넷플릭스, 구글)나 마이크로소프트, 혹은 한국의 네카라쿠배(네이버, 카카오, 라인, 쿠팡, 배달의민족) 같은 대형 IT 기업의 코드 인터뷰를 준비하고 계신가요? 이들 기업의 인터뷰는 단순히 코드 몇 줄 잘 짜는 개발자를 찾지 않습니다. 오히려 알고리즘 문제 해결 능력, CS 기본기, 시스템 설계 기본 개념, 커뮤니케이션 스킬, 팀 협업이나 확장성 있는 사고방식 등 다차원적인 역량을 평가하곤 합니다. 이러한 인터뷰에 처음 도전하는 여러분 중 많은 분들이 "어떻게 준비해야 하지?" "어디서부터 시작해야 하는 거지?" 같은 막막함을 느끼실 텐데요.이번 시리즈(총 10편 예정)의 첫 번째 글에서는 그러한 막연함을 덜어드리고, 인터뷰 대비를 위한..
여러분, 미국의 빅테크 기업, 이를테면 Google, Amazon, Meta(옛 Facebook), Apple, Microsoft와 같은 곳에 입사하는 것은 많은 엔지니어에게 하나의 큰 목표처럼 여겨집니다. 혁신의 중심에서 일하고, 글로벌 규모의 문제를 해결하며, 최고의 인재들과 협업하는 과정은 무척 매력적이지요. 하지만 그 문턱을 넘기 위해서는 하나의 중요한 관문을 통과해야 합니다. 바로 "코딩 인터뷰"입니다.이 코딩 인터뷰는 단순히 프로그래밍 문제를 푸는 시험이 아닙니다. 문제 해결 능력, 소통 능력, 기술 역량, 시스템 설계 이해도, 행동양식까지 종합적으로 검증하는 무대라고 할 수 있습니다. 이 글에서는 이러한 코딩 인터뷰의 전체 흐름을 하나의 긴 여정으로 생각하고, 각 단계를 마치 여행 안내자가 ..