전체 글 14

cpp8(callable)

250401 5w1 수업 정리Callble Type다시.. callable은?! 함수처럼.. ()를 붙여서 호출할 수 있는 아기들을 말한다..1.함수2.함수포인터3.람다4.함수객체 - 함수호출연산자를 오버로딩한 클래스로 만든 객체5.멤버함수전에 람다..?까지 다뤘던 것 같은데 이번에는 함수객체(함수호출연산자)와 멤버함수에 대해 다뤄보겠다.. 아 .. 술먹고싶다.. 일단 함수호출연산자는... () () 이 괄호 두짝은 함수를 부르는 연산자임우리는 ()이 연산자도 operator()로 오버로딩해서 사용해줄 수 있다..원래 클래스 객체는 ()를 지원해주지 않는다.. 그래서 직접 operator()를 오버로딩해주는 것..왜 사용하는데?!객체를 함수처럼 사용하고 싶을때.... (이게 함수객체임!!! functio..

cpp(stl) 2025.04.11

cpp7(함수포인터/collable/람다) 4w2

250327 수업정리..(4w2) Callable Types호출 가능한 타입..함수처럼 호출()할 수 있는 모~~든 것을 callable 이라고 함.1. 함수 : 이름 있는 함수2. 함수 포인터 : 함수 주소를 가리키는 포인터3. 람다[] lambda : 이름 없는 즉석 함수이것들 모두 () 연산자로 호출할 수 있기에.. callbale type 이라고 함 void*이건.. 어떤 타입이든 가리킬 수 있는 일반적인 포인터임!!!이건 함수 포인터가 아님... 그냥 타입이 없는 포인터!!!!!이런식으로... int값을 반환하는 내림차순()이라는 함수안에 매개변수로cosnt void* a, const void* b 가 들어가있음.여기서 void*는 void라는 함수를 가리키는게 아니라... 저 void*는 어떠..

cpp(stl) 2025.04.11

cpp6(RAII/throw/unique_ptr) 4w1

밀린 공부...4w1 RAII (Resource Acquisition Is Initialization)└ 자원의 할당과 해제를 객체의 생명주기와 일치시키는 기법- 우리는 자원의 해제(delete)를 직접 해줄필요가 없음! 이거는 스마트포인터로 구현이 된다..- 생성자에서 자원을 획득하고, 소멸자에서 자원을 반환하는 패턴..! throwthrow는.. 예외가 생기면 throw가 실행되는것? vs throw가 예외를 만드는 것?정답은.. throw는 예외를 만 드 는 아이! throw가 실행되면, 예외가 발생하는 것임..근데 왜 굳이 예외를 .. 발생시키지?코드를 진행하면서.. 더이상 정상적인 흐름으로 처리할 수 없는 상황에서 프로그램을 비상탈출하려고!throw를 던지면.. catch가 잡아준다. try내에..

cpp(stl) 2025.04.08

다중서버정리(iocp)

iocp기반임. 250401/250403 수업 (아직 미완성..) 비동기 다중접속에서 Accept는 AcceptEx로 해준다..일단 여기서도 EXP_OVER로 OVERLAPPED 구조체를 확장시켜줘서 사용함.각 EXP_OVER는 자기가 어떤... 작업인지 정보를 갖고있음(수업에선 enum통해서 작업 구분함.. IO_RECV, IO_SEND, IO_SEND로..) EXP_OVER안에... os에 넘길 비동기 정보 WASOVERLAPPED구조체가 있음Overlapped 구조체... 모든 send, recv는 이 구조체가 필요.하나의 구조체를 여러 호출에서 사용하는건 불가능!! 개당 하나씩 필요.소켓당, recv호출은, 무조건 하나씩...!!!!소켓당, send호출은 여러개 가능하다.. -> 이게 브로드 캐스..

서버 2025.04.06

일대일서버정리

IOCP가 뭐야? (InputOutputCompletionPort)Windows에서 고성능 네트워크/파일 비동기 처리를 위해 만든 시스템 큐비동기 작업이 끝나면 os가 큐에 완료했다고 넣어주고, 우리는 그걸 꺼내쓰는 방식...게임서버의 핵심은 IOCP.. iocp를 쓰겠다고 하면, 커널에 iocp 객체를 생성, 걔를 통해서 io를 진행! WSAOVERLAPPED└ Windows에서 비동기 io작업을 위한 구조체임...작업의 상태와 완료 정보를 담는 상자... 그냥 recv, send└ 이 함수들을 호출 시 작업이 끝날 때 까지 코드가 멈춘다.. WSARecv, WSASend└ 작업만 시작해주고, 바로 리턴. 나중에 작업이 완료되면 그 사실을 IOCP나 이벤트를 통해 통지받음.이때 이 작업 진행 상태 및 ..

서버 2025.04.06

cpp5(stream_iterator/vector로 파일읽기/structured binding/연산자오버로딩)

250320 수업 + 모르는 이것저것 폰트랑 글자 크기 다 설정해놓고 막상 올리면 자꾸 초기화됨..너무짜증남..왜이래요티스토리ㅡㅡ 메모리영역 메모리가 어디에 들어가야할지..->이건 os가 정함.크게 Data, Stack, free-store 가 있다.먼저 Data영역(Static)└ 프로그램이 실행될 때, 초기화된 전역변수와 정적변수가 저장되는 공간.프로그램이 종료될 때 까지 이 데이터는 유지된다!int a = 10;   => 전역변수static int b = 5; => 정적변수 Stack영역└ 함수 호출 시 생성되는 지역변수, 매개변수가 저장되는 공간.LIFO구조로.. 함수 호출/리턴에 따라 자동으로 메모리 할당과 해제가 일어남.stack은.. 메모리 한계를 초과하면 스택 오버플로우가 발생한다!!! f..

cpp(stl) 2025.03.27

cpp4(파일입출력/바이너리모드/저수준출력)

250318 수업 정리본 + 모르는 것.. 시작하기에 앞서.. 제일 중요한 개념..연속성에 관하여 두 단어를 꼭 기억해야함continuous : 시간의 연속성contiguous : 공간의 연속성교수님께서 정말 아주아주 강조하셨다..지난학기 cpp할때 너무 잘알고있었는뎋 분명. 한번 더 까먹으면 큰일날듯copystd::array hello{};는 지난 글에서 다뤘으니.. (안전배열) 까먹으면 다시 그걸 보도록 하자..우리 array는 빈틈없이 메모리가 연속되어있음. 이걸 contiguous한 메모리라고 한다!!아 참고로...sizeof(hello)는, 바이트수를 반환 (여기서는 4000바이트)hello.size()는 원소의 개수를 반환 (여기서는 1000개) std::copy() 가 무엇이냐..└ STL의..

cpp(stl) 2025.03.19

cpp3(안전배열/file입출력)

250313 수업정리본 + 모르는 것.. *이건 그냥 내가 자주 까먹는 개념.. 인스터스(instancing)한다.. : 객체를 생성해 메모리를 할당한다.예를 들어.. Dog 라는 클래스를 만들고, dog라는 인스턴스를 만듬.메모리가 할당되는 시점은.. 인스턴스가 될 때, 객체가 생성이 될 때! virtual : 순수 가상 함수.. 상속과 관련된 개념! 이걸 통해 다형성(polymorphism)을 구현할 수 있음!다형성 : 같은 이름으로 다른 기능을 하게 하는 것override : 오버라이딩, virtual이랑 짝이라고 생각하자.. 부모 클래스의 함수를 자식클래스에서 재정의하는 것을 말함.* 랜덤엔진 std::default_random_engine dre{} -> 기본 랜덤엔진 사용. std::rando..

cpp(stl) 2025.03.19

서버 2w1(네트워크프로그래밍)

250311앞시간에 pipeline실습돌려봄(이건 1w2에 정리) 네트워크 프로그래밍 ( = 소켓 프로그래밍 )네트워크를 통해 여러 프로그램이 데이터를 주고받는 것을 의미함.위치에 구애받지 않고, 모든 프로그램은 네트워크프로그래밍을 통해 구현된다!우리는 네트워크 프로그래밍을 이해하기 위해 소켓을 다룰 줄 알아야함!~ 파일 I/O와 거의 같다..└ 디스크에서 데이터를 읽고 쓴다..주요 함수로는 open() : 파일을 열어 디스크와 연결read(), write() : 파일에서 데이터를 읽고 쓴다close() : 파일을 닫음 cpp에서의 stream은 잊을 것.. os에서 제공해주는 게 아니다! 네트워크 I/O는..└ 네트워크를 통해 데이터를 송수신!connect() : 상대방(서버)와 연걸send(), re..

서버 2025.03.18