본문 바로가기
반응형

프로그래밍176

Go언어를 왜 사용 할까? Go언어란?Google에서 만든 프로그래밍 언어 입니다. C를 기반으로 만들어 졌으며, C언어의 장점을 살리면서 다양한 곳에서 활용할 수 있도록 만든 언어입니다. 즉, 시스템 개발, 운영체제, 웹 서버, 웹 브라우저, 로봇, 검색앤진 등 다양한 곳에서 사용하도록 말이죠. Go언어의 특징은 다음과 같습니다.1. 개발 속도 2. 모듈화를 위한 의존성 3. 동적 타입을 가진 속성 언어 4. 가비지 컬렉션 5. 병렬 처리 1. 개발 속도가 빠르다.Go 언어는 라이브러리에서 여러가지를 제공하고 있습니다. Go 언어는 멀티코어 기반으로 설계되어 있기 때문에 현재 하드웨어 개발, 소프트웨어 개발에 큰 이점을 갖고 있는 것이 사실입니다. 코드도 간결하게 짤 수 있습니다. 또한 C/C++에서의 컴파일 시간보다 현저히 빠.. 2020. 11. 4.
http와 tcp/ip의 이해 1. Http? tcp/ip? 네트워크 전공이신 분들은 이 두개가 서로 상호작용 한다는 것을 알고 있을 것입니다. 문제는 방대한 양의 정보와 잘못된 지식인데, http와 tcp/ip를 완전 다른놈 취급한다는 사실입니다. http를 까보면 tcp가 나오게 됩니다. 즉, tcp 기반으로 만들어진 프로토콜이 http라는 말입니다. 이를 이해하기 위해선 OSI 7 Layer를 이해해야 합니다. 하지만 너무 자세히 알 필요는 없습니다. 간략한 그림을 보여드리도록 하죠. 2. OSI 7 Layer 저희가 인터넷 주소창에 'www.google.com' 이라는 도메인 네임을 입력했다고 가정해 봅시다. 그럼 인터넷 창에선 www.google.com에 접속해 서비스를 받기위해 여러가지 포멧 형태가 일어나게 됩니다. 여기서.. 2020. 10. 31.
리틀 엔디언과 빅 엔디언 1. 엔디언?리틀 엔디언과 빅 엔디언에 대해 알아보기 전, 엔디언이 무엇을 말하는지 알아보겠습니다. 엔디언은 메모리의 순서를 뜻합니다. 무슨 메모리의 순서? 데이터가 들어가는 순서 입니다. 프로그램을 실행 시킬 때, 프로그램에 대한 정보가 메모리에 올라가게 됩니다. 메모리는 이 모든 정보들을 byte단위로 저장하고 있지요. 여기서 그냥 메모리에 올라가는 것이 아니라 CPU의 처리에 따라 바이트가 올라가는 순서가 다릅니다. 그리고 이 순서는 크게 빅 엔디언과 리틀 엔디언 방식이 있습니다. 2. 리틀 엔디언5678을 메모리에 넣는다고 가정해보겠습니다. 리틀 엔디언은 역순으로 메모리에 저장됩니다. 리틀 엔디언을 사용하는 CPU는 대표적으로 Intel, AMD가 있습니다. 리틀 엔디언 같은 경우 산술 연산시 빠.. 2020. 10. 22.
간단한 이진-tree 만들기(들어온 순서대로 만들기) 1. 목표 C++ 사용해 간단한 tree구조를 만들어보겠습니다. 입력한 순서대로 만들어지는 2진-tree를 만들것입니다. 예를들어 1, 2, 3, 4, 5, 6, 7, 8 이 들어온다면 다음과 같이 만드는 것이 목적입니다. queue를 이용한 bfs 방법으로 만들었습니다. 2. 만들기1) 우선 간단한 Tree와 요소를 담을 vector, 자료를 처리할 queue를 선언합니다.#include #include #include using namespace std; class tree {private: int num; tree* right; tree* left;public: tree() { right = NULL; left = NULL; num = 0; } ~tree() { delete(right); delet.. 2020. 9. 28.
2편] 멀티 프로세스, 멀티 쓰레드, 멀티 플렉싱에 대해서... 앞전에 동기, 비동기, 블로킹, 논 블로킹에 대해 설명을 했습니다. 이와 이어지는 내용입니다. 예제의 이해를 쉽개 하기 위해서 통신할때를 가정으로 두고 진행하겠습니다. 1. 멀티 프로세스말그대로 프로세스를 여러게 이용하는 것입니다. 클라이언트당 프로세스 하나를 물리는 것이죠. 이런식으로 프로세스를 늘리는 것이죠. 하지만 이런 방식은 굉장히 비효율적입니다. 프로세스 자체는 하나의 프로그램단위로 굉장히 큽니다. 또한 Context switching으로 인해 시스템 저하도 발생하죠. 흔히 알고있는 fork()로 만드는 것이 이 프로세스입니다. 위와 같은 단점때문에 쓰레드라는 개념으로 통신을 하기 시작합니다. 2. 멀티 쓰레드쓰레드는 프로세스보다 작은 단위이며 프로세스 안에서 논리적으로 동작하는 하나의 작업단위.. 2020. 9. 8.
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++] perfect forwarding 이란?(완벽 전달자) C++에는 템플릿이라는 항목이 있습니다. 템플릿은 타입을 정하지 않은 것으로 코드에 유연성을 제공하게 됩니다. 대표적으로 템플릿이 있는걸 접할 수 있는 라이브러리는 STL의 vector, map, queue 등이 있습니다. 이 템플릿엔 특이한점이 있는데 std::forward가 있다는 것입니다. 우선 템플릿에 대한 기본적인 설명을 해보겠습니다. 기본적인 template 함수 #include template void fnc(T n) { std::cout 2020. 8. 31.
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.
728x90
반응형

스킨편집 -> html 편집에서