Study: Software(SW)

    [C++] 객체지향 프로그래밍: static, explicit, mutable, default, delete...

    static 총 생성된 인스턴스의 수를 구하는 클래스가 있다고 하면? 어떻게 구현할 것인가? 대부분이 전역변수를 설정하여 구한다고 할 것이다. 전역변수의 경우 프로젝트의 크기가 커질수록 실수로 인해 겹쳐서 오류가 날 수 있어 사용하지 않는 편이 좋다. 따라서 전역변수 설정을 피하기 위해서 나온 클래스에만 종속되는 변수가 'static' 이다. 이 static 멤버 변수의 경우, 클래스의 모든 객체들이 '공유' 하는 변수로써 각 객체 별로 따로 존재하는 멤버 변수들과는 달리 모든 객체들이 '하나의' static 멤버 변수를 사용하게 된다. static 멤버 변수의 경우, 멤버 변수들 처럼, 객체가 소멸될 때 소멸되는 것이 아닌, 프로그램이 종료될 때 소멸된다. static 멤버 변수는 아래와 같이 정의한다..

    [C++] C++ Json 라이브러리 성능비교(벤치마크): JsonCpp, Nlohmann/json...

    참고: 이 조사의 목적은 JsonCpp로 적용되어 있는 기존의 Json library를 Nlohman/Json으로 바꾸자를 제안이 있어서 조사하였음을 참고해주시기 바랍니다. 그렇다고 다른 라이브러리에 대한 내용이 빠진 것은 아닙니다. C/C++ Json Library Benchmark C/C++에는 41개의 오픈소스 Json parsing/generation libraries가 있습니다. JSON parsing/generation의 성능에 따라 server-side application에 영향을 줄 수 있습니다. Benchmark는 속도, 메모리, 코드사이즈를 기준으로 성능평가를 진행하였습니다. 자세한 Benchmarks와 Measurement의 기준은 아래의 링크를 참조하세요. https://githu..

    [C++] 병행 컴퓨팅: concurrency, thread...

    병행 컴퓨팅 (concurrency) 여러 개의 계산들을 연속적(하나씩 일을 마치는 것)으로가 아닌, 병행 처리하는 것을 말합니다. 병행 시스템은 다른 계산들이 모두 끝날 때까지 기다리지 않고 계산을 진행할 수 있는 환경을 말하며, 즉 하나 이상의 계산은 동시에 진행이 가능합니다. 프로그램 논리 구조 상에서 연산들 간의 의존 관계가 많을수록 병렬화가 어려워지고, 반대로, 다른 연산의 결과와 관계없이 독립적으로 수행할 수 있는 구조가 많을수록 병렬화가 매우 쉬워집니다. 쓰레드: CPU 코어에서 돌아가는 프로그램 단위. 한 프로세스 내에 있는 쓰레드끼리는 메모리 교환 가능. 프로세스: 최소 한 개 쓰레드로 이루어져 있으며, 여러 개의 쓰레드로 구성(멀티 쓰레드). 프로세스끼리 메모리를 공유하지 않음. std..

    [SW License] 오픈소스 소프트웨어 라이센스 정리: GPL, MIT, Apache, MPL...

    1. SW License? Opensource? 소프트웨어는 저작권에 의해 자신이 만든 소프트웨어를 다른 사람이 사용하지 못하게 하고 자신만이 사용할 수 있는 권리를 가지게 되며, 원칙적으로 이러한 권리자만이 소프트웨어를 사용, 복제, 배포, 수정할 수 있습니다. 이들 권리자가 다른 사람에게 일정한 내용을 조건으로 특정 행위를 할 수 있는 권한을 부여할 필요가 있는데, 이와 같은 권한을 'License'라고 합니다. SW License? 소프트웨어 자체에 대한 소유권과는 별개의 개념으로 소프트웨어를 '사용할 수 있는 권리'를 말하며 저작권자로부터 일정한 범위와 조건 안에서 소프트웨어를 사용할 수 있도록 허락받는 것을 말합니다. Opensource SW License? 많은 사람들이 자유롭게 사용할 수 있..

    [Design Pattern] GoF 디자인 패턴 (Design Patterns) 개요

    GoF 디자인 패턴(Design Patterns) 디자인 패턴은 많은 개발자들이 직면하는 문제를 해결하기 위한 방법을 모아 체계적으로 일반화한 것입니다. 일부 상속이 아닌 구조도 있지만 핵심은 "문제 해결을 위해 다형성을 이용하고 객체 간에 어떤 관계를 만들 것인가"이며, 세분화된 역할이나 모듈들 간의 인터페이스 구현 방식을 설계할때 참조할 수 있는 전형적인 해결 방식을 말한다. 따라서 디자인 패턴을 통해 설계 문제, 해결 방법, 해결 방법을 언제 적용해야 할지, 그 결과는 무엇인지 등을 알 수 있다. 디자인 패턴은 자신이 사용하는 프로그램 언어를 충분히 이해하고 직접 처음부터 끝까지 프로그램을 개발한 경험이 있는 경우 매우 도움이 됩니다. 디자인 패턴은 필요한 것이 아니라 자주 발생하는 상황에 대한 좋..