본문 바로가기
반응형

프로그래밍174

C++] cpprestSDK(Casablanca) 1. http_listener 에 대해서.... http_listener는 task기반으로 만들어진 pplx::로 만들어졌습니다. 따라서 해당 객체를 open() 으로 실행하게 되면 쓰레드가 생성되면서 비동기적으로 실행됩니다. 또한 boost의 asio를 사용하여 만들어졌기 때문에 운영체제마다 제공하는 Thread pool을 사용하며, 사용자는 Thread에 대해 관리를 해주지 않아도 됩니다. 또한 내부적으로 중복생성을 막기위한 코드가 존재하며 예외처리를 합니다. 사용자는 support() 함수를 이용해 코드를 간편하게 만들면 됩니다. 1. http_listener 사용법해당 클래스는 namespace web::http::experimental::listener 에 정의되어 있습니다. 따라서 사용하기 편하게 하실려면 using namespace web.. 2020. 7. 2.
C++] cpprestSDK 에 대한 간략한 설명. 해당 SDK는 microsoft에서 진행하고있는 오픈소스 프로젝트 Casablanca입니다. 현재 업데이트가 뜸~ 하지만 꾸준히 진행되고 있습니다. 지금부터 특징에 대해 설명해드리겠습니다. 1. cpprestSDK의 특징해당 라이브러리는 boost, openSSL 라이브러리를 커스터마이징해 좀 더 사용자가 사용하기 편리하게 제작했으며,cpp의 ppl라이브러리인 task를 기반으로 만든 pplx로 이루어져 있습니다. boost의 asio를 사용해 비동기식 입.출력을 효율적으로 가능하게 했으며 Thread pool을 사용합니다.Thread pool은 운영체제에서 제공해주는 Thread pool을 사용하게 됩니다.(Win : IOCP, Linux : epoll, Mac : kqueue) task 라이브러리의 .. 2020. 7. 2.
C++ 클래스와 구조체의 데이터 정렬(Data alignment) 왜 데이터 크기가 다르지? 우리는 C++를 사용할 때 class나 struct를 사용합니다. 알고계시는 분들도 있겠지만 기본적으로 맴버변수를 선언하면 자료형의 크기가 맞춰집니다. 이를 컴파일 데이터 정렬이라고 하는데, 일단 코드를 보시죠. #include class A { int num; //4byte char c1; //1byte char c2; //1byte}; int main(void) { printf("%d\n", sizeof(A)); return 0;} 6바이트가 나와야 하지만 8바이트가 나오게 됩니다. 이는 구조체(struct)도 마찬가지 입니다. 왜 이렇게 되는지 살펴보고자 합니다. 1. 프로세스의 메모리 접근 단위기본적으로 해당 코드를 실행하면 메모리로 올라가게 됩니다.그리고 프로세스는 함수가 실행될 때마다 변수의 .. 2020. 6. 24.
C++ false sharing이란?(거짓 공유) 1. false sharing 이란?? false sharing은 멀티 쓰레드 환경 + CPU의 멀티 코어에서 발생됩니다. cpu 내부의 코어와 코어간의 메모리 정보가 공유되어 하드웨어 적으로 병목현상이 일어나는 것을 뜻합니다. 설명하기에 앞서 false sharing이 일어난 코드를 보겠습니다.#include #include #include long long num1 = 0;long long num2 = 0;long long num3 = 0;void fun1() { for (long long i = 0; i resultTime = endTime - beginTime; printf("%lld\n", num1 + num2); std::cout  코드는 길어보이지만 간단한 코드 입니다. t.. 2020. 6. 22.
C++] 가상 함수를 생성자에 사용하면?? 최근 기업 시험을 보는데 이런 문제가 나왔습니다. "가상함수를 생성자에 사용한다면 어떻게 되는가?" 이 문제를 봣을 때 "이건 뭐지??" 라는 생각이 먼저 들었습니다. 왜냐하면 생성자에서 가상함수를 호출할 생각 자체를 제 평생 한번도 해본적이 없기 때문입니다. 왜냐?? 사용할 이유가 없으니깐요.... 가상 함수니깐요.... 가상 함수의 의미는? overriding 이죠. 다형성이죠. 또한 순수 가상 함수는 재 정의를 해줘야하는 함수입니다. 재 정의를 해야할 함수를 생성자를 통해 호출을한다?? 아마 사용자의 실수로 호출을 하지 않을까... 싶네요....코드가 길어지면 어느 클래스에 어떤 맴버함수가 있는지 잘 기억이 안나니깐 말이죠... 그래서 저는.... 찾아보고....경험해보고.... 그래서 이 글을 쓰.. 2020. 6. 22.
C++] 싱글톤(Singleton)정의 방법과 설명. C++에서 자주는 아니지만 심심치않게 싱글톤(Singleton)을 활용한 사례들을 본적이 있습니다. 굳이 사용하지 않아도 알아두면 좋은 기법입니다. 왜냐하면 클래스의 거의 모든걸 고루 담고 있기 때문입니다. static변수, private 생성자, 소멸자, 늦은 초기화 등..... 꽤 얻어갈 정보들이 있습니다. 때문에 소개하고 설명해보고자 합니다. 1. 싱글톤(Singleton)이란?싱글톤은 말 그대로 혼자라는 뜻입니다. 클래스의 생성을 딱!! 1개로 정한다는 뜻이죠. 따라서 해당 클래스의 객체는 static으로 생성이 됩니다. 물론 여러개의 변수가 하나의 클래스를 가르킬 순 있겠죠. 하지만, 그 클래스의 객체가 복사가 되면 안됩니다. 즉, 똑같은 클래스 정보가 2개 이상 늘어나면 안된다는 것이죠. 이렇.. 2020. 6. 21.
C++ 에서의 OOP의 개념에 대한 설명(Abstraction, Encapsulation, Inheritance, Polymorphism) 1. OOP란?? (Object Oriented Programming) C++는 객체지향 언어 입니다. 해당 언어를 OOP라고 부르며 Object Oriented Programming의 약자입니다. 이 OOP에 대한 개념에 대해 설명해 볼까합니다. 왜냐하면..... 면접에서 물어볼 수 있는 질문이기 때문입니다. 기본적으로 C++의 OOP라 하면 다음과 같은 단어가 나옵니다. 1. Class 2. Object 3. Abstraction 4. Encapsulation 5. Inheritance 6. Polymorphism 이중에 Class와 Object는 Abstraction에 대한 내용에 포함 되므로 Abstraction, Encapsulation, Inheritance, Polymorphism에 대한 설.. 2020. 6. 21.
C++] virtual function(가상 함수)에 대하여...(햇갈리는 분들~ 어여 드루와) 예전에 작성한 가상 함수글이 있습니다. 하지만 조금 미흡한것 같아 다시 작성해봅니다. 1. 일반적인 상속관계에서의 생성자, 소멸자 호출일반적으로 클래스를 정의하고 객체를 선언하면 다음과 같은 생성자, 소멸자 호출이 됩니다. 1) 생성자, 소멸자 호출 확인 코드.#include class A {private:public: A() { printf("A 생성자\n"); } ~A() { printf("A 소멸자\n"); }}; class B : public A{private:public: B() { printf("B 생성자\n"); } ~B() { printf("B 소멸자\n"); }};int main(void) { B b; return 0;} B객체를 선언했는데 상속된 부모 클래스의 A생성자와 소멸자가 호출되.. 2020. 6. 21.
C++ 가상 상속(virtual inheritance) 1. 가상 상속(virtual inheritance) 이란??C++에선 다중상속을 지원합니다. JAVA는 다중상속을 막고 있지요.다중상속은 장점과 단점이 존재합니다.장점으론 객체지향의 상속성을 좀 더 유연하게 해주는 역할을 하죠.하지만 단점은 다이아몬드 상속구조를 띌 수 있으며, 이는 메모리 낭비, 성능저하로 이어질 수 있습니다. 그럼 다음 그림과 같은 형태로 상속을 진행해 보겠습니다. 그림코드 #include class A {public: A() { printf("A 생성자\n"); } ~A() { printf("A 소멸자\n"); } int A_num;}; class B : public A {public: B() { printf("B 생성자\n"); } ~B() { printf("B 소멸자\n"); .. 2020. 6. 20.
C++ 순수 가상 함수란? 추상 클래스란??(pure virtual function, abstract class) 1. 순수 가상 함수란?(pure virtual function) C++에서의 순수 가상 함수란 무엇일까요?? virtual void foo() = 0; 이렇게 생긴 녀석들을 순수 가상함수라고 부릅니다. (pure virtual function) 함수의 정의가 이뤄지지 않고 함수만 선언한 것이지요. 이렇게 선언된 순수 가상 함수가 있다면 이를 추상클래스(abstract class)라고 부릅니다. 또한 이 추상클래스는 객체로 만들지 못하고 상속으로써만 사용됩니다. 그리고 추상클래스를 상속받은 자식 클래스는 무조건 해당 순수 가상 함수를 override 시켜줘야 합니다. 이 추상클래스, 순수 가상 함수가 어떤 이점이 있으며, 어느 상황에 사용하는지 설명함에 앞서 함수 객체의 생성이 안되는지부터 확인해보겠습니.. 2020. 6. 20.
C++] reinterpret_cast에 대해서... 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast = https://hwan-shell.tistory.com/211 2. dynamic_cast = https://hwan-shell.tistory.com/213 3. const_cast = https://hwan-shell.tistory.com/215 4. reinterpret_cast 가 있습니다. 그 중 reinterpret_cast에 대해 알아보도록 하겠습니다. 1. reinterpret_cast란?cast중 가장 쎈놈? 입니다. cast방식은 포인터 -> 포인터, 포인터 -> 일반변수, 일반변수 -> 포인터로주로 포인터 관련된 cast입니다. 단, 자료형 -> 다른 자료형은 안됩니다. rei.. 2020. 6. 17.
C++] const_cast에 대해서... 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast = https://hwan-shell.tistory.com/211 2. dynamic_cast = https://hwan-shell.tistory.com/213 3. const_cast 4. reinterpret_cast = https://hwan-shell.tistory.com/219 가 있습니다. 그 중 const_cast에 대해 알아보도록 하겠습니다. 1. const_cast란??이름만 보면 const를 cast해 const변수를 바꾸는 그런역할을 할 것 같이 생긴 녀석입니다.맞으면서도 다릅니다. const_cast를 할 수 있는 조건이 있습니다. 1. const로 선언된 포인터만 const를.. 2020. 6. 15.
C++] dynamic_cast에 대해서... 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast = https://hwan-shell.tistory.com/211 2. dynamic_cast 3. const_cast = https://hwan-shell.tistory.com/215 4. reinterpret_cast = https://hwan-shell.tistory.com/219 가 있습니다. 그 중 dynamic_cast에 대해 알아보도록 하겠습니다. 1. dynamic_cast란?class의 상속관계에서의 형변환을 프로그래머가 올바르게 하도록 도와주는 긴능을 제공하는 녀석입니다.dynamic_cast는 RTTI(Run Time Type Information)을 지원합니다.RTTI는 런타임.. 2020. 6. 14.
C++] static_cast란?? 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast 2. dynamic_cast = https://hwan-shell.tistory.com/213 3. const_cast = https://hwan-shell.tistory.com/215 4. reinterpret_cast = https://hwan-shell.tistory.com/219 가 있습니다. 그 중 static_cast에 대해 알아보도록 하겠습니다. 1. static_cast란?C++에서 제공하는 기능중 하나로 프로그래머가 형변환을 할 때 오류를 체크해 줍니다. 이 오류는 코드상에서 체크해줍니다. 마치 없는 변수나 함수를 사용자가 사용할 때 처럼 말이죠. 그럼 예시를 보겠습니다. 1) 일반.. 2020. 6. 14.
C++] Visual studio에서 C++ 버전 변경과 사용방법.(C++14, 17, 20) Visual studio를 사용하면서 새로 정의된 class를 사용하고 싶을 때 지원하는 C++버전이 맞지 않아서 호출되지 않는 경우가 있습니다. 그럼 Visual studio에서 버전을 확인하는 방법과 C++을 버전별로 사용하는 방법을 알아보도록 합시다. 1. 도움말 -> Microsoft Visual Studio 정보(A) 2. C++ 버전 변경방법. 1. 프로젝트 -> 속성 -> C/C++ -> 모든 옵션 -> C++ 언어 표준 2. 여기서 원하시는 버전을 선택하면됩니다.마지막에 있는 /std c++ latest는 C++의 마지막 버전이 입력됩니다. 즉, 가장 최신버전입니다. C++ 버전 고정하는 방법. 추가 옵션 글상자에 명령어를 입력해주면 됩니다. /std:c++14/std:c++17/std:c.. 2020. 6. 13.
728x90
반응형

스킨편집 -> html 편집에서