파이썬
-
자료구조 핵심 원리 - 연결 리스트Algorithm 2022. 9. 23. 21:34
1. 연결리스트 동적 배열은 탐색 기능이 막강하며 배열 마지막에서 삽입 및 삭제 연산 속도가 빨라 프로그램을 처음 작성할 때 가장 먼저 사용을 고려하는 자료 구조입니다. 하지만 데이터를 배열 중간에 삽입하거나 삭제해야 할 때는 원소들을 옮겨야 하는 부담이 있지요. O(n) 정도면 성능이 훌륭하지 않나 하고 생각할 수도 있습니다. 그래도 중간에 삽입과 삭제가 자주 일어나는 상황에서 좀 더 나은 삽입 및 삭제 연산을 제공하는 자료 구조가 있다면 배열보다 그것을 선택하는 것이 나을 수 있습니다. 연결 리스트(linked list)는 이런 고민에서 만들어진 자료 구조입니다. 연결 리스트는 그 자체만으로는 동적 배열에 비해 쓰임새가 적은 편입니다. 삽입과 삭제가 빈번한 경우에 사용을 고민해 볼 수 있겠지요. 연결..
-
자료구조 핵심 원리 - 동적 배열Algorithm 2022. 9. 23. 17:32
1. 동적 배열 초기 배열은 같은 데이터 타입을 가진 변수 집합이었습니다. 아직도 많은 언어에서 배열은 같은 타입 변수들을 저장합니다. 하지만 C 언어를 제외한 거의 대부분의 언어가 초기 형태의 배열이 아닌 동적 배열을 지원합니다. 동적 배열은 기존 배열이 가지는 장점은 유지하면서 여러 단점은 보완한 형태로 구현되었습니다. 메모리에 데이터를 저장하는 영역은 세 군데인데, 그중 스택과 힙 영역이 있습니다. 스택은 실제 스택 프레임(파이썬의 스택 프레임과 개념은 같지만 실제 할당되는 공간은 다름)이 쌓이는 메모리 공간이고, 힙은 변수의 생성 시기와 소멸 시기를 프로그래머가 결정할 수 있는 메모리가 동적으로 할당되는 영역입니다. 동적 배열 개념을 이해하려면 스택과 힙 차이를 알아야 합니다. 스택 프레임을 할당..
-
병합 정렬, 힙 정렬 (파이썬)Algorithm 2021. 6. 22. 21:33
병합 정렬 merge sort 노이만이 고안한 분할 정복 알고리즘. 퀵 정렬과 반대로 안정 정렬에 속한다. 배열을 앞부분과 뒷부분의 두 그룹으로 나누어 각각 정렬한 후 병합하는 작업을 반복하는 알고리즘이다. 과정 i) 리스트의 길이가 0또는 1이면 이미 정렬된 것으로 본다. ii) 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다. iii) 각 부분 리스트를 재귀적으로 병합 정렬을 이용해 정렬한다. iv) 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다. 장점 - 안정적인 정렬 방법 - 레코드를 linked list로 구성하면, 데이터의 이동은 무시할 수 있을 정도로 작아진다. (퀵 정렬을 포함한 다른 정렬 방법보다 효율적이다.) 단점 - 레코드를 배열로 구성하면 임시 ..
-
컴파일러 언어vs 인터프리터 언어Computer Science 2021. 5. 9. 22:00
컴파일 언어와 인터프리터 언어는 컴파일 타임이 있느냐 없느냐 즉, 소스 코드를 분석하는 시점과 입력 데이터를 받는 시점이 언제이냐에 따라 나뉜다. 이 문장만으로는 명확히 이해되지 않으니 C와 파이썬을 예로 들어보자. C언어 : 컴파일러 분석 언어 C언어는 소스코드를 컴파일하여 목적 코드(object code/object file)인 기계어로 된 인스트럭션을 만들어 낸다. 링커(linker)는 필요한 라이브러리를 가져오고 여러 개의 목적 파일을 함께 묶어 실행 파일(executable file)을 생성한다. 이제 프로그램을 실행하고 데이터를 입력하면 결과 데이터가 출력된다. 중요한 점은 소스 코드를 분석하는 컴파일 타임(compile time)과 실제 데이터를 입력받아 결과를 출력하는 런타임(run tim..
-
Django - 03 Model 코딩Django 2021. 3. 31. 17:02
모델 작업은 데이터베이스에 테이블을 생성하는 작업이다. 다음 순서대로 진행한다. >notepad models.py // 테이블을 정의함 >notepad admins.py // 정의된 테이블이 Admin 화면에 보이게 함 >python manage.py makemigrations // 데이터베이스에 변경이 필요한 사항을 추출함 >python manage.py migrate // 데이터베이서에 변경사항을 반영함 >python manage.py runserver // 현재까지 작업을 개발용 웹 서버로 확인함 테이블 정의 앞에서 설계한 것처럼, polls 애플리케이션은 Question과 Choice 두 개의 테이블이 필요하다. 테이블은 models.py 파일에 정의한다. 장고에서는 테이블을 하나의 클래스, 테이..
-
Django - 02 애플리케이션 설계 / 프로젝트 뼈대 만들기Django 2021. 3. 29. 23:01
애플리케이션 설계하기 프로젝트란 전체 프로그램을 의미하며, 프로젝트를 몇 개의 기능 그룹(프로그램)으로 나누었을 때, 하위 프로그램을 애플리케이션이라고 한다. 이런 개념으로 프로젝트 디렉터리와 애플리케이션 디렉터리를 구분하고, 코딩하는 파일도 프로젝트 파일인지 애플리케이션 파일인지 구분해서 저장해야 한다. 이런 개념에서 중요한 점은 하나의 애플리케이션이 여러 프로젝트에 포함될 수 있기 때문에, 애플리케이션을 한 번만 개발하고, 이를 다른 프로젝트에 재사용해서 개발의 생산성을 높일 수 있다. 또한 애플리케이션 단위로 모아서 프로젝트를 만들고, 프로젝트를 모아서 더 큰 프로젝트를 만드는 방식으로, 계층적인 개발이 가능하다는 장점이 있다. 다음 그림은 설문에 해당하는 질문을 보여준 후 질문에 포함되어 있는 답..
-
Django - 01 애플리케이션 개발 방식Django 2021. 3. 29. 20:15
웹 사이트를 설계할 때 가장 먼저 해야 할 일은 프로그램이 해야 할 일을 나누어서 모듈화 하는 것이다. 웹 사이트의 전체 프로그램 또는 모듈화된 단위 프로그램을 애플리케이션이라고 한다. 즉, 코딩할 대상을 애플리케이션이라고 부른다. 장고에서는 애플리케이션의 개념을 웹 서버 개발 측면에서 좀 더 구체화 한다. 웹 사이트에 대한 전체 프로그램을 프로젝트라 하고, 모듈화된 단위 프로그램을 애플리케이션이라 부른다. 즉, 애플리케이션 프로그램들이 모여서 프로젝트를 개발하는 개념이다. MVT 패턴 MVC(Model-View-Controller)패턴은 데이터, 사용자 인터페이스, 데이터를 처리하는 로직을 구분해서 한 요소가 다른 요소들에 영향을 주지 않도록 설계하는 방식이다. 이런 방식으로 개발하면 디자이너는 데이터..
-
Django - 장고의 특징Django 2021. 3. 29. 20:07
MVC 패턴 기반 MVT 장고는 MVC(Model-View-Controller)를 기반으로 한 프레임워크다. Model은 데이터베이스에 액세스하는 컴포넌트이고, View는 데이터를 가져오고 변형하는 컴포넌트인 반면에 Template은 데이터를 사용자에게 보여주는 컴포넌트다. 그래서 장고를 흔히 MVT(Model-View-Template) 프레임워크라고 부른다. (용어는 다르지만 개념은 동일하다.) 객체 관계 매핑 객체 관계 매핑(ORM, Object-Relational-Mapping)은 데이터베이스 시스템과 데이터 모델 클래스를 연결시키는 다리 역할을 한다. ORM 기능 덕분에 SQL 문장을 사용하지 않고도 데이터베이스 테이블을 조작할 수 있다. 자동으로 구성되는 관리자 화면 웹 서버의 콘텐츠(데이터베이..