반응형
이전 글에서는 팩토리 메서드(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와 같은 곳에 입사하는 것은 많은 엔지니어에게 하나의 큰 목표처럼 여겨집니다. 혁신의 중심에서 일하고, 글로벌 규모의 문제를 해결하며, 최고의 인재들과 협업하는 과정은 무척 매력적이지요. 하지만 그 문턱을 넘기 위해서는 하나의 중요한 관문을 통과해야 합니다. 바로 "코딩 인터뷰"입니다.이 코딩 인터뷰는 단순히 프로그래밍 문제를 푸는 시험이 아닙니다. 문제 해결 능력, 소통 능력, 기술 역량, 시스템 설계 이해도, 행동양식까지 종합적으로 검증하는 무대라고 할 수 있습니다. 이 글에서는 이러한 코딩 인터뷰의 전체 흐름을 하나의 긴 여정으로 생각하고, 각 단계를 마치 여행 안내자가 ..
오늘은 우리 일상생활에 밀접한 도시가스 요금, 특히 누진 세율 구간에 대해 자세히 이야기해볼게요. 겨울철 난방비 폭탄으로 고민하시는 분들께 특히 유용한 정보가 될 거예요. 이 글을 다 읽고 나면, 여러분도 도시가스 요금 전문가가 될 수 있을 거예요!도시가스 누진제란?먼저, 도시가스 누진제가 뭔지 간단히 설명드릴게요. 누진제란 사용량이 늘어날수록 단위 요금이 올라가는 방식이에요. 즉, 많이 쓸수록 더 비싸진다는 거죠. 이는 에너지 절약을 유도하고, 과도한 사용을 억제하기 위한 정책이에요.누진제의 목적은 크게 두 가지예요:에너지 절약 유도: 사용량이 늘수록 요금이 급격히 올라가니, 자연스럽게 절약하게 되죠.사회적 형평성 제고: 적게 쓰는 사람(주로 저소득층)은 낮은 요금을, 많이 쓰는 사람은 높은 요금을 내..
이전 글에서는 팩토리 메서드(Factory Method) 패턴을 모던 C++ 관점에서 재해석하며, 상속 없이도 람다와 Concepts, std::expected, coroutine, Ranges, std::format 등을 활용해 객체 생성 로직을 유연하게 교체할 수 있음을 확인했습니다. 이제는 생성(Creational) 패턴 중 프로토타입(Prototype) 패턴을 다룹니다.프로토타입 패턴은 기존 객체를 "복제(Clone)"하는 방식으로 새로운 객체를 생성하는 패턴입니다. 전통적으로는 Prototype 인터페이스와 Clone 메서드를 정의하고, 각 구체 클래스에서 Clone을 오버라이드하는 상속 기반 구조를 사용했습니다. 그러나 이는 새로운 클래스 추가 시 코드 증가, 다양한 복제 로직 추가나 비동기 ..
이전 글에서는 빌더(Builder) 패턴을 모던 C++ 관점에서 재해석하며, 상속 없이 람다, Concepts, std::expected, coroutine, Ranges, std::format 등을 활용해 단계별 객체 생성 과정을 간결히 표현하고, 조건부 단계, 비동기 처리, 로깅, 에러 처리 등 다양한 요구사항을 손쉽게 처리할 수 있음을 확인했습니다. 이제는 생성(Creational) 패턴 중 팩토리 메서드(Factory Method) 패턴을 다룹니다.팩토리 메서드 패턴은 객체 생성 로직을 서브클래스(또는 별도의 로직)로 위임하여, 상위 클래스가 어떤 객체를 생성할지 모르지만, 하위 클래스나 제공된 로직에 따라 객체를 생성하는 패턴입니다. 전통적으로는 Factory Method를 오버라이드하는 하위 ..