Search

일기장 끄적끄적

Created
2020/08/05
블로그 첫 글에 언급한 글 작성 주기를 지키지 못했다... 정말 간만에 글을 쓰는 것 같다.

C++ 포스팅에 대해서

원래는 C++ 공부한 것들을 깨작깨작이라도 정리를 하고 싶었는데, 머리 속에 잘 정리되지 않은 내용들을 그저 보기만 좋게 올리는 느낌이라 포스팅을 살짝 미뤄두고 공부만 했던 것 같다.
6월 22일에 시작한 C, C++ 공부를 약 한달에 걸쳐 7월 21일에 걸쳐 마무리 지었다.
1. 상속 관련 업 캐스팅, 다운 캐스팅, 스태틱 캐스팅, 다이나믹 캐스팅, virtual 키워드와 vtable, 다이아몬드 상속, pure virtual function과 abstract class
2. 클래스 템플릿, 함수 템플릿, 템플릿 메타 프로그래밍, 의존 타입, 단위 구현
3. 함수 포인터와 함수 객체 (Functor) 차이
4. ios_base, ios, iostream (istream, ostream), fstream (ifstream, ofstream), sstream
5. sequential container - vector, list, dequeue
6. associative container - set, map, multi-set, multi-map (red-black tree)
7. unordered associative container - unordered set, unordered map, unordered multi-set, unordered multi-map (hash functor)
8. iterator in container (iterator, const_iterator, reverse_iterator, const_reverse_iterator)
9. sort 수행 시간 비교 - nth element < partial sort < unstable sort < stable sort
10. lambda, transfrom, any_of, all_of
11. exception throw와 try catch, Stack Unwinding, noexcept 키워드
12. string 객체, utf-8, utf-16, utf-32
13. NULL과 nullptr 차이
14. Copy Elision과 Move
15. 일반 생성자, 복사 생성자, 이동 생성자
16. vector의 push_back과 emplace_back의 차이
17. Move와 완벽한 전달 (Universal Reference, Reference Collapsing Rule, Forward)
18. RAII (Resource Acquisition Is Initialization) 패턴, 스마트 포인터 (unique_ptr, shared_ptr, weak_ptr), shared_ptr의 제어블록
19. Callable, std::function, mem_fn, bind
20. thread, producer & consumer 패턴, lock & mutex, promise & future, packaged_task, async
21. Thread Pool 구현 (packaged_task 이용)
22. const, constexpr 차이, uniform initialization과 initialization_list
23. decltype, declval, glvalue, rvalue, lvalue, xvalue, prvalue
24. void_t, enable_if, if-constepxr
25. regex
26. random (minstd_rand, mt19937), chrono (system_clock, high_resolution_clock, time_stamp, time_point)
27. filesystem 라이브러리 (파일의 메타 데이터에 대한 작업), directory_iterator, recursive_directory_iterator
28. optional, variant, tuple, structured_binding
29. make, Makefile
위와 같이 약 30개의 항목에 대해서 꼼꼼히 공부를 했다.
참 많은 것들을 단기간에 공부를 해서 그런지 7월 중순에 공부를 마치고 2주가 지난 지금에서 어떤 것들을 배우는지 상기하는데도 굉장히 오래 걸린거 같다. 심지어 몇몇 항목들은 기억이 안나서 Notion에 메모해둔 것들을 찾아보고 다시 한 번 더 공부를 하고 온 항목도 있었다.
주변 친구들이 많이들 궁금해한다. 'C++ 공부한거 그냥 올리면 되지 왜 안 올리냐', 'Notion에 기록한 것들 그냥 올리면 안 되냐', '거기에 적을 바에 그냥 포스팅이 낫지 않냐'라는 얘기를 좀 많이 들었다.
내 생각에는 Notion에 기록한 것들은 일전에 Udemy를 보고 기록한 느낌과 비슷하다. 당시의 공부한 내용을 기록한 것이긴 하나 완벽히 내 지식이 아니다. 이걸 그대로 올렸다가는 내가 모를 때 내 블로그를 보는 것이 아니라, 내 블로그를 보고서 다른 블로그를 봐야지 이해가 갈 것 같아서였다. 스스로도 완벽히 이해가 되지 않아서 예시를 만든다거나 실 예시를 보는데 어려움이 있는데, 공부한 내용들을 올리는 것은 그냥 블로그 베끼기와 다를 것이 없어 보였기 때문이다.
정말 많은 항목들이고 아직 내 머리 속에는 개념은 얼추 잡혀있다. 참으로 감격스러운 것은 '씹어먹는 C++'을 끝내고 Effective Modern C++을 공부하고자 책을 샀는데, 작년 11월까지만 해도 아무리 노력해도 이해가 안 되어서 읽을 수 없었던 것들이 지금은 읽히는 것이었다. 능숙하고 책이 쉽게 읽히는 것은 아니었지만, 적어도 읽으려고 기를 쓰면 읽을 수 있는 수준은 된거 같아서 기뻤다. 그래서 위 약 30개의 항목들은 Effective Modern C++을 읽은 후 시간을 두고 차차 작성을 해볼까 한다.

프로젝트에 대해서

공부를 진행하면서 프로젝트를 조금씩 진행을 해보겠다는 계획을 세웠었다. 지금은 플래너 프로젝트를 진행 중이고, 클라이언트는 Flutter로 제작을 하고 있다. 이전에 했던 프로젝트 보다는 Responsive UI가 조금은 깔끔하게 처리된 것 같고, Lifecycle Watcher에 대한 개념이라든가 BLoc 패턴에 대한 Event와 State 설계가 조금은 익숙해진 것이 눈에 가장 많이 띄었다. 이번에는 C, C++이 아니라 Flutter로 개발을 진행하면서 겪은 어려운 부분에 대해서 조금씩 풀어볼까 한다. 개발 진행이 생각만큼 원활하게 되지 않는 것이 조금 답답하긴 하다.