C/C++ 디자인 패턴 (7) — 브리지(Bridge)

도형(원, 사각형)을 SVG와 ASCII 두 방식으로 그려야 한다고 하자. 상속으로 조합하면 SvgCircle, AsciiCircle, SvgRect, AsciiRect처럼 도형 수 × 렌더러 수만큼 클래스가 생기고, 렌더러 하나를 추가할 때마다 도형 수만큼 클래스를 또…

Continue ReadingC/C++ 디자인 패턴 (7) — 브리지(Bridge)

C/C++ 디자인 패턴 (5) — 싱글톤(Singleton)

플러그인 레지스트리, 로거, 설정 저장소처럼 프로그램 전체에 딱 하나만 있어야 하고 어디서든 접근할 수 있어야 하는 객체가 있다. 전역 변수로 두면 누구나 새로 만들거나 덮어쓸 수 있다. 싱글톤(Singleton)은 클래스가 스스로…

Continue ReadingC/C++ 디자인 패턴 (5) — 싱글톤(Singleton)

C/C++ 디자인 패턴 (4) — 프로토타입(Prototype)

문서 편집기에서 "선택한 객체 복제"를 구현한다고 하자. 선택된 것은 Document*로만 알고 있는데, 실제로는 Invoice일 수도 Memo일 수도 있다. 복사 생성자는 정적 타입을 알아야 호출할 수 있어서, 타입마다 if나 dynamic_cast를 늘어놓게…

Continue ReadingC/C++ 디자인 패턴 (4) — 프로토타입(Prototype)

C/C++ 디자인 패턴 (3) — 팩토리 메서드(Factory Method)

내보내기 기능을 만든다고 하자. "헤더를 쓰고, 행을 하나씩 쓰고, 마무리한다"는 절차는 CSV든 JSON이든 같은데, 어떤 Writer 객체를 쓸지만 다르다. 이 절차를 가진 부모 클래스가 new CsvWriter를 직접 부르면 JSON을 지원할…

Continue ReadingC/C++ 디자인 패턴 (3) — 팩토리 메서드(Factory Method)

C/C++ 디자인 패턴 (1) — 추상 팩토리(Abstract Factory)

다크 모드를 지원하는 앱에서 버튼은 다크 테마로, 체크박스는 라이트 테마로 그려지는 버그는 흔하다. 화면 곳곳에서 new DarkButton, new LightCheckbox처럼 구체 클래스를 직접 만들면 "같은 패밀리끼리만 섞여야 한다"는 규칙을 지킬 곳이…

Continue ReadingC/C++ 디자인 패턴 (1) — 추상 팩토리(Abstract Factory)

REA(Reverse Engineer Anything) 사용법 — 코딩 에이전트로 바이너리와 Electron 앱 분석하기

다른 앱에서 본 기능을 내 프로젝트에도 넣고 싶을 때가 있다. 소스가 없으면 디스어셈블러를 열어 함수를 따라가야 하는데, 이 작업은 도구도 많고 시간도 오래 걸린다. REA(Reverse Engineer Anything)는 이 작업을 코딩…

Continue ReadingREA(Reverse Engineer Anything) 사용법 — 코딩 에이전트로 바이너리와 Electron 앱 분석하기

[라즈베리파이] u-boot 에서 kernel 부팅

커널을 바꿔가며 시험할 때 라즈베리파이 펌웨어에만 의존하면 매번 전원을 내리고 SD 카드를 빼서 파일을 갈아끼워야 한다. U-Boot 프롬프트까지 올려놨다면 그 자리에서 커널을 골라 올리고 부트 인자를 바꿔 다시 부팅할 수…

Continue Reading[라즈베리파이] u-boot 에서 kernel 부팅

Android 커널의 벤더 훅(Vendor Hook) 840개 — GKI가 out-of-tree 코드를 받아들이는 방식과 그 대가

Android 기기는 처음부터 메인라인과 상당히 다른 커널을 써 왔습니다. GKI(Generic Kernel Image)가 도입되면서 그 차이는 많이 줄었습니다. 그래도 지금 출시되는 기기의 커널에는 여전히 out-of-tree 변경이 대량으로 들어 있습니다. Android가 이런…

Continue ReadingAndroid 커널의 벤더 훅(Vendor Hook) 840개 — GKI가 out-of-tree 코드를 받아들이는 방식과 그 대가