본문 바로가기

CS연구소👨‍💻

(22)
[C++] WCHAR, TCHAR, cstring 정리 이런 것에 대한 정보를 담고 있다WCHAR과 TCHAR이 무엇인지가변길이 문자열 vs 고정 길이 문자열cstring string의 차이WCHAR 문자열 만드는법.이런 것에 대한 정보는 담겨있지 않다1. WCHAR과 TCHAR이 무엇인지우선 WCHAR은 wind-character 이라고 하는 문자이다. 일반적으로 문자는 1바이트라고 배운다. 0부터 127까지의 비트로 문자를 구분해놓은 아스키(ASCII)가 대표적인 1바이트 문자이다. 그럼 당연히 wide string이라는건 2바이트 이상의 문자열을 의미하겠다 라고 생각할 수 있다.그렇다면 TCHAR은 무엇일까 TCHAR은 1바이트 문자 CHAR과 2바이트 문자 WCHAR을 통일해서 쓰기 위해 만들어졌다. 유니코드를 사용하는 경우 TCHAR은 2바이트 문자..
EC2-NGINX-도커-젠킨스 설정 이런 것에 대한 정보를 담고 있다젠킨스를 설정하는 법.젠킨스를 도커 안에서 여는 법EC2 속 젠킨스를 운영하는법.엔진엑스와 도커 연결작업 간 이슈이런 것에 대한 정보는 담겨있지 않다젠킨스 CD하는법 (아직 안 함)1. 젠킨스를 설정하는 법.젠킨스는 보통 커밋, 푸시와 이에 대한 통합과 배포를 자동화하는 것으로 유명하다. 그리고 생각보다 처음 접근할때 어렵게 느껴지는 내용중 하나다. 하지만 막상 하나씩 떼어놓고 보면 우리가 의식으로 해석하는데 어려움이 없다1. 1 젠킨스는 어디에 위치하냐.통합과, 자동화라는 측면에서만 해석한다면 젠킨스는“서로 다른 환경에서 프로젝트의 버전 차이를 인식하고 사람이 손쓰기 전에 통합한다.“라고 정의할 수 있겠다.즉 젠킨스는 서로다른 개발환경 사이에 위치한다. 그리고 커밋같은 ..
[C++] C++로 응용 프로그램 만들기, DLL과 LIB차이, CMAKE로 DLL 생성 이런 것에 대한 정보를 담고 있다C++ 프로그래밍 언어에서 실행 가능한 파일을 만드는 법lib파일과 dll파일의 차이점dll파일을 만드는 방법dll파일을 로드하는 방법중 하나이런 것에 대한 정보는 담겨있지 않다dll파일을 로드하는 방법중 나머지 방법들C++ 언어에서 실행 가능한 파일을 만드는 법은 컴파일러를 이용하는 법과 CMAKE를 이용하는 법 두가지가 있다.1.1 CMake를 사용하지 않고 실행 가능한 파일을 만드는 법clang++ -std=c++17 -I/usr/local/include-L/usr/local/lib -lboost_system -lboost_thread websocket.cpp -o websocket1.2 CMake를 통해 C++ 프로그래밍 언어에서 실행 가능한 파일을 만드는 법 : ..
[C++] 스레드 Lock 이 글은 이런 것에 대한 정보를 담고 있다pthread에 대한 내용pthread에서 lock 구현하는 법websocketpp 라이브러리를 활용한 프로젝트에서 lock을 사용하는법.이런 것에 대한 정보는 담겨있지 않다뮤텍스와, 세마포어, 크리티컬 섹션등의 상세한 비교스레드 사용에 대한 심화 설명1. pthread란 무엇인가.프로그래밍에서 필수라고 할 수 있는 멀티스레딩을 위한 라이브러리이다. 유닉스와 리눅스 계열 프로그래밍에서 사용 가능하며 윈도우에서도 호환되는 라이브러리를 설치하면 사용할 수 있다. C++에서는#include 코드를 추가함으로써 사용할 수 있다. 다만 pthread 대신 다른 스레드 라이브러리를 사용하기 위해선 thread 라이브러리나 window.h 라이브러리를 include해서 비슷한..
[C++] template <1> template은 어디에 필요한가?C++을 쓰다보면 파이썬같은 인터프리터 언어에 비해서 빠르고 문법이 패턴화 돼 있어서 좋지만 몇가지 불편한 점들이 있다. 대표적인게 자료형 선언이다.파이썬은 자료형을 선언할 필요도 없고 함수나 클래스에서도 받아들이지만C++은 매개변수를 사용할때 어떤 자료형을 쓸 지 선언해줘야한다. 그렇다보니 여러 자료형에 공통적인 함수를 만든다 하더라도 여러번 오버로딩 해야 하는 단점이 있다.즉 template은 딱딱한 C++의 자료형 선언을 편하게 해주기 위해서 존재한다.template은 무엇인가?따라서 template은 제네릭한 (일반적인) 자료형을 의미하는 코드다. 라고 정리할 수 있다template이 사용되는 곳은 어디인가?그 목적에 따라서 template은 함수나 class의 ..
[C++] 입출력 스트림 프로그래밍 언어의 입출력프로그램은 사실 어떤 입력을 받고 어떤 출력을 내주는 기계에 불과하다. 그리고 OS에 올라간 프로세스 이외에서 정보를 얻고 주기 위해서는 위해서는 (디스크에서 파일을 읽고 쓴다거나 사용자가 데이터를 입력한다거나) 입출력 시스템에 대한 제대로된 이해가 필요하다.스트림스트림이란말은 입출력의 개념에 부합하기 때문에 자칫 그 말의 제대로된 놓치기 쉽다. 한마디로 입출력 자체를 다른말로 스트림이라고 하는거 아니야? 라고 생각할 수 있다.C++ 입출력은 스트림이고 C는 아니다하지만 사실 스트림은 그자체로 입출력이라고 할 수 없다. C에서 가장 자주 사용하는 입출력 시스탬은printf()scanf()두가지이다. 사실 알고리즘 푸는 정도에 쓰는데는 아무 문제가 없다. 하지만 좀 더 심화된 시스템..
[C++] 예외 처리 예외처리예외처리는 프로그래밍 언어에서 필수다. 단순 알고리즘을 풀면서도 수많은 에러와 마주하고 실제 서비스를 위한 프로그램에서는 예상하지도 못한 에러가 발생할 때도 많을 것이다.최근 SRS라는 오픈소스 프로젝트를 읽고있는데 그쪽의 코드를 보면 실제 로직보다 에러처리가 훨씬 많다는걸 알 수 있었다. 그러다보니 내가 나아가야 할 방향도 이런 에러들을 관리하는 방향이라는 생각을 하게 됐고 정리나 한 번 해보려고한다.try, catch, throw, noexcepttry - catch는 다른 언어에서도 많이 사용되는 쌍이다. 일단 무슨에러가 발생할지 모를 때 로직을 감싸고 에러가 발생했을 경우에 할 로직을 따로 처리해놓는 것이다 try { int result = divide(num1, num2..
[C++] 다형성과 오버로딩, 오버라이딩 다형성이란부모객체를 선언하고 자식객체로 초기화해서 런타임시 다양한 실제타입에 따라 다른 메서드를 사용할 수 있게 하는 동적 다형성과 한 스코프 내에서 함수를 선언할 때 같은 이름의 함수를 다른 타입의 파라미터로 정의하는 정적 다형성이있다.오버라이딩과 가상함수 virtual오버라이딩은 부모의 객체의 메서드를 자식 객체가 재정의 할 수 있게 하는 기능이다.그런데 다형성을 지원하는 C++에서 부모 개체로 선언된 자식 객체의 경우 특정 오버러이딩 메소드를 호출하면 이 메소드는 부모의 메소드를 불러올까 아니면 자식의 메소드를 불러올까?Virtual은 여기서 작동한다. Virtual을 함수 앞에 선언하면 함수를 선언할 때 자식 클래스의 메소드가 이 메소드를 덮어 쓸 수 있게 해준다.그런데 무슨원리로?이런 기능을 들..