분류 전체보기 348

[C++ STL] 1.6 std::list

std::list복습std::forward_list는 기본적인 형태로 구현된 연결 리스트임리스트 끝에 원소 추가, 역방향 이동, 리스트 크기 반환 등의 기능을 제공하지 않음빠른 원소 삽입이 필요한 모든 경우에 어울리는 container는 아니다.std::forward의 단점을 보완하기 위해 c++에서 std::list를 제공한다std::list양쪽 방향으로 연결된 리스트, 즉 이중 연결 리스트(doubly-linked-list) 구조로 되어 있다.따라서 더 많은 기능을 제공한다. (메모리는 조금 더 많이 사용한다)// 이중 연결 리스트 노드 기본 형태struct doubly_linked_list_node{ int data; doubly_linked_list_node* next; doubl..

[C++ STL] 1.5 Iterator(반복자)

Iterator(반복자)반복자는 포인터와 비슷하지만, STL container에 대한 공통의 interface를 제공한다.반복자를 이용한 연산은 어떤 컨테이너에서 정의된 반복자인지에 따라 결정된다.배열과 벡터의 경우 연속된 자료 구조를 사용하기 때문에 지정 위치의 원소에 바로 접근할 수 있다.이러한 반복자를 임의 접근 반복자(random access iterator)라고 한다.std::foward_list의 경우 역방향 이동을 제공하지 않으며, 이전 노드로 이동하려면 처음부터 다시 찾아가야 한다.증가 연산만 가능하며, 이러한 반복자를 순방향 반복자(foward iterator) 라고 한다.반복자 타입에 따라 사용할 수 있는 함수advance()반복자와 거리 값을 인자로 받고, 반복자를 거리 값 만큼 증가..

[C++ STL] 1.4 std::forward_list

std::forward_liststd::array, std::vector와 같은 연속된 자료구조는 데이터 중간에 자료를 추가, 삭제하는 작업이 매우 비효율적임따라서 연결 리스트 기반 컨테이너가 등장함연결 리스트를 구성하는 중에 포인터와 관련된 버그 양산을 막기 위해 연결 리스트 wrapper class인 std::forward_list 클래스를 제공함std::forward_list의 기본적인 기능연결 리스트의 성능을 유지하면서 기본적인 기능을 제공함성능 유지를 위해 전체 리스트 크기를 반환하거나, 첫 번째 원소를 제외한 나머지 원소에 직접 접근하는 기능을 제공하지 않음front() 함수는 제공하지만, 거꾸로 움직이는 back() 함수는 제공하지 않음원소의 삽입, 삭제, 순서 뒤집기, 분할을 위한 기능은 ..

[C++ STL] 1.3 std::vector

std::vectorstd::array의 단점std::array의 크기는 컴파일 시간에 결정되는 상수이어야 한다.런타임 중에 변경할 수 없다.크기가 고정되어 있어서 원소를 추가/삭제할 수 없다.항상 스택 메모리를 사용한다. 메모리 할당 방법을 바꿀 수 없다따라서 가변 크기의 데이터를 처리할 수 있는 컨테이너가 필요하다 --> std::vectorstd::vector - 가변 크기 배열배열 기반으로 구현되어 있다초기화 과정에서 데이터의 크기를 제공하지 않아도 된다std:array의 '고정 크기' 문제를 해결한다벡터를 초기화 하는 몇 가지 방법// 크기가 0인 벡터 선언std::vector vec;// 지정한 초깃값으로 이루어진 크기가 5인 벡터 선언std::vector vec = { 1, 2, 3, 4, ..

[소공 시험공부] Software Reuse

Software Reuse를 왜 하나요?더 나은 SW를 빠르고 저렴하게 달성하기 위해서 하는 것.System부터 Application, component, Object and function 까지 모두 가능 Benefits of software reuse (외워야 하나..?)BenefitExplanationAccelerated development시스템을 가능한 한 빨리 시장에 출시하는 것이 전체 개발 비용보다 중요한 경우가 많습니다. 소프트웨어 재사용은 개발 및 검증 시간의 단축(both development and validation time may be reduced)으로 시스템 생산을 가속화할 수 있습니다.Effective use of specialists동일한 작업을 반복해서 수행하는 대신, 응..

[소공 시험공부] Safety Engineering

지금까지 Dependability 중 Availability, Reliability를 다뤘으니 이제 Safety를 다룰 차례이다. Safety란?시스템이 비정상/정상이든 작동하면서 인간에게 상해나 사망을 초래하지 않고, 시스템 환경에 손상을 주지 않는 속성을 말한다availability와 Reliability를 만족한다고 해서 Safety 한게 아니다. 명세와 부합하는지는 관련이 없다. Unsafe 하다는 건 어떤건가요?시스템에서 오랫동안 감지되지 않다가 드물게 결함이 나탈수도 있고, 명세에 오류가 있을수도 있고, 하드웨어 고장일수도, Context-sensitive 명령일수도... 요런 것들이다 중요한 용어 암기하기safety-critical system : 시스템 작동이 항상 안전해야 하는 시스템Ac..

[소공 시험공부] Software Reliability

들어가기 앞서 먼저 용어를 좀 알아보자Human mistake시스템에 결함을 도입하게 되는 인간 행동 System fault시스템 오류로 이어질 수 있는 소프트웨어 시스템의 특성System error시스템 사용자가 예상하지 못한 시스템 상태System failure시스템이 기대한 서비스를 제공하지 못할 때 발생하는 이벤트 System fault (버그가 존재함) -> Human mistake(버그를 발생시킴) -> System error(예상치 못한 결과가 나타남) -> System failure(Crash report 같은 결과 등장. system error의 결과) fault가 반드시 error를 발생시키는 것은 아니고(오류 발생 전에 수정하거나 아에 오류 있는 코드가 실행 안될수도), error가 ..

[소공 시험공부] System Dependability

내가 이 시스템을 사용하는 입장이라고 봤을 때 이 System에서 가장 중요한 건 바로 Dependability다.  신뢰할 수 없는 시스템을 사용자가 애초에 거부할수도 있고, 경제적 손실로 이어질 수도 있고, 신체적 손상 등등 발생할 수 있는 문제가 많다. 어떤 것들이 Dependability 에 해당하죠?가용성(Availability): 요청 시 서비스를 제공할 수 있는 시스템의 능력원할 때 시스템을 사용할 수 있을까?신뢰성(Reliability): 지정된 대로 서비스를 제공할 수 있는 시스템의 능력원하는 대로 시스템이 작동하는가?안전성(Safety): 치명적인 실패 없이 작동할 수 있는 시스템의 능력이 시스템이 안전한가?ex) 자율주행 시스템보안(Security): 의도적이거나 우발적인 침입으로부터..