본문 바로가기
반응형

목록363

1편] 동기와 비동기 블로킹과 논블로킹에 대해서.... 요즘 자료도 많아지고 굉장히 개념 자체가 햇갈립니다. 저도 조사하면서 "내가 배운 내용이 맞나?" 싶을 정도로 햇갈리는 내용들이 많아서 이렇게 정리합니다. 3편으로 나눌 생각이고, 동기, 비동기, 블로킹, 논 블로킹, 멀티 프로세스, 멀티 쓰레드, 멀티 플렉싱, select, poll, epoll, IOCP, boost::asio::context 순으로 진행하려고 합니다. 요번 글은 동기, 비동기, 블로킹, 논 블로킹에 대한 내용입니다. 블로킹과 논 블로킹에 대해 예기하기 앞서, 동기와 비동기에 대해 예기해 보겠습니다. 1. 동기와 비동기??동기와 비동기는 굉장히 다양한 곳에서 쓰입니다. 그리고 뜻하는 정의도 조금씩 다르죠. 하지만 근본적으론 같습니다. 프로그래밍 쪽에서의 동기와 비동기의 차이는 "단일 .. 2020. 9. 7.
C++] template을 헤더파일에 정의하기. (선언만 하면 왜 안될까?) C++ 에는 다른 언어에 있는 template이라는 키워드가 존재합니다. template은 프로그램의 유연성을 제공해주죠. 코드 또한 간결해지고요. C++의 코드를 짜다보면 헤더파일에 클래스, 함수 등을 선언만하고 실제 구현은 다른 cpp파일에 정의하게 됩니다. 즉, 파일을 분리하는 것이죠. 이것의 장점은 코드 관리가 쉬워진다는 점입니다. 단점이 된다면 코드를 보는것이 다소 복잡해 질 수도 있지요. 그럼에도 불구하고 분할 컴파일을 많이하고 있습니다. 기능적인 부분들을 분리해서 정의하는 것이 관리에 있어서, 수정함에 있어서 좋은것은 사실이니 말이죠. 하지만 템플릿은 헤더파일에 선언만 해서는 동작하지 않습니다. 컴파일 시 애러 메시지를 띄워주죠. 예시를 보겠습니다. 1. template을 헤더파일에 선언. .. 2020. 9. 4.
프로그래머스] C++ 연습문제 - 멀리뛰기 (level 3) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12914 1. 문제효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2칸) 의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면.. 2020. 9. 2.
프로그래머스] C++ 2020 카카오 인턴십 - 수식 최대화(Level 2) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/67257 1. 문제IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 같은 방식으로 결정하려고 합니다. 해커톤 대회에 참가하는 모든 참가자들에게는 숫자들과 3가지의 연산문자(+, -, *) 만으로 이루어진 연산 수식이 전달되며, 참가자의 미션은 전달받은 수식에 포함된 연산자의 우선순위를 자유롭게 재정의하여 만들 수 있는 가장 큰 숫자를 제출하는 것입니다. 단, 연산자의 우선순위를 새로 정.. 2020. 9. 1.
C++] perfect forwarding 이란?(완벽 전달자) C++에는 템플릿이라는 항목이 있습니다. 템플릿은 타입을 정하지 않은 것으로 코드에 유연성을 제공하게 됩니다. 대표적으로 템플릿이 있는걸 접할 수 있는 라이브러리는 STL의 vector, map, queue 등이 있습니다. 이 템플릿엔 특이한점이 있는데 std::forward가 있다는 것입니다. 우선 템플릿에 대한 기본적인 설명을 해보겠습니다. 기본적인 template 함수 #include template void fnc(T n) { std::cout 2020. 8. 31.
프로그래머스] C++ 연습문제 - 다음 큰 숫자 (level 3) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12911 1. 문제자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.제한 사항n은 1.. 2020. 8. 30.
프로그래머스] C++ 연습문제 - 숫자의 표현(level 2) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12924 1. 문제 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다. 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15 15 = 15 자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요. 제한사항 n은 10,000 이하의 자연수 입니다. 입출력.. 2020. 8. 28.
Kotlin] MutableList 기능 설명 1. MutableListKotlin의 List에는 List와 MutableList가 있습니다.List는 읽기 전용이며 MutableList는 읽기/ 쓰기가 가능합니다. Kotlin에선 List인 listOf의 사용을 권장하고 있습니다. (코드의 선명함과 안정성 때문에)하지만 동적으로 할당되는 배열을 활용하기 위해서 MutableList를 사용해야 합니다. 2. MutableList 기능1) initfun main() { val mulist1: MutableList = mutableListOf(10, 20, 11, 23, 55) val mulist2 = mutableListOf(10, 20, 30); val mulist3 = (1..50).toMutableList() val mulist4 = mutabl.. 2020. 7. 19.
Kotlin] List 기능 설명(vector와 array의 차이점) 1. ListKotlin에선 Collection 형태의 3가지 자료구조를 제공합니다.List, Set, Map 이렇게 말이죠. Kotlin의 List는 여러가지 제공되는 함수로 최적화를 진행하게 됩니다. 하여 List의 함수 사용법, java Vector와의 차이점을 한번 알아보고자 합니다. List에는 읽기전용인 listOf,읽기, 쓰기 전용인 mutableListOf가 있습니다. 여기선 읽기전용인 listOf에 대해 설명하고자 합니다. 2. List vs Array vs Vectorimport java.util.* import kotlin.system.measureNanoTime fun loop(i: Int){ for(i in 0..i){} } fun main() { val list: List = (.. 2020. 7. 18.
Kotlin] for문 vs foreach문 1. for문과 foreach문fun main() { for (i in 1..10) println(i) //output : 1, 2, 3, 4, ... 10 (1..10).forEach { i -> println(i) //output : 1, 2, 3, 4, ... 10 } }일반적인 for문과 forEach문 사용방법입니다. 모든 작업은 for문으로 대체가 가능합니다. 그럼에도 불구하고 forEach문을 사용하는 이유는 무엇일까요?? 2. Performance1) 일반적인 반복문에 대한 시간 계산fun loop(i: Int){ for(i in 0..i){} } fun main() { println("ForLoop Time: " + measureNanoTime { for (i in 0..10000) { .. 2020. 7. 18.
Kotlin] for문, while문 사용법 1. for문 코틀린 for문은 다양한 방식으로 작성될 수 있습니다. 1) 일반적인 for문fun main(args:Array) { for(i: Int in 1..10) print("$i ") //output : 1, 2, 3, 4, 5 ... 10 val len: Int = 5 for(i in 1..len) print("$i ") //output : 1, 2, 3, 4, 5 for(i in 1 until len) print("$i ") //output : 1, 2, 3, 4 } 첫번째 for문은 1 ~ 10까지 반복합니다. 두번째 for문은 1 ~ len(5)까지 반복합니다. 세번째 for문은 1 ~ 4까진 반복합니다.(until은 마지막 숫자 전까지) 2) 증가값 다양한 for문(step)fun ma.. 2020. 7. 17.
Kotlin] 코틀린 if문 형식(when, 범위지정) 1. 일반적인 if문fun main(args:Array) { var a = 10 if(a > 5) println("5보다 크다") else println("5보다 작다") //or if(a > 5) { println("5보다 크다") } else{ println("5보다 작다") } } 일반적인 if문 입니다. 다른 언어의 if문과 다른점이 없습니다. 2. 범위지정 if문fun main(args:Array) { var a = 10 if(a in 1..10) println("1~10안에 들어갑니다.") else println("1~10안에 안들어갑니다.") } //ourput : 1~10안에 들어갑니다. 저런식으로 '>', ' 2020. 7. 16.
Kotlin] 변수 입력 방법.(타입 캐스팅, null) 1. var과 val코틀린에선 자료형을 선언하지 않을 경우 컴파일러가 데이터 값을 기반으로 자료형을 판단하게 됩니다. var은 가변 변수로 값을 바꿀 수 있습니다. val은 정적 변수로 값을 바꿀 수 없습니다. (const개념) fun main(args:Array){ var i = 10; val j = 10.4; i = 20 //ok j = 30.0 //fail } 2. 숫자 표현.코틀린에선 숫자표현을 다르게 할 수 있습니다. fun main(args:Array){ var a = 10_000_000; var b = 10000000; var c = 0xFFFF_ABCD_0123 println(a) //output : 10000000 println(b) //output : 10000000 println(c).. 2020. 7. 16.
C++] cpprestSDK(Casablanca) https(ssl) 적용방법. 이 글을 읽기 전 boost.asio의 ssl적용법에 대해 궁금하신 분들은 https://hwan-shell.tistory.com/240?category=703822를 참고해주세요.openssl 설치가 안되신 분들을 설치를 해주세요. 1. http_listener_configlistener 클래스에서는 listener에 대한 설정을 할 수 있도록 도와주는 http_listener_config를 제공해줍니다. 이것에 대한 정보는 https://hwan-shell.tistory.com/237?category=868199에 잘 설명해 놨습니다. http_listener_config에서 제공하는 함수중에는 set_ssl_context_callback() 함수가 있습니다. 인자로는 boost::asio::ssl:.. 2020. 7. 16.
C++] boost에 openssl을 사용해 ssl 적용하기. 1. 구축환경 운영체제 : Ubuntu 20.04 openssl : 1.1.1f 2020/03 g++ : 9.3.0 boost : 1.71 ※ 이 외에도 저는 cpprestSDK를 사용하기 때문에 라이브러리를 불러오는 과정에서 약간의 차이점이 있을 수 있습니다. ※ 해당 예제는 클라이언트에서 load_verify_file() 를 사용해 서버의 인증서를 확인하는 예제입니다. 2. openssl로 인증서 만들기 1) Root certificate root private key $ openssl genrsa -out rootca.key 2048 ※ 위 인증서는 인증서 요청을 할 때 암호를 일일히 안쳐줘도 되는 인증서입니다. 클라이언트 측에서 인증서를 요청할 때 해당 인증서의 비밀번호를 요구하는 인증서를 만들 .. 2020. 7. 15.
728x90
반응형

스킨편집 -> html 편집에서