시작은 미미하나 끝은 쥬쥬하리라.

분류 전체보기 105

[열혈 C++ 프로그래밍] (4) 클래스의 완성

클래스의 완성 정보은닉 캡슐화 생성자와 소멸자 클래스와 배열, this 포인터 정보은닉 정보 은닉 다른 클래스에서의 접근을 제한하는 것 (= 외부에서 멤버 변수에 접근하는 것을 방지) = 멤버 변수를 private 선언 멤버 함수를 통한 안정적인 접근 경로를 설정 액세스 함수 정보 은닉으로 인하여 추가되는 함수 const 함수 멤버 함수의 const 선언 : const 함수 내에서는 동일 클래스에 선언된 멤버 변수의 값을 변경하지 못함 + const 함수는 const가 아닌 함수를 호출하지 못함 -> 간접적인 멤버의 변경 가능성 차단 + const 상수화 객체는 const 멤버 함수만 호출이 가능 캡슐화 하나의 클래스가 하나의 목적을 위하여 연관된 함수와 변수들이 모여 있는 것 ex) A클래스의 캡슐화가..

[열혈 C++ 프로그래밍] (3) 클래스의 기본

클래스의 기본 C++ 구조체 클래스와 객체 객체지향 프로그래밍의 이해 C++ 구조체 연관 데이터를 묶어 구현 및 관리하기 용이하게 하기 위한 문법적 장치 구조체 내부의 함수들은 인라인 함수로 동작 -> 함수를 구조체 밖으로 이동 시 인라인 처리 X C++ 구조체 : - 구조체 내부에 함수와 enum 상수까지 선언 가능 - struct라는 키워드를 사용하는 클래스 - struct 선언 시 디폴트로 public 선언 클래스와 객체 클래스 연관 데이터와 연관 함수의 집합 - 클래스 선언 시 디폴트 private -> 접근 제어 선언 없이 외부에서 클래스 멤버 사용 불가 객체 : 클래스를 대상으로 생성된 변수 멤버 변수 : 클래스 내부에 선언된 변수 멤버 함수 : 클래스 내부에 선언된 함수 파일 분할 : - 헤..

[열혈 C++ 프로그래밍] (2) C언어 기반 C++ 2

C언어 기반 C++ 2 C언어 기반 C++ bool 자료형 참조자의 이해 참조자와 함수 malloc & free를 대신하는 new C언어 기반 C++ const 변수, 객체의 상수화 키워드 const int* ptr1 = &val -> ptr1을 이용하여 val1의 값을 변경 할 수 없음 - const 변수는 반드시 선언과 동시에 초기화 -> 멤버 변수를 const로 선언하는 경우에는 반드시 초기화 리스트(initialize list) 사용 -> Bar의 num은 초기화가 아닌 const int num; 을 선언 한 이후 num = 1;을 시도하는 것 - const 포인터 -> const가 맨 앞에 있으면서 포인터 변수가 가리키 는 값을 상수화를 하는 경우에는 *ptr 상수화 -> const 위치가 자료..

[열혈 C++ 프로그래밍] (1) C언어 기반 C++ 1

C언어 기반 C++ 1 printf와 scanf를 대신하는 입출력 방식 함수 오버로딩 매개변수의 디폴트 값 인라인 함수 이름 공간 범위 지정 연산자 포인터 Printf와 scanf를 대신하는 입출력 방식 iostream iostream : 신 버전 라이브러리 iostream.h : 구 버전 라이브러리 std::endl; 개행 cout = console output, 별도의 서식지정 필요 없음, 연이은 입출력 가능 cin = console input, 별도의 서식지정 필요 없음, 연이은 입출력 가능 데이터선언 C : scanf("%s", str); C++ : cin >> str 함수 오버로딩 동일한 함수명을 가지면서 매개변수형이 다른 n개의 함수 관계 ex) 함수명이 같은데 매개변수가 다른 것 -> O e..

[Window System Programming] Chapter 17. 예외 처리 / SEH & 종료 핸들러 / 예외 핸들러

4-17 예외 처리 / SEH & 종료 핸들러 / 예외 핸들러 예외 처리 SEH & 종료 핸들러 예외 핸들러 예외 처리 CPU의 예외 처리 정책 CPU는 미리 정의된 예외 상황에서 소프트웨어, OS 등이 동작하는 중간에 예외가 발생하면 정책에 따라 처리 -> CPU는 에외 상황이 발생하면 발생 여부만 알려주고 처리의 구체적인 방안은 소프트웨어가 결정 -> 소프트웨어는 예외 처리 핸들러를 마련 해놓고, 예외 발생시 예외 핸들러 동작 -> OS를 하드웨어에 넣는 시점에서 이미 예외 핸들러는 설정 하드웨어 예외 이미 결정되어 있는 CPU의 예외 -> 하드웨어 예외의 처리 결정권은 소프트웨어에게 있음 SEH & 종료 핸들러 SEH Windows OS는 SEH(구조적 예외 기법) 매커니즘을 가지고 있음 -> 1...

[Window System Programming] Chapter 16. 메모리 계층 / 캐쉬와 캐쉬 알고리즘 / 가상 메모리

