리스트 : 메모리상에 임이의 위치에 데이터를 저장하지만 각 데이터들이 앞뒤 관계를 갖게 하는 방법
◦
스택 : 선입후출 방식의 자료구조. 히스토리 기능을 구현할 때 유용하고 DFS(깊이우선탐색), 후위연산, 백트래킹, 유효성 검사 등 다양한 곳에 사용된다.
◦
큐 : 선입선출 방식의 자료구조. 작업스케쥴링 기능을 구현하거나 BFS(너비우선탐색), 티켓 시스템 등 다양한 곳에서 사용된다.
•
비션형 구조
◦
자료들 간 관계가 1:N으로 나열되어 있는 것을 의미한다.
◦
그래프: 노드와 간선으로 이루어진 자료구조
▪
무방향 그래프 / 방향 그래프 / 가중치 그래프
◦
트리: 그래프의 한 종류로 싸이클의 구조가 없어야 한다.
▪
이진트리 : 각 부모노드의 자식 노드가 최대 2개인 트리
▪
편향트리 : 한쪽으로만 자식을 갖는 트리
▪
포화이진트리 : 이진트리에서 모든 부모가 2개의 자식노드를 갖는 이진트리
▪
완전이진트리 : 이진트리에서 거의 모든 노드가 채워져 있으며 강한한 제일 왼쪽부터 채워져 있는 이진트리
프로그래밍 기본
•
컴파일러
◦
고급 프로그래밍 언어로 작성된 소스코드를 기계어로 번역 및 실행하기 위한 프로그램. 가장 큰 특징은 소스코드 전체를 분석하고 그 다음 기계어로 번역 후 실행한다.
•
인터프리터
◦
컴파일러와 마찬가지로 고급 프로그래밍 언어로 작성된 소스코드를 기계어로 번역 및 실행하기 위한 프로그램. 컴파일러와 차이는 한 줄씩 소스 코드를 번역하고 실핸한다는 것이다.
•
실행순서
◦
파이썬 소스코드 작성.py → PVM(파이썬 가상 머신)을 통해 바이트코드로 변환.pyc → PVM이 바이트코드를 해석하고 기계어로 명령을 실행
•
메모리 영역
◦
코드영역
▪
프로그램을 실행하기 위해 명령어들이 저장되는 공간
◦
데이터 영역
▪
static 변수, 전역 변수와 같은 데이터들이 저장되는 공간. 프로그램 시작과 함께 할당되고 프로그램이 종료될 때 소멸된다.
◦
Heap 영역
▪
동적 메모리 할당을 위한 곳. 프로그래머가 직접 사용 및 관리해야하는 메모리 영역으로
◦
Stack 영역
▪
OOP(Object-Oriented Programming) 객체지향 프로그래밍
•
추상화하고자하는 객체의 모습을 가상의 공간에 구체화하며 설계해 나가는 것
•
객체(instance)란? 현실세계에 있는 어떤 대상을 추상화한 것을 의미한다.
•
class 클래스가 항상 따라 나온다.
◦
상속
▪
만약 다른 클래스의 기능을 사용하고 싶다면 상속을 받아서 부모클래스와 자식 클래스의 관계를 만든다.
◦
오버라이딩
▪
상속받은 클래스에서 어떤 기능을 재정의 하는 것을 의미한다.
◦
오버로딩
▪
함수의 이름은 같으나 매개변수를 다르게 설정하여 사용 목적에 따라 다르게 불러오는 것
▪
파이썬에는 없다.
소프트웨어 개발 방법론
•
폭포수 방법론
◦
하향식 방법으로 가장 오래된 개발 방법
◦
계획 → 설계 → 개발 → 시험 → 유지보수
◦
순차적으로 진행하며 SDLC(소프트웨어 개발 생명 주기)가 굉장히 길다.
◦
매우 큰 규모의 큰 프로젝트에 적합하며 이미 진행된 작업에 대해서는 변경 및 수정이 어렵다는 단점도 있다.
•
애자일 방법론
◦
반복적이고 점진적으로 개발하는 방법
◦
계획 → 설계 → 개발 → 시험 → 유지보수
◦
SDLC가 굉장히 짧기 때문에 여러번 반복하며 점진적으로 개발해 나간다.
◦
이해관계자의 피드백을 빠르게 반영할 수 있지만 개발 계획을 세우기 어려울 수 있다.
디자인 패턴
•
소프트웨어를 설계 및 구현할 때 어떠한 공통된 구조를 띄는 형태
•
MTV
◦
파이썬 기반의 웹 구현을 위한 프레임워크인 Django가 MTV 디자인 패턴을 지향합니다.
◦
M 은 model을 의미하며 DB에 데이터를 적재하고 테이블을 정의한다.
◦
T는 Template을 의미하며 사용자에게 보여지는 화면을 의미한다.
◦
V는 view를 의미하며 요청에 따라 필요한 로직을 수행하는 역할을 의미한다.
형상관리
•
소프트웨어의 변경사항을 추적하고 통제하기 위한 작업을 의미한다.
•
git, gerrit, jira 등등이 있다.
V&V (Verification & Validation) 검증과 확인
•
소프트웨어 완성도 및 신뢰도를 검증 및 확인하는 작업
•
Verification 검증
◦
개발자 중심에서 제품이 요구사항에 만족하게 구현되었는지 검증
•
Validation 확인
◦
사용자 중심에서 제품이 사용감에 만족하게 구현되었는지 검증
•
Test 시험
◦
단위 → 통합 → 시스템 → 인수
◦
Unit test 단위 시험
▪
최소 기능 단위로 시험
◦
Integraiton test 통합 시험
▪
함수간, 클래스간, 모듈 간 등이 잘 작동하는지, 충돌이 없는지
◦
System test 시스템 시험
▪
실제 적용하려는 하드웨어나 어떤 시스템에 개발한 소프트웨어를 탑재한 뒤 시험
◦
Acceptance test 인수 시험
▪
출시 및 배포 전 최종 시험
•
Test 종류
◦
정적 테스트
▪
소프투에어를 구동하지 않고 테스트하는 방법
▪
동료 검토, 코드 리뷰, 기술
◦
동적 테스트
▪
Black Box Test
▪
White Box Test
Subscribe to 'kyugntae-ai'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'kyugntae-ai'!