5월, 2022의 게시물 표시
{{ label!='' ? 'Label : ' : (q!='' ? '검색 : ' : '전체 게시글') }} {{ label }} {{ q }} {{ ('('+(pubs|date:'yyyy-MM')+')') }}

[C++] The C++ Programming Language: 5. A Tour of C++: Concurrency and Utilities (1)

 5.1 Introduction   최종 사용자(end-user)의 관점에서 보았을 때, 이상적인 표준 라이브러리는 모든 필요를 직접적으로 지원하는 컴포넌트들을 지원해주어야 합니다. 응용프로그램 도메인에서, 거대한 상용라이브러리는 그러한 이상에 근접해있죠. 하지만 C++ 표준 라이브러리의 목표는 그러한 것이 아닙니다. 관리 가능하고 보편적인 라이브러리는 모두를 만족시킬 수 없습니다. 대신 C++ 표준 라이브러리는 대부분의 응용프로그램 영역에서 대부분의 사람들에게 유용할 컴포넌트들을 제공하는데 목적을 두죠. 즉, 다양한 필요들의 교집합에 집중하고 있다는 것입니다. 추가적으로, 꽤나 중요한 응용프로그램 영역들을 위해 수학적 계산이나 문자열 처리 등은 서서히 들어왔습니다. 5.2 Resource Management   꽤나 많은 프로그램들의 핵심 작업 중 하나는 자원 관리입니다. 자원은 습득된 이후에 반드시 해제되어야 하는 것입니다. 메모리, 락(locks), 소켓, 스레드 핸들, 파일 핸들 등이 그 예입니다. 오랫동안 동작하는 프로그램들의 경우, 적시에 자원을 해제해주지 못해(누수) 심각한 성능 저하를 야기하고 결국에는 크래쉬라는 비참한 최후를 맞이하기도 합니다. 짧은 프로그램의 경우도 누수로 인해 메모리를 제한 당하고, 실행 시간이 수십 배 증가하여 곤란해질 수 있습니다.   표준 라이브러리 컴포넌트는 자원 누수를 피하도록 설계되었습니다. 이를 위해 생성자와 소멸자 쌍을 이용해 해당 객체의 생명주기를 벗어나지 않는 언어적 차원의 자원 관리를 이야기하려고 합니다. Vector에서의 생성자와 소멸자 쓰임은 요소들의 생명주기를 관리하기 위함이었습니다. 모든 표준 라이브러리 컨테이너는 이와 비슷하게 구현되어 있습니다. 중요한 사실은, 이러한 접근이 예외를 이용한 에러 처리와 올바르게 상호작용한다는 것입니다. 예를 들어, 표준 라이브러리 lock 클래스가 있죠: 1 2 3 4 5 6 7 mutex m;  // used to protect access to shared d

[프로젝트] 꼬들 AI (Kordle AI)

이미지
꼬들이 뭔가요?   Wordle이라는 유명한 영단어 야구 게임 사이트가 있습니다. 매일 특정한 5자 단어가 선정되고, 우리는 그것을 맞춰야 하죠. 5자 단어를 전달하면, 각 자리의 글자가  정답 단어와 완전히 일치하는 글자인지,  정답 단어에 포함되지만 위치를 틀린 글자인지,  정답 단어에 전혀 포함되지 않는 글자인지 여부를 알려줍니다. 유저에게 주어진 기회는 단 6번 뿐이죠. <Kordle>   이에 누군가가 질세라, 한국형 Wordle인 꼬들(Kordle) 서비스를 열었습니다. 초성, 중성, 종성이 결합되는 한국어의 특성상 Wordle과는 사뭇 다른 느낌을 선사합니다. 그래서, 어렵습니다. 연속 정답을 50일, 100일 쌓고 싶은데 말이죠! 우리에게 좋은 방법이 없을까요? 프로그램은 언제나 옳습니다..   꼬들은 단순한 게임입니다. 정답의 개수는 한정적이고, 주어진 정보를 얼마나 잘 활용하느냐에 따라 달려있죠. 그 중 가장 핵심적인 특징 중 하나는, 완벽하게 예측 가능한 게임이라는 것입니다! 난수는 존재하지 않습니다. 그러니 꼬들 문제를 프로그램으로 멋지게 풀어낼 수 있는 방법이 있지 않을까요? 먼저, 꼬들부터 만들어봅시다.   하루에 한 번밖에 할 수 없는 꼬들 사이트에 들어가서 여러 번 하게 시켜달라고 떼를 부릴 순 없죠. 대신 우리의 전략을 시험해볼 수 있는 가짜 꼬들을 만들어봅시다. 저는 KordleMachine이라는 멋진 이름을 지어봤습니다.   KordleMachine은 정답만을 꽁꽁 감싸고 있는 블랙박스와 같습니다. 우리가 KordleMachine에게 단어를 전달해주면, 그 단어와 정답을 비교해서 결과를 반환해주죠!  <Kordle Machine>   이런 기능을 갖기 위한 헤더를 구성해봅시다: 소스코드: KordleMachine.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class  KordleMachine { private :     wstring answer;      int  count; publ

[Maven] 의존성도 함께 빌드하기

<plugin>      <groupId> org.apache.maven.plugins </groupId>      <artifactId> maven-assembly-plugin </artifactId>      <version> 3.1.0 </version>      <configuration>           <descriptorRefs>                <descriptorRef> jar-with-dependencies </descriptorRef>           </descriptorRefs>      </configuration> </plugin>   위와 같이 jar-with-dependencies 플러그인을 삽입한 뒤 빌드하면 된다. 추가적으로 메이븐 빌드 시, goal을 clean compile assembly:single로 하였다.