4-16 메모리 계층 / 캐쉬와 캐쉬 알고리즘 / 가상 메모리 메모리 계층 캐쉬와 캐쉬 알고리즘 가상 메모리 페이지 & 페이지 프레임 메모리 계층 메모리 계층 레지스터 : CPU에 내장, 연산을 위한 저장소 제공 L1 & L2 캐쉬 : CPU와 RAM 사이의 중간 저장소 역할, CPU의 일부가 아닌 CPU에 근접한 메모리 메인 메모리 : RAM ( + 하드디스크 일부 : 스왑 파일) -> 상위 계층으로 갈수록 비용, 속도 증가 -> 메모리 계층 비교 시, 같은 기능을 기준으로 비교 (ex: 메인 메모리의 실행 하드디스크의 실행을 비교) -> 프로그램 실행을 위해서 하위 메모리는 상위 메모리에게 메모리를 전달 -> 상위 메모리에 데이터가 없다면 하위 메모리에 데이터를 요청 -> 프로그램의 지역적 특성 때문..

[Window System Programming] Chapter 15. 스레드 풀링(Pooling)

3-15 스레드 풀링(Pooling) 스레드 풀 스레드 풀 구현 스레드 풀 스레드 풀의 필요성 스레드의 생성과 소멸이 빈번히 일어나면 시스템이 부담 -> 하나의 동작을 위해 하나의 스레드가 생성 후 소멸되고 다시 다른 동작을 위해 다른 스레드 생성/소멸 = 비효율적 스레드 풀 할당된 동작을 마친 스레드를 소멸시키지 않고 스레드 풀에 저장해두었다가 필요한 경우 다시 재사용 -> n개의 동작이 요구되면, 미리 스레드 풀 내부에 저장해둔 스레드를 통해 해당 동작을 처리하고 다시 스레드 풀로 반환 스레드 풀 구현 스레드 풀 구현 고려사항 1. 스레드를 어떻게 동작에 할당할 것인가? 2. 동작을 마무리한 스레드를 어떻게 스레드 풀 내부에 다시 저장할 것인가? 스레드 풀 구현 -> 스레드를 저장할 구조체 선언 : ..

[Window System Programming] Chapter 14. 이벤트 기반 동기화 / 타이머 기반 동기화

3-14 이벤트 기반 동기화 / 타이머 기반 동기화 이벤트 기반 동기화 타이머 기반 동기화 이벤트 기반 동기화 6. 이벤트 기반 동기화 : 접근 기반 동기화 : 순서 기반 동기화 순서 동기화의 필요성 ex) 사용자로부터 입력을 받아 출력하는 프로그램 -> 입력에 의존적, 입력은 사용자에 의존적 -> 10Byte씩 입력을 받다가 100MB의 입력이 이루어지는 경우 데이터 손실 발생 가능성 -> 입력 도중에도 출력이 이루어져야하기 때문에 프로그램 성능이 감당하지 못할 수 있음 -> 입력 스레드와 출력 스레드 사이에 버퍼를 두어, 버퍼가 Full되는 경우 버퍼의 값을 출력 버퍼로 전달해주는 모델 정의 -> 입력 스레드가 버퍼에 데이터를 보내기 이전에 출력 스레드가 출력 동작을 진행하면 쓰레기값 출력 -> 순서..

[Window System Programming] Chapter 13. 스레드 동기화 / 유저 모드 동기화 / 커널 모드 동기화

3-13 스레드 동기화 / 유저 모드 동기화 / 커널 모드 동기화 스레드 동기화 유저 모드 동기화 커널 모드 동기화 스레드 동기화 스레드 동기화 필요 이유 : 다수 스레드의 동시 접근 문제 임계 영역(Critical Section) 둘 이상의 스레드가 동시에 접근할 위험요소를 가지고 있는 코드 블록 -> 임계 영역은 한 번에 하나의 스레드만 접근할 수 있도록 설정을 해주어야 함 -> 위의 과정을 접근 동기화 ex) A스레드가 값을 입력받아 해당 값을 가지고 B스레드가연산을 하는 경우 -> A스레드는 B스레드보다 먼저 실행되어야 함 : 스레드의 실행 순서 컨트롤 -> 위 과정을 순서 동기화 스레드 동기화 메모리의 접근 동기화 + 실행 순서 동기화 동기화 구분 순서 동기화 : 이벤트 기반 동기화 접근 동기화..

[Window System Programming] Chapter 12. 스레드 생성, 소멸 / 스레드 성격, 특성 / 스레드 상태, 우선순위 컨트롤

3-12 스레드 생성, 소멸 / 스레드 성격, 특성 / 스레드 상태, 우선순위 컨트롤 스레드 생성, 소멸 스레드 성격, 특성 스레드 상태, 우선순위 컨트롤 스레드 생성, 소멸 스레드 생성 : createThread() -> 핸들의 상속 여부 -> 스레드의 독립적인 스택 공간 크기(스택 사이즈) -> 스레드 main 함수의 함수 포인터(스레드 main 함수가 전달되면 스레드가 독립적인 루틴을 형성) -> 스레드 main 함수에 전달할 인자, 자료형 -> default Flag -> 스레드 ID 핸들 vs 스레드 ID 핸들 : 프로세스가 가지는 고유한 정수값 -> 해당 프로세스 내에서만 의미를 지님 -> 프로세스가 내부 리소스를 컨트롤하기 위한 목적 스레드 ID : 스레드가 가지는 고유한 ID -> OS 전..