전체 글 129

20장 알고리즘

20.1 검색 검석(Search)이란 자료의 집합(table)에서 원하는 어떤 자료(Key)가 있는지, 있다면 어디에 있는지를 찾아내는 알고리즘이다. 검색은 소프트웨어 공학에서 가장 오랫동안 연구되어 온 주제이며 또한 가장 실용적인 주제이기도 하다. 원하는 자료를 빠르게 찾는 것뿐만 아니라 새로 추가되거나 삭제되는 자료들도 다음 검색을 위해 어떻게 조작할 것인지까지 포괄하는 종합 자료 관리 알고리즘이 바로 검색이다. 20.1.1 순차 검색 순차 검색(Sequential Search)은 모든 알고리즘 중에서 가장 기본적이면서 상식적인 검색 방법이다. 테이블을 처음부터 순서대로 읽으면서 원하는 키와 비교하기를 검색에 성공하거나 아니면 테이블 끝에 이를 때까지 반복하는 것이다. 임의의 자료에도 적용할 수 있으..

19장 자료구조

19.1 동적 배열 19.1.1 배열 요소의 삽입, 삭제 배열의 장점은 크게 두 가지가 있는데 첫 번째로 구좌 단순하기 때문에 정보 자체를 기억하는 메모리 외에 추가로 소모하는 메모리가 전혀 없어 공간 효율이 좋다. 둘째로 배열 크기가 아무리 커지더라도 검색 속도가 일정하다. 배열의 첨자 연산은 포인터를 통해 시작 번지에 첨자*요소크기를 더하는 간단한 동작이므로 임의의 한 요소를 참조하는 시간이 상수이다. 그러나 배열에도 한가지 단점이 있는데 배열 요소가 연속된 메모리 공간에 배치되어 있어야 하므로 중간의 요소를 삭제하거나 새로운 요소를 삽입할 수 없다는 점이다. 예제 ArrayInsDel #include #include char ar[16] = "abcdef"; void Insert( int idx, ..

삽입 정렬( Insert Sorting )

오름 차순 기준으로 수행 첫 번째 데이터와 두 번째 데이터를 비교 첫번째가 더 작기 때문에 바꿀 필요가 없다 3 5 6 4 1 두번째와 세번 째 비교 바꿀 필요 없음 3 5 6 4 1 세 번째와 네 번째 데이터 비교 바꿀게 생겼음 3 5 6 4 1 숫자4를 임시 기억장소에 기억해 두고 앞에 있던 수를 4가 있던 자리에 복사 3 5 6 6 1 4 그 앞에 있는 5와 4를 비교 역시 바꿔야 하기 때문에 5를 뒤쪽으로 복사 3 5 5 6 1 4 마찬가지고 3과 비교해보면 바꿀 필요 없으므로 5가 있던 자리로 4를 복사 3 4 5 6 1 4 이제 6과 1을 비교 바꿔야 됨, 임시 기억장소에 1을 복사하고 1이 있던 자리로 6을 복사 3 4 5 6 6 1 마찬가지로 5도 1보다 크므로 뒤쪽에 복사 3 4 5 5 ..

18장 C 고급 문법

18.1 타입 컴퓨터의 메모리는 0과 1만을 기억할 수 있는 비트로 구성되어 있다. 이 내용은 당장 실무에 도움을 줄 수 있는 실용적인 이론은 아니지만 타입의 내부 구조를 이해함으로써 컴파일러의 동작을 좀 더 깊이 있게 이해하고 메모리에 저장된 값을 직접 평가하고 다룰 수 있는 직관력을 키울 수 있다. 18.1.1 정수의 내부 일반적으로 비트 n개가 모일 때 2n가지의 수를 표현할 수 있으며 시작 수가 0이므로 최대 표현 가능한 수는 2n-1이 된다. 부호가 있으면 표현수는 절반이 되지만 음수를 표현할 수 있다. 16비트 길이의 unsigned short형은 216-1(65535)까지 표현 가능 32비트 길이인 unsgiend int 232-1(4294967295)의 큰 값을 표현 가능하다 변수가 기억할..

17장 파일 입출력

17.1 파일 17.1.1 정보의 저장 파일은 디스크에 정보가 저장되는 단위이며 고유의 이름을 가진다. 프로그램이 실행 중에 파일을 액세스 하는 경우가 많은데 디스크에 있는 파일을 읽거나 쓰고 관리하는 방법을 알아본다. 실행 파일의 크기에는 제약이 있기 때문에 모든 정보를 다 가질 수 없으며, 큰 정보는 외부의 파일에 두고 실행 중에 읽어서 사용하는 방법을 쓴다. (ex. 실행에 필요한 이미지, 사운드 파일) 프로그램이 작업 결과를 영구적으로 저장하기 위해서도 파일을 사용한다. 파일은 보조 기억장치에 기록되어 있다. 파일을 액세스 하는 방법에는 여러 가지 종류가 있다. 고수준 입출력 스트림 사용 C 라이브러리가 제공하는 파일 입출력 방법이며 성능은 조금 떨어지지만 사용하기는 쉽다. 표준에 의해 삼수의 형..

