본문 바로가기

Programming II/C++24

[전문가를 위한 C++] CHAPTER33 디자인 패턴 - 디자인 패턴이란 다양한 문제를 해결하는 프로그램을 구성하는 표준화된 접근 방법론이다.33.1 의존성 주입- 의존성 주입은 의존성 역전 원칙(DIP)을 지원하는 방법 중 하나다. - 의존성 주입은 의존성 관계를 역전시키는 데 인터페이스를 활용한다. 인터페이스는 모든 서비스에 대해 만든다. 어떤 컴포넌트에 일련의 서비스가 필요하다면 각 서비스에 대한 인터페이스를 그 컴포넌트에 주입한다. - 의존성 주입을 적용하면 단위 테스트를 쉽게 할 수 있 다. 서비스에 대한 목업을 쉽게 만들 수 있기 때문이다. 33.1.1 예제: 로깅 메커니즘- ...33.1.2 의존성 주입 로거 구현 방법- ...33.1.3 의존성 주입 로거 사용 방법- ...33.2 추상 팩토리 패턴- 팩토리 패턴는 객체를 생성할 때 그.. 2025. 5. 19.
[전문가를 위한 C++] CHAPTER29 효율적인 C++ 코드 작성법 29.1 성능과 효율에 대하여- 프로그램에서 성능이란 속도, 메모리 사용량, 디스크 접근 횟수, 네트워크 사용량 등과 같이 문맥에 따라 가리키는 대상이 다르다. 속도 등이 있다.- 프로그램에서 효율이란 낭비 없이 실행된다는 것을 의미한다. - 효율적이고 성능이 뛰어난 프로그램은 주어진 작업을 최대한 바르게 처리한다.29.1.1 효율을 확보하기 위한 두 가지 접근 방법- 1. 언어 수준 효율으로서 언어를 최대한 효율적으로 사용하는 것이다. 예를 들어 객체를 값이 아닌 레퍼런스로 전달하는 것이다. 하지만 여기에는 한계가 있다.- 2. 또 다른 접근 방식인 설계 수준 효율을 적용하면 성능을 더욱 향상시킬 여지가 훨씬 많다. 예를 들어 효율적인 알고리즘을 선정하고, 불필요한 단계나 연산을 제거하고, 설계를 최적.. 2025. 5. 19.
[전문가를 위한 C++] CHAPTER28 소프트웨어 공학 기법 28.1 프로세스의 필요성소프트웨어 개발은 복잡하고 오류가 발생하기 쉬우므로 일정한 개발 프로세스가 필요하다.프로세스는 작업의 흐름과 역할 분담을 명확히 하여 품질 향상과 일정 준수에 기여한다.28.2 소프트웨어 라이프 사이클 모델- 초기 아이디어부터 최종 제품에 이르기까지 단계적으로 진행하도록 프로세스를 정의해서 무질서한 소프트웨어 개발을 체계화하는 소프트웨어 라이프 사이클(소프트웨어 수명 주기) 모델도 다양하게 나와있다.28.2.1 폭포수 모델- 전통적인 소프트웨어 라이프 사이클 모델 중에는 폭포수 모델이 있다.이 모델은 소프트웨어를 조리법과 같은 절차를 따르자는 생각에서 나왔다. 소프트웨어 구축에 필요한 단계를 제대로 정의해서 이를 충실히 따르면 원하는 결과가 나온다는 것이다. - 순차적 개발 방식.. 2025. 5. 12.
[전문가를 위한 C++] CHAPTER27 C++ 멀티스레드 프로그래밍 - 멀티스레드 프로그래밍은 멀티프로세서가 장착된 컴퓨터 시스템에서 중요한 기법이다. - 멀티스레드 프로그래밍을 이용하면 시슽메에 있는 여러 프로세서 유닛을 병렬로 사용하는 프로그램을 작성할 수 있다.- 프로세스 유닛이 여러 개 달린 프로세서를 흔히 멀티코어 프로세서라 부른다.27.1 들어가며- 멀티스레드 프로그래밍을 사용하면 여러 연산을 병렬로 처리할 수 있다.- 멀티스레드 프로그래밍이 필요한 이유는 크게 두 가지다. - 첫째, 주어진 연산 작업을 작은 조각으로 나눠서 각각을 멀티프로세서 시스템에서 병렬로 실행하면 전반적인 성능을 크게 높일 수 있다. - 둘째, 연산을 다른 관점에서 모듈화할 수 있다.- 멀티스레드 관련 문제를 방지하려면 여러 스레드가 공유 메모리를 동시에 읽거나 쓰지 않도록 .. 2025. 5. 12.
[전문가를 위한 C++] CHAPTER26 고급 템플릿 26.1 템플릿 매개변수에 대한 심화 학습- 템플릿 매개변수는 타입, 비타입, 템플릿 템플릿의 세 가지 종류가 있다.26.1.1 템플릿 타입 매개변수에 대한 심화 학습- 템플릿을 사용하는 주 목적은 타입 매개변수를 사용하는 데 있다. - 타입 매개변수는 원하는 만큼 얼마든지 많이 선언할 수 있다.- stack, queue, priority_queue 클래스 템플릿은 모두 템플릿 타입 매개변수를 인수로 받고, 내부 컨테이너에 대한 기본값도 정해져 있다.26.1.2 템플릿 템플릿 매개변수- 템플릿 매개변수에서 템플릿을 받으려면 템플릿 템플릿 매개변수라는 특수 매개변수를 사용해야 한다. - 템플릿 템플릿 매개변수를 지정하는 방식은 일반 함수의 매개변수에 함수 포인터를 지정하는 방식과 비슷하다. -.. 2025. 5. 6.
[전문가를 위한 C++] CHAPTER25 표준 라이브러리 커스터마이즈 및 확장 방법 ⁃ 기존 표준 라이브러리 기능과 호환되는 컨테이너나 알고리즘, 반복자를 만들 수 있다. 심지어 사용할 컨테이너에 적용할 메모리 할당 방식도 정의할 수 있다.25.1 할당자⁃ 표준 라이브러리 컨테이너마다 allocator 타입을 템플릿 매개변수로 받는다. 대부분 이 매개변수의 기본값만 사용해도 충분하다.⁃ 이를 통해 컨테이너 생성자에서 allocator객체를 지정할 수 있다. 그러면 컨테이너에 메모리를 할당하는 방식을 변경할 수 있다.⁃ 표준 라이브러리는 std::allocator라는 이름의 기본 allocator 클래스를 제공한다. 이 클래스는 allocate()와 deallocator()를 각각 operator new와 operator delete에 대한 래퍼로 구현한다. - allocate()는 .. 2025. 5. 6.