2과목.소프트웨어 개발
- 1장.데이터 입출력 구현
* 자료구조
* 자료구조 : 자료를 특정 기준에 맞춰 정렬한것
- 종 류 1. 선형구조(순서가 있다)
EX) 카세트 테이프 => 뒤에있는 노래륻 들으려면 빨리감기를 해야한다
- 배열 : 같은 타입의 데이터가 나열되어 있는 정적인 자료구조 => 변화가 없다, 배열의 길이 수정이 안된다 -> 메모리의 낭비가 발생된다
-> 첨자와 변수를 이용한 반복적 데이터 처리에 적합하다
- 연속 리스트 : 배열에 데이터 편집(삽입,삭제) 기능이 추가된 형태 / 연속적인 공간에 데이터를 넣고 뺀다 -> 중간에 어느 데이터를 삽입,삭제 할 때 기존의 데이터가 밀린다
=> 수정보다 "조회작업"에 어울리는 자료구조
- 연결 리스트 : 수정에 용이한 리스트 => 비연속적 -> 첨자로 접근할 수 없다 => 포인터(다음데이터의 위치를 저장하고 있는 변수) 가 반드시 필요하다
=> 노드 (데이터와 포인트를 합한 개념) => 위치를 기억하는 포인터 덕분에 연속적인 공간을 사용할 필요가 없어 삽입,삭제 시 데이터가 밀리지 않는다
-> 연걸리스트는 다음 노드를 찾아가는 시간이 필요하고, 노드 는 데이터보다 공간을 많이 차지한
- 스택(Stack) : 노드의 입력과 출력이 한쪽으로만 이루어지는 구조 => 처음 들어간 노드가 가장 마지막에 나오는 구조로 되어있다
=> bottom : 가장 아래에 깔린 노드의 위치를 기억하는 포인터
=> top : 가장 위에 올려져있는 노드의 위치를 기억하는 포인터
* 스택이 꽉 찬 상태에서 push(삽입)을 하게되면 overflow가 발생된다 / 스택이 텅 빈 상태에서 pop(삭제)를 하개되면 underflow가 발생한다
- 큐(Queue) : 입/출력이 반대쪽에서 이루어지는 구조 => 앞(Front) 뒤(Rear) 로 노드의 위치를 표현한다
2. 비선형구조(순서가 없다)
EX) 유튜브 => 5분뒤의 영상을 보려면 5분뒤영상의 재생바를 클릭하면 바로 볼수 있다.
* 자료구조의 순서 : 절차에 가깝다
- 그래프(Graph) : 노드와 그 노드를 잇는 간선(edge)으로 이뤄지는 형태의 자료구조 => 노드간 관계를 파악하기 쉽도록 구성된 형태
- 트리(Tree) : 그래프(Graph) 에서 순환되는 구간을 없앤것
- 루트노드(Root Node) : 가장 위에 있다
- 터미널노드(Terminal Node) :: 가장 아래에 있다
- 디그리(Degree) : 특정 노드에서 뻗어나간 가지의 개수를 나타낸다
- 부모노드(Parent Node) : 이전 레벨
- 자식노드(Child Node) : 다음 레벨
- 형제노드(Sibiling Node) : 같은 부모를 가진다
- 트리의디그리(Degree Of Tree) : 가장 많은 가짓수를 나타낸다
★ 효율적인 프로그램을 작성할 떄 가상 우선적인 고려사항은 저장공간의 "효율성" 과 실행시간의 "신속성"이다
★ 자료구조에 따라 프로그램의 "실행시간"이 달라진다
★ 자료구조는 "자료"의 표현과 그것과 관련된 "연산"이다
★ "선형자료구조"는 순서에 따라 데이터에 접근하고 있는 형태이다
★ 스택은 자료의 삽입,삭제가 "한쪽방향"으로만 이루어진다
★ 스택은 "가장 나중"에 삽입된 자료가 "가장 먼저" 삭제되는 "후입선출"방식이다
★ 공간이 꽉 채워져 있는 상태에서 데이터가 삽입되면 "오버플로우"가 발생한다
★ 공간이 비워져 있는상태에서 데이터가 삭제되면 "언더플로우"가 발생한다
★ 큐는 자료의 삽입,삭제가 "서로 다른 방향"에서 이루어진다
★ 큐는 "가장 먼저" 삽입된 자료가 "가장 먼저" 삭제되는 "선입선출"방식이다
★ Front 포인터는 "가장 먼저" 삽입 된 데이터의 위치를 기억한다
★ Reat 포인터는 "가장 마지막에" 삽입 된 데이터의 위치를 기억한다
★ 노드는 "순환을" 하지않는 그래프의 형태이다
* 데이터베이스/DBMS/SQL
- 데이터베이스 : 관련 데이터들의 모임
- 데이터저장소 : 데이터의 연관성이나 제약조건을 구조화(논리)하고 실제 저장장치에 저장(물리)하는 순서로 구축된다
★ "논리 데이터저장소" : 데이터 간의 연관성,제약조건 등을 조직화 한것
★ "물리 데이터저장소" : 하드웨어적 저장장치에 데이터를 저장한 것
- DBMS : 데이터베이스를 관리하는 시스템 => 데이터베이스가 장점을 유지하도록 돕는다
-> 독립성 보장, 중복 배제(통합), 데이터 표준화 및 통합 , 무결성(일관성과 보안성)과 공용성 보장
=> 전문가 필요, 비용 증가,시스템 과부화(Overhead) 발생,복잡, 백업 어려움
- DBMS 필수기능 : 정의,조작,제어
- SQL(구조적 질의언어): DB에서 데이터 입/출력을 하기 위해 사용한다
=> DBMS를 위한 언어로 정의어(DDL), 조작어(DML), 제어어(DCL) 로 구분된다
- 정의어(DDL) : 테이블 구조,제약사항, 도메인 등을 정의,변경,삭제
- 조작어(DML) : 실제 데이터를 처리(조작)한다
- 제어어(DCL) : 데이터의 보안,무결성,권한,회복 등을 제어한다
- 트랜잭션 : 여러 종류의 데이터를 출력하는 과정
=> 과정 중간 어느 부분에서 실패하면 ROLLBACK 을 이용해 트랜잭션의 이전단계로 되돌린다
=> 실패 없이 트랜잭션이 완료 되면 COMMIT을 이용해 결과를 반영한다
=> 트랜잭션이 방대하다면 중간중간 SAVEPOINT를 생성하여 여러 롤백포인트를 만든다
- 절차형 SQL : 단순 트랜잭션에서 좀 더 발전해 반복,분기 등의 제어가 가능
=> 블록구조로 되어 있어 모듈화 가능,SQL이기 때문에 DBMS엔진 에서 직접 실행된다
=> 속도는 떨어지지만 입/출력 패킷은 적은편이다
=> 특정 이벤트(삽입,삭제 등)가 발생하면 이벤트와 연결된 Trigger가 프로시저(procedure) 또는 사용자 정의 함수 호출
* 프로시저와 함수의 차이점 : 결과값의 반환(함수) 여부 이다
- 테스트 및 디버깅 : SHOW 명령을 통해 오류내용을 확인하고 문제를 수정(디버깅) -> DB에 변화를 줄 수 잇는 실행문 주석처리 -> 출력문을 이용해 결과를 화면에서 확인