Programming II52 [전문가를 위한 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. [코딩 테스트를 위한 자료 구조와 알고리즘 with C++] 5장 그리디 알고리즘 5.1 들어가며더보기- 그리디 알고리즘은 매 단계에서 '가장 좋아 보이는' 해답을 선택하는 알고리즘이다. 즉, 그리디 방법은 지역적인 최적의 해결 방법으로부터 전역적인 최적의 해결 방법을 구성하는 방식이다.- 주어진 문제가 그리디 방식을 사용하기에 적합한지 판단하기 위해 사용되는 최적 부분 구조 속성과 그리디 선택 속성이 있다.5.2 기본적인 그리디 알고리즘더보기- 그리디 방식으로 해결할 수 있는 대표적인 두 문제인 최단 작업 우선 스케줄링과 분할 가능 배낭 문제가 있다.5.2.1 최단 작업 우선 스케줄링- 여러 개의 작업(Job)이 대기하고 있을 때, 각 작업의 실행 시간(작업 시간)이 주어진다. 모든 작업을 한 번씩 실행할 때, 평균 대기 시간을 최소화하려면 어떤 순서로 작업을 실행해야 할까?- 그리.. 2025. 5. 7. [코딩 테스트를 위한 자료 구조와 알고리즘 with C++] 4장 분할 정복 4.1 들어가며더보기- 주어진 문제가 있을 때, 데이터에 대한 정확한 정의와 데이터 변환 순서는 일련의 명령에 의해 결정되며, 이를 알고리즘이라고 한다.- 알고리즘은 문제 정의에 필요한 것들을 입력으로 받고, 일련의 변환을 수행하여 결과를 출력한다. - "주어진 알고리즘의 연산 횟수를 입력 크기 N에 대한 다항식 형태로 표현할 수 있다면 이 알고리즘은 효율적이라고 할 수 있다." - 다항 시간 알고리즘을 이용하여 솔루션을 구할 수 있는 문제를 계산 복잡도 관점에서 클래스 P(다항 시간)문제라고 한다. 이외에도 다른 형태의 계산 복잡도로 표현되는 문제들이 있으며, 다음은 대표적인 예이다.NP(비결정적 다항 시간) 문제는 특정 솔루션을 다항 시간으로 검증할 수는 있지만 알려진 다항 시간 솔루션은 없습니다.E.. 2025. 5. 7. 이전 1 2 3 4 ··· 9 다음