본문 바로가기

게시글 전체보기358

[전문가를 위한 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.
[Baekjoon] 2667번 단지번호붙이기 #include #include #include #include using namespace std;vector> Map;vector> Visited;int Mx[4] = { -1, 1, 0, 0 };int My[4] = { 0, 0, -1, 1 };void DFS(int X, int Y, int Size, int& Count){ Visited[X][Y] = true; Count++; for (size_t i = 0; i = Size || Ny = Size) continue; if (Map[Nx][Ny] == 1 && Visited[Nx][Ny] == false) { DFS(Nx, Ny, Size, Count); .. 2025. 5. 11.
[Baekjoon] 2178번 미로 탐색 #include #include #include #include using namespace std;vector> Miro;vector> Visited;int Mx[4] = { -1, 1, 0, 0 }; int My[4] = { 0, 0, -1, 1 };int main() { int N, M; cin >> N >> M; Miro.resize(N, vector(M)); Visited.resize(N, vector(M, false)); for (size_t i = 0; i > Input; for (size_t j = 0; j > Q; Q.push({ 0, 0 }); Visited[0][0] == true; while (Q.empty() == false).. 2025. 5. 11.