16장 함수 고급

16.1 호출 규약 16.1.1 스택 호출 규약(Calling Convention)이란 함수를 호출하는 방식에 대한 일종의 약속 인수는 어떻게 전달하며 리턴값은 어떻게 반환하고 인수 전달을 위해 사용한 메모리는 누가 정리할 것인지 등을 규정 호출 규약을 이해하기 위해서는 스택에 대해 알아야 하며 스택은 기계어 수준에서 동작하기 때문에 어셈블리 언어에 대한 개념도 필요 스택(Stack)은 시스템이 사용하는 메모리 공간 CPU가 임시적인 정보를 저장할 필요가 있을 때 이영역을 사용 만약 힙과 스택이 만나게 되면 메모리가 부족한 상태가 됨 스택에 값을 저장하는 동작을 push(민다)라고 하며 저장된 값을 빼내는 동작을 pop(당긴다)라고 함 스택에 저장된 값들을 LIFO(Last In First Out)의 원..

27장 캡슐화

27.1 정보 은폐 27.1.1 프로그램의 부품 구조적 프로그래밍 기법에서는 함수가 프로그램을 구성하는 기초적인 부품의 역할을 한다. C++(객체 지향 프로그래밍)에서는 기존의 함수가 맡고 있던 역할을 객체가 대신한다. 객체 안에는 속성과 동작이 캡슐화되어 있으며 이런 객체들이 모이고 서로 상호 작용하면서 프로그램을 구동 객체가 소프트웨어의 부품 역할을 충실히 수행하려면 여러 가지 조건을 만족해야 한다. 우선 관련된 속성과 동작을 한 곳에 모아 스스로 동작할 수 있도록 하는 캡슐화가 가장 기본적인 조건이다. 그리고 곡 필요한 인터페이스만 외부로 노출하고 세부 구현은 숨기는 추상성의 조건도 만족해야 한다. 그래야 최소한의 정보만으로 객체를 쉽게 사용할 수 있으며 부주의한 사용자로부터 자신을 방어할 수도 있..

26장 생성자

26.1 생성자 26.1.1 생성자 :: 객체 초기화 클래스의 객체를 선언하면 메모리에 이 객체가 즉시 생성된다. 그러나 메모리만 할당 될 뿐이지 초기화는 되지 않으므로 객체 내의 멤버 변수들은 모두 쓰레기값을 가지고 있을 것이다. 쓰레기값을 가지고 있는 객체는 쓸모가 없으며 그래서 객체 선언문 다음에는 통산 객체를 원하는 상태로 초기화하는 대입문이 따라온다. 객체를 초기화하는 이 특별한 함수를 생성자(Constructor)라고 부른다. 생성자는 클래스 스스로 자신을 초기화하는 방법을 정의하며 클래스를 기본 타입과 동등하게 만드는 언어적 장치이다. 생성자의 이름은 항상 클래스의 이름과 동일하며 필요할 경우 초기화에 사용할 인수를 받아들일 수 있지만 리턴값은 가질 수 없다. 예제 Constructor #i..

25장 클래스

25.1 OOP 25.1.1 소프트웨어 위기 하드웨어의 발전에 힘입어 컴퓨터 가격이 저렴해지고 활발하게 보급됨에 따라 컴퓨터의 활용 분야가 점점 넓어졌다. 컴퓨터가 업무와 생활 곳곳에 활용됨에 따라 특수한 용도에 맞는 다양한 소프트웨어가 필요해졌다. 또한 하드웨어가 빨라지고 대용량화됨으로써 컴퓨터로 할 수 있는 일들이 많아져 소프트웨어의 기능도 과거보다 훨씬 더 복잡해지고 만들기도 어려워졌다. 그러나 소프트웨어가 하드웨어의 발전을 따라가지 못하는 이런 현상을 소프트웨어 위기(Software Crisis)라고 함 소프트웨어의 위기 원인 기존 절차식 프로그래밍 방법의 낮은 생산성 절차식 프로그래밍은 간결하고 빠른 실행 파일을 만들기는 하지만 규모가 커지면 개발뿐만 아니라 유지보수에 한계를 드러 냈다.코드의 ..

목차

목차 3부 C++ 문법 제 25 장 클래스 25-1 OOP 가. 소프트웨어 위기 나. OOP의 특징 다. OOP 맛보기 25-2 C++로의 확장 가. 개선 사항 나. IOStream 다. new 25-3 구조체의 확장 가. 멤버 함수 나. 멤버 함수 작성법 다. 액세스 지정 25-4 클래스 가. class 나. 클래스는 타입이다 다. 인스턴스 라. 클래스의 예 제 26 장 생성자 26-1 생성자 가. 생성자 나. 파괴자 다. 생성자, 파괴자의 특징 라. 객체의 동적 생성 26-2 여러 가지 생성자 가. 디폴트 생성자 나. 복사 생성자 다. 멤버 초기화 리스트 26-3. 타입 변환 가. 변환 생성자 나. 변환 함수 다. 클래스간의 변환 제 27 장 캡슐화 27-1 정보 은폐 가. 프로그램의 부품 나. 몰라..