반응형
지난 글에서는 싱글톤(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와 같은 곳에 입사하는 것은 많은 엔지니어에게 하나의 큰 목표처럼 여겨집니다. 혁신의 중심에서 일하고, 글로벌 규모의 문제를 해결하며, 최고의 인재들과 협업하는 과정은 무척 매력적이지요. 하지만 그 문턱을 넘기 위해서는 하나의 중요한 관문을 통과해야 합니다. 바로 "코딩 인터뷰"입니다.이 코딩 인터뷰는 단순히 프로그래밍 문제를 푸는 시험이 아닙니다. 문제 해결 능력, 소통 능력, 기술 역량, 시스템 설계 이해도, 행동양식까지 종합적으로 검증하는 무대라고 할 수 있습니다. 이 글에서는 이러한 코딩 인터뷰의 전체 흐름을 하나의 긴 여정으로 생각하고, 각 단계를 마치 여행 안내자가 ..
우리 일상에서 뗄 수 없는 에너지원인 도시가스. 2024년에는 요금 인상 소식도 전해졌는데요, 그와 더불어 전기요금에는 있는 ‘누진제’가 도시가스에는 왜 없을까 궁금해하시는 분들이 많습니다. 이번 글에서는 도시가스 요금 체계와 최근 인상 배경, 그리고 “도시가스 누진제 부재”의 이유와 영향을 자세히 알아보겠습니다.도시가스 요금, 어떻게 구성될까?도시가스 요금은 아래 세 가지 요소로 구성됩니다.원료비 (약 80%): 국제 유가·환율 등 대외 변수에 의해 변동 폭이 가장 큼가스공사 공급비용 (약 14%)도시가스사 공급비용 (약 6%)특히 전체 요금의 80%를 차지하는 원료비는 국제 시황에 따라 오르내리기 때문에, 누진제를 적용하기가 쉽지 않다는 분석도 있습니다. 원료비가 일정 정도 고정 비용으로 간주되기보다..
이전 글에서는 팩토리 메서드(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를 오버라이드하는 하위 ..
이전 글에서는 추상 팩토리(Abstract Factory) 패턴을 모던 C++ 관점에서 재해석하며, 상속 없이도 Concepts, 람다, std::expected, coroutine, Ranges, std::format 등을 활용해 다양한 제품군 생성 로직을 유연하게 구현할 수 있음을 확인했습니다. 이번에는 생성(Creational) 패턴 중 빌더(Builder) 패턴을 다룹니다.빌더 패턴은 복잡한 객체를 단계별로 생성하기 위한 패턴으로, 전통적으로는 Builder 인터페이스와 구체 빌더, 그리고 Director 클래스를 통해 생성 과정과 제품 구성을 분리했습니다. 그러나 이는 클래스 증가, 유지보수 어려움, 에러 처리나 비동기 처리, 조건부 단계 추가 등 다양한 요구사항에 대응하기 어렵습니다.C++20..