본문 바로가기

전체 글62

C++ 1. 가상함수 (virtual Function) 파생 클래스에서 재정의 할 것으로 기대하는 멤버 함수를 뜻한다. 파생 클래스에서 virtual 키워드를 사용하지 않아도 자동으로 가상함수가 된다. 가상 소멸자 다형성을 이용하기 위해 부모 클래스의 포인터로 자식 클래스를 호출할 때, 가상 함수로 정의되어 있지 않은 자식 클래스의 오버라이딩 된 함수를 호출하면 부모 클래스의 멤버 함수가 호출된다. 이를 해결하기 위해 소멸자를 가상함수로 선언하면 자식 클래스에서 재정의 될 수 있음을 명시하여 포인터의 종류에 상관없이 호출하게 된다. 그렇다고해서 항상 가상함수로 선언하면 안된다. virtual 키워드를 사용하면 가상함수 테이블 포인터가 생기고 가상함수 테이블에 등록이 된다. 남발하게되면 메모리에 불필요한 공간이 .. 2022. 10. 25.
절차지향과 객체지향 1. 절차지향 프로그래밍 (Proceduer Programming) Top-Down 방식으로 접근하며 순차적인 처리가 중요시 되어 프로그램이 전체적으로 연결되도록 만드는 기법 대표적인 절차지향 언어는 C. 함수로부터 데이터를 받아 기능을 구현한다. 코드의 가독성이 좋고, 실행속도가 빠르지만 유지보수 및 디버깅이 어렵다. 2. 객체지향 프로그래밍 (Object Oriented Programming) Bottom-Up 방식으로 접근. 데이터와 절차를 하나의 덩어리(Object)로 묶어서 처리 모듈화 및 캡슐화로 유지보수에 용이하며, 코드의 재사용성이 높다. 처리속도가 느리고, 많은 양의 메모리를 사용한다는 단점이 있다. 추상화 객체들을 공통적인 특징들을 묶는다. 예시) 사자, 토끼, 뱀 각각을 객체라고 하며.. 2022. 10. 25.
알고리즘 1. 정렬 알고리즘 버블정렬 인접한 두 원소를 비교하며 정렬하는 알고리즘 시간복잡도 n^2 힙정렬 힙 자료구조에 담아 최대값이나 최소값부터 하나씩 꺼내서 정렬하는 알고리즘 시간복잡도 nlogn 병합 정렬 1) 정렬되지 않은 배열을 하나의 원소만 포함하는 n개의 부분리스트로 분할 2) 부분리스트가 하나만 남을 때까지 반복해서 병합하며 정렬된 부분 리스트 생성 3) 마지막 남은 부분 리스트가 정렬된 리스트이다. 시간복잡도 nlogn // 최악의 경우에도 nlogn 보장 퀵 정렬 피벗을 선정하여 피벗을 기준으로 좌우측 배열을 피벗보다 크고 작은 값으로 나누며 정렬한다. 시간복잡도 nlogn // 최악의 경우 n^2 삽입 정렬 2번째 원소부터 시작하여 앞의 원소들과 비교하여 삽입할 위치를 찾아서 정렬한다. 시간.. 2022. 10. 25.
운영체제 1. 메모리 구조 메모리 구조 운영체제의 메모리는 유저 영역과 커널 영역으로 나뉜다. 사용자가 함부로 커널 영역에 접근할 수 없도록 영역을 나누어 놓았다. 유저 영역에는 코드, 데이터, 스택, 힙으로 구분된다. 코드 영역 실행할 프로그램의 코드가 저장되는 영역이다. 텍스트 영역이라고도 불린다. 여기서 코드는 컴파일된 기계어 코드를 뜻한다. 데이터 영역 전역변수와 정적(static) 변수가 저장되는 영역이다. 프로그램이 종료될 때까지 남아있다. 스택 영역 지역변수, 매개변수, 함수가 저장되는 영역. 컴파일 시에 크기가 결정되며 동적인 특징을 갖는다. 함수가 재귀적으로 호출 될 경우 동적으로 크기가 늘어나는데 힙과 겹치면 안되기 때문에 힙과 스택 사이의 공간이 비워져 있다. 힙 영역 동적으로 메모리를 할당해.. 2022. 10. 25.