일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- member function pointer
- new&delete
- virtual inheritance
- operator overloading
- std::ostream
- discord bot
- increment operator
- this call
- std::endl
- suffix return type
- placement new
- return by reference
- virtual function
- std::vector
- 더 지니어스 양면포커
- pointer to member data
- c++ basic practice
- delete function
- std::cout
- c++ multi chatting room
- vector size
- constructor
- virtual destructor
- vector capacity
- conversion constructor
- dynamic_cast
- C++
- virtual function table
- diamond inheritance
- base from member
- Today
- Total
목록2024/09 (32)
I'm FanJae.
1. 레이아웃 설계- 본인의 경우 Client 쪽은 가볍게 설계 하는 것이 목적이였다. (서버를 테스트 하기 위한 목적이 더 컸다.)- 따라서, Client의 디자인은 기본에 충실하였다.- 각 기능은 아래와 같은 기능을 수행한다.연결 : IP와 PORT를 입력하면 서버와 연결을 진행한다.새로고침 : Room list를 받아와서 보여준다. 사용자는 이곳에서 본인이 원하는 방에 입장할 수 있다.입장 : Room List에서 선택된 방으로 입장한다.방만들기 : 방을 만드는 폼을 별도로 띄워서 방을 생성하면 서버가 이를 받아서 하나의 방을 만들어준다.방을 만든 참가자는 채팅방에 바로 입장하도록 처리할 것이다.2. 서버 버그 수정- 본 포스팅을 작성하기 전, C# 클라이언트로 연결 시도를 했으나, 번번이 실패했다..
0.설계 0-1. 쓰레드 추가시 고려가 필요한 사항 ① 쓰레드가 실행해야 하는 영역의 구분이 필요하다.- 어떤 부분부터 쓰레드가 실행해야 하는지 구분해서 이를 처리해야 한다.② 자원 동시 접근 방지- 쓰레드는 서로 동시에 실행되는 것처럼 보이지만 실제로는 수 많은 Context Switching이 일어난다.- 이 과정에서 어떤 쓰레드를 먼저 실행할지는 CPU의 스케줄링에 따라 달려있다.- 따라서 이를 적당히 동기화(synchronization) 해주는 작업이 필요하다. 0-2. Multi Cheatting Room의 구현 기법1) 과거 나의 생각- 소켓 프로그래밍의 개념을 완전히 잘못 이해하던 시절에 짠 코드가 존재한다.- 그 시절에는 이게 최선이라고 생각했고 내 나름대로 잘짰다고 생각했다....void..
1. 윈도우 소켓 프로그래밍 서버 설정- 윈도우 소켓(윈속)도 기본적으로 BSD 계열 유닉스 소켓과 유사한 부분을 많이 띄고 있다. 1-1. 윈도우 소켓 프로그래밍 서버의 설정 순서① 윈속(Winsock) 초기화 -> WSAStartup() 호출.② 소켓 생성 -> socket() 호출③ 소켓 주소 구조체 설정 -> sockaddr_in 구조체④ 소켓에 ip주소 및 포트 정보 할당 -> bind() 호출⑤ 연결 대기 상태 -> listen() 호출⑥ 연결 요청 수락 -> accept() 호출⑦ 소켓 종료 및 윈속 해제-> closesocket(), WSACleanup()- 위 순서대로 서버를 구성한다. ※ sockaddr_in 구조체 관련 정보typedef struct sockaddr_in {#if ...
1. std::this_thread namespace- 스레드 관련 4개의 함수를 제공하는 namespace- 헤더std::this_thread::get_id()현재 스레드의 ID 반환std::this_thread::sleep_for()주어진 시간 만큼 현재 스레드 재우기std::this_thread::sleep_until()주어진 시간 까지 현재 스레드 재우기std::this_thread::yield()다른 스레드를 실행할 수 있도록 힌트 제공 1-1. std::this_thread::get_id()- 실행중인 현재 스레드의 ID를 반환한다.std::thread_id get_id() noexcept;#include #include int main(){ std::cout h; st..
1. 프로젝트 선택 이유1-1. 서버 재구축 및 복기- 나는 학부 시절 네트워크 프로그래밍 수업에서 프로젝트로 다중 채팅방을 제공하는 서버-클라이언트 시스템을 만들었다.- 하지만, 클라이언트 쪽에 너무 무게감을 주다가 결국, C 클라이언트로는 성공하였지만, GUI 클라이언트에는 적용을 실패했다.- GUI 클라이언트에 서버 통신을 적용하기에 앞서, 당시 상당히 비효율적으로 짰던 코드를 보면서 내가 무엇을 잘못 이해하고 넘어갔었는지 복기하고자한다. 1-2. 토이 프로젝트를 통한 재학습- 과거부터 이러한 서버 처리에 대해서 관심이 많았다.- 서버-클라이언트 구조에 대해서 다시 학습하면서 재밌게 공부해보고 싶다. 2. 개발 환경- 언어 : C++ (Server), C#(Client)- 운영체제 : Windows..
1. Member Function Pointer 1-1. 함수 포인터와 멤버 함수class X{public: void mf1(int a) {} // void mf1(X* this, int a) static void mf2(int a) {}};void foo(int a) {}int main(){ void(*f1)(int) = &foo; // ok// void(*f2)(int) = &x::mf1; // error; void(*f3)(int) = &x::mf2; // ok void(X::*f2)(int) = &X::mf1; // ok}- 일반 함수 포인터에 멤버 함수의 주소를 담을 수 없다.- 일반 함수 포인터에 static 멤버 함수는 담을 수 있다. ※ 일반 ..
1. Strategy Pattern의 정의다양한 알고리즘이 존재 하면 이들 각각을 하나의 "클래스로 캡슐화하여 알고리즘의 대체가 가능"하도록 한다. Strategy 패턴을 이용하면 클라이언트와 독립적인 다양한 알고리즘으로 변형할 수 있다. 알고리즘을 바꾸더라도 클라이언트는 아무런 변경을 할 필요가 없다. 1-1. 예제를 통한 Strategy Pattern의 필요성 이해#include #include #include class Edit{ std::string data;public: std::string get_text() { std::cin >> data; return data; }};int main(){ Edit edit; while (1) {..
1. this call 1-1. 멤버 함수의 의문점.class Point{ int x{0}; int y{0};public: void set(int a, int b) { x = a; y = b; }};int main(){ Point pt1; Point pt2; pt1.set(10, 20); pt2.set(10, 20);}- 멤버 데이터는 객체당 한 개씩 생성된다.- 멤버 함수는 코드 메모리에 한 개만 만들어져 있다. - 객체가 여러 개 생성되어도 멤버 함수는 한 개만 있다.※ 함수 인자는 2개 (a, b) 밖에 없는데, x가 어떤 객체의 멤버 인지(pt1.x인지 pt2.x 인지) 어떻게 아는가? 1-2. 어떤 변환이 일어나는가?clas..
1. 컴퓨터 구조의 접근 방법 1-1. 컴퓨터를 디자인 하자- 여기서 디자인할 요소는 CPU를 의미한다.- 실제로 존재하는 컴퓨터를 디자인 하는게 아닌 가상의 컴퓨터를 디자인 한다고 생각해보자.- 일반적으로 컴퓨터(CPU) 디자인은 레지스터와 명령어에 대한 디자인이다.- CPU를 디자인 하기 위해서는 H/W Logic 전문가, Algorithm 전문가, Interface 전문가, 컴퓨터 구조의 특성을 고려할 수 있는 프로그램 전문가 등이 참여한다. 명령어 : 프로그래밍 언어로 프로그래밍한 것을 컴파일 했을때 번역되어 나오는 명령어들의 집합명령어의 구성에 따라서 레지스터 셋이 결정되서 레지스터 셋이 나와야 H/W 구성이 나올 수 있다. 1-2. 레지스터 디자인의 핵심① 레지스터를 몇 비트로 구성할 것인가?..
※ 초기 결제 정보를 설정하는 부분은 임의 생략하였다.※ 구글 클라우드 플랫폼 관련 키워드를 검색하면 어렵지 않게 찾을 수 있다. 1. 호스팅이란?- 서버 컴퓨터의 전체 또는 일정 공간을 이용할 수 있도록 해주는 서비스를 의미한다. 1-1. GCP(Google Cloud Platform)- 구글에서 제공하는 클라우드 컴퓨팅 플랫폼이다.- 자체적으로 여러 가지 컴퓨팅 환경을 제공하고 있지만, 현재 내가 사용하는 디스코드 봇은 사용자가 많지 않다.- 호스팅을 하지 않는다면, 서버를 위해서 매번 전원을 켜둬야한다. - 따라서, GCP가 제공하는 무료 등급을 사용해서 디스코드 봇을 올려두고 사용하려고 한다. 1-2. 무료 티어 확인 1-3. 새 VM 인스턴스 생성- 다음과 같이 설정한다.- 부팅 디스크는 Wi..