본문 바로가기

Programming

(110)
Data Structure Data Structure 그래프 (Graph) 정의 그래프는 실제 세계의 현상이나 사물을 정점(Vertex)과 간선(Edge)으로 표현을 하기 위해 사용한다. 비선형 자료구조이다. 표현 그래프는 인접 행렬(Adjacency Matrix) 또는 인접 리스트(Adjacency List)로 표현할 수 있다. 이진트리 (Binary Tree) 정의 모든 노드의 차수를 2 이하로 정해 전체 트리의 차수가 2 이하가 되도록 만든 것이 이진트리이다. 이진트리의 왼쪽 자식 노드와 오른쪽 자식 노드 2개만을 가질 수 있으며, 공백노드도 이진트리의 노드로 취급한다. 이진트리의 서브트리 모두 이진트리이다. 종류 이진트리는 포화 이진 트리(full binary tree), 완전 이진트리(Complete binary tree..
Network (Basic) PROTOCOL | TCP/IP | HTTP | Web Socket 프로토콜 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다. 통신 프로토콜은 신호 체계, 인증, 그리고 오류 감지 및 수정 기능을 포함할 수 있다. 프로토콜은 형식, 의미론, 그리고 통신의 동기 과정 등을 정의하지만 구현되는 방법과는 독립적이다. 구성(OSI 참조 모델 기반) 각 계층의 수직적 상하관계는 Top-Down 구조이다. 물리적 측면 : 자료 전송에 쓰이는 전송 매체, 접속용 단자 및 전송 신호, 회선 규격 등 (물리 계층, 데이터 링크 계층, 네트워크 계층) 논리적 측면 : 프레임 구성, 프레임 안에 있는 각 항목의 뜻과 기능, 자료 전송의 절차 등 (전송 계층, 세션 계층, 표현 계층, 응용 계층..
thrading - Manage concurrent threads threading - Manage concurrent threads link : https://pymotw.com/2/threading/ 스레딩 모듈은 스레드의 저수준 기능을 기반으로 스레드 작업을 훨씬 쉽고, 파이토닉하다(?). 스레드를 사용하면 프로그램이 동일한 프로세스 공간에서 여러 작업을 동시에 실행할 수 있다. Thread Objects 스레드를 사용하는 가장 간단한 방법은 대상 함수로 스레드를 인스턴스화하고, start()를 호출해 작동을 시작하는 것이다. import threading def worker(): """thread worker function""" print 'Worker' return threads = [] for i in range(5): t = threadin..
EC++Study_5 Chapter4. 설계 및 선언 항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자. C++에서는 발에 치이고 손에 잡히는 것이 인터페이스이다. (함수/클래스/템플릿) '제대로 쓰기에 쉽고 엉터리로 쓰기에 어려운' 인터페이스를 개발하려면 우선 사용자가 저지를 만한 실수의 종류를 머리에 넣어두고 있어야 한다. 새로운 타입을 들여와 인터페이스를 강화하면 상당수의 사용자 실수를 막을 수 있다. 어떤 타입에 제약을 부여해 그 타입을 통해 할 수 있는 일들을 묵어 버리는 방법도 있다. 제약 부여 방법으로 아주 흔히 쓰이는 예가 'const 붙이기'이다. 기본제공 타입과 쓸데없이 어긋나는 동작을 피하는 실질적인 이유는 일관성 있는 인터페이스를 제공하기 위해서..
EC++Study_4 Chapter3. 자원 관리 프로그래밍 분야에서 자원(resource)이란, 사용을 일단 마치고 난 후엔 시스템에 돌려주어야하는 모든 것을 일컫는다. 항목 13: 자원 관리에는 객체가 그만! auto_ptr [스마트 포인터(smart pointer)] 첫째 ,자원을 획득한 후에 자원 관리 객체에게 넘긴다. 자원 획득 즉 초기화(Resource Acquisition is Initialization: RAII) 둘째, 자원 관리 객체는 자신의 소멸자를 사용해서 자원이 확실히 해제되도록 한다. auto_ptr은 자신이 소멸될 때 자신이 가리키고 있는 대상에 대해 자동으로 delete를 먹인다. 그러므로 어떤 객체를 가리키는 auto_ptr의 개수가 둘 이상이면 절대로 안 된다. auto_ptr 객체를 복사하면..
EC++ Study_3 Chapter2. 생성자, 소멸자 및 대입 연산자 우리들이 만드는 거의 모든 C++ 클래스에 한 개 이상 꼭 들어 있는 것들이 생성자/소멸자/대입 연산자이다. 이들은 C++ 프로그램에 있어서 일용할 양식과 같이 중요한 함수이다. 첫 번째 것은 새로운 객체를 메모리에 만드는 데 필요한 과정을 제어하고 객체의 초기화를 맡는 함수이고, 두 번째 것은 객체를 없앰과 동시에 그 객체가 메모리에서 적절히 사라질 수 있도록 하는 과정을 제어하는 함수이며, 마지막 것은 기존의 객체에 다른 객체의 값을 줄 때 사용하는 함수이다. 따라서 클래스를 제대로 쓰려면 이들이 우선 우뚝 서 있어야 함은 분명하고도 중요한 요구사항이다. 항목 5: C++이 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 클래스가 비어 있지만 비..
EC++ Study_2 Chapter1. C++에 왔으면 C++의 법을 따르자. 항목 1: C++을 언어들의 연합체로 바라보는 안목은 필수 초창기의 C++은 단순히 C 언어에 객체 지향 기능 몇 가지가 결합된 형태였다. 오죽하면 C++의 처음 이름조차도 이 점을 드러내려는 듯 '클래스를 쓰는 C(C with Classes)'였을까. C++은 그 후 꾸준한 성장을 거쳤다. 기능, 아이디어, 프로그래밍 전략들을 취해 자기 것으로 만드는 데 있어 점점 대담하고 과감한 행보를 보였다. 이렇게 발전한 오늘날의 C++은 다중패러다임 프로그래밍 언어(multiparadigm programming language)라고 불린다. 절차적(procedural) 프로그래밍을 기본으로 해 객체 지향(object-oriented), 함수식(functi..
EC++ Study_1 용어 사용에 대하여 선언(declaration)은 코드에 사용되는 '어떤 대상'의 이름과 타입을 컴파일러에게 알려 주는 것이다. 하지만 구체적인 세부사항은 선언에 들어 있지 않다. 1) 객체 선언 : extern int A; 2) 함수 선언 : std::size_t A(int B); 3) 클래스 선언 : class A; 4) 템플릿 선언 : template ​ Class GraphNode; 모든 함수의 선언문에는 시그니처(signature), 다시 말해 그 함수의 매개변수 리스트와 반환타입이 나와있다. 함수의 경우엔 시그니처가 그 함수의 타입이다. 앞에서 본 A 함수의 시그니처는 std::size_t A(int)이다. 다시 말하면 'int 하나를 취하고, std::size_t를 반환하는 함수'라는 의미이..