본문 바로가기

정처기

소프트웨어 개발

반응형

★ 자료구조

1) 분류

- 선형 구조: 배열, 스택, 큐, 데크, 선형리스트

- 비선형 구조: 트리, 그래프

2) 배열

 - 정적인 자료 구조로 기억 장소 추가가 어렵고 메모리 낭비 발생, 첨자 사용

 - 반복적인 데이터 처리 작업에 적합한 구조, 동일한 이름의 변수를 사용해 처리가 간편

3) 스택

 - 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이뤄짐(후입선출)

4) 큐

 - 한족에서는 삽입, 한쪽에서는 삭제 작업

 - 선입선출

 - 시작과 끝을 표시하는 2개 의 포인터가 있음

 - 운영체제의 작업 스케줄링에 사용함

5) 데크

 - 양쪽 끝에서 삽입과 삭제작업

6) 선형 리스트

 - 연속 리스트:

   >연속되는 기억장소에 저장되는 자료구조

   >연속된 빈 공간이 있어야 함.

   >삽입 삭제 시 자료의 이동이 필요함

 - 연결 리스트

   >노드의 포인터 부분을 이용해 서로 연결

   >노드의 삽입, 삭제 작업이 용이

   >순차리스트에 비해 기억 공간의 효율이 좋지 않음

   >접근 속도가 느림

7)트리

 - 정점과 선분을 이용해 사이클을 이루지 않도록 구성한 그래프의 특수한 형태

 - 노드, 근노드(맨위), 디그리(가지의 수), 단말 노드(마지막 노드), 자식 노드, 부모노드, 형재 노드,

-> 트리의 디그리(디그리 중 가장 많은 수) 자식이 3개인 게 제일 많으면 그게 트리의 디그리.

8) 그래프

 - 방향 그래프: 선에 방향이 있음. 최대 간선수 =  n(n-1)

 - 무방향 그래프: 방향 없음. 최대 간선 수 = n(n-1)/2

 

★데이터베이스/DBMS

1) 데이터베이스

 - 공용데이터, 통합된 데이터, 운영 데이터(없어선 안 됨), 저장된 데이터

2) DBMS

 - 데이터베이스를 관리해주는 소프트웨어

 - 정의 기능(데이터 타입과 구조에 대한 정의, 이용 방식, 제약 조건 명시) -> DDL

 - 조작 기능(인터페이스 수단을 제공하는 기능) - DML

 - 제어 기능(무결성, 보안, 권한, 병행 제어)

 

★데이터 입출력

1) SQL: 관계대수와 관계 해석을 기초로 한 혼합 데이터 언어

 - 데이터 정의어(DDL): 도메인, 스키마, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 삭제할 때 사용하는 언어

 - 데이터 조작어(DML): SELECT(검색), INSERT, UPDATE, DELETE로 저장된 데이터를 실질적으로 처리하는 데 사용되느 ㄴ언어

 - 데이터 제어어(DCL): 무결성, 보안, 회복, 병행 제어 등을 정의하는 데 사용되는 언어

2) 데이터 접속: 프로그래밍 코드와 데이터베이스의 데이터를 연결하는 것

 - SQL Mapping: SQL을 직접 입력해 데이터에 접속하는 기술(JDBC, ODBC, MyBatis)

 - ORM: 객체와 관계형데이터베이스의 데이터를 연결하는 기술(JPA, Hibernate, Django)

3) 트랜잭션

 - COMMIT: 변경 내용을 DB에 반영

 - ROLLBACK: 비정상 적으로 종료되어 변경 작업 취소하고 이전 상태로 되돌리는 연산

 - SAVEPOINT: 롤백한 저장점을 지정하는 명령어

 

 - 트랜잭션의 특징(ACID)

  > Atomicity 원자성: 모두에 반영 또는 반영하지 말아야 함.

  > Consistency 일관성: 일관성 있는 상태 유지

  > Isolation 동립성: 한개의 트랜잭션만 접근이 가능하여 간섭 불가

  > Durability 영속성: 영구적으로 반영

 

★절차형 SQL

1) 개요

- 연속적인 실행이나 분기, 반복 등의 제어가 가능한 SQL

- 프로그래밍 언어에 비해 효율이 떨어짐. 연속적 작업 처리에 적합

- BEGIN ~ END 형식으로 작성되는 블록 구조로 기능별 모듈화 가능

  > 프로시저: 미리 저장한 SQL 작업 수행. 처리 결과는 한 개 이상의 값 혹은 반환을 아예 하지 않음

  > 트리거: 입력, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업을 자동 수행

  > 사용자 정의 함수: 일련의 작업을 연속적으로 처리함. 종료 시 예약어 RETURN으로 처리 결과를 단일값으로 반환

2) 테스트와 디버깅

- 테스트 전 구문 오류나 참조 오류의 존재 여부 확인

- 오류 및 경고 메시지가 상세히 출력되지 않으므로 SHOW 명령어 통해 내용 확인

- 실제로 SQL문을 주석으로 처리하고 디버깅

3) 쿼리 성능 최적화

 - 성능 향상 위함

 - 성능 측정도구(APM - Application Performance Management/Monitoring)을 사용해 최적화할 쿼리 선정

 - 옵티마이저가 수립한 실행 계획을 검토하고 SQL 코드와 인덱스 재구성

 

★개발 지원 도구

1) 통합 개발 환경(IDE) - 안드로이드 스튜디오, Eclipse etc

2) 빌드 자동화 도구: 소스코드 -> 소프트웨어로 변환하는 과정에 필요한 전처리, 컴파일 등의 작업 수행

  > Ant: XML 기반 빌드 스크립트 사용, 개발자가 모든 것 정의, 스크립트 재사용 어려움, 자바의 공식적인 빌드 자동화 도구

  > Maven: 컴파일과 빌드를 동시에 수행할 수 잇음, 의존성 설정하여 라이브러리 관리

  > Gradle★: 안드로이드 스튜디오의 공식 빌드 도구, 의존성 활용, 그루비 기반, 태스크로 만든 후 태스크 단위로 실행, 빌드 캐시 기능 지원

  > Jenkins: JAVA 기반의 오픈소스 형태로 가장 많이 사용됨. 서블릿 컨테이너에서 실행. 대부분의 형상 관리 도구와 연동

3) 기타 협업 도구

 - 일정 관리 도구, 프로젝트 관리 도구, 정보 공유 및 커뮤니케이션 도구, 디자인 도구, 아이디어 공유 도구, 형상 관리 도구

 

★소프트웨어 패키징

- 사용자를 중심

- 기능 식별 -> 모듈화 -> 빌드 진행 -> 사용자 환경 분석 -> 패키징 및 적용 실험 -> 패키징 변경 개선 -> 배포

고려사항: 보안, 복잡성 및 비효율성, 암호화 및 알고리즘, 이기종 연동

 

★릴리즈 노트

- 소프트웨어의 고객과 공유하기 위한 문서

- 머리말: 릴리즈 노트 이름, 소프트웨어 이름

- 개요, 목적, 문제 요약, 재현 항목, 수정/개선 내용, 사용자 영향도, SW 지원 영향도, 노트, 면책 조항, 연락처

- 추가 버전 작성 시 고려사항: 모든 수정한 내용

- 순서: 모듈 식별 -> 릴리즈 정보 확인 -> 릴리즈 노트 개요 작성 -> 영향도 체크 -> 정식 릴리즈 노트 작성 -> 추가 개선 항목 식별

 

★디지털 저작권 관리(DRM)

1) DRM 흐름

- 콘텐츠 제공자, 분배자(유통), 소비자

- 패키저: 배포 가능한 형태로 묶어 암호화 프로그램

- 클리어링 하우스: 사용 권한, 라이선스 발급, 결제관리

- DRM 컨트롤러: 이용 권한을 통제하는 프로글매

- 보안 컨테이너: 전자적 보안 장치

2) DRM 기술요소

- 암호화, 키 관리, 식별 기술, 저작권 표현, 암호화 파일 생성, 정책 관리, 크랙 방지, 인증

 

★형상 관리

1) SCM(소프트웨어 패키징의 형상 관리)

 - 형상 관리 = 개발 과정에서 소프트웨어 변경 사항을 관리하기 위해 개발된 일련의 활동. 개발의 전 단계에 적용되는 활동

2) 중요성: 변경 사항 체계적으로 추적하고 통제할 수 있음. 무절제한 변경 방지. 진행 정도 확인

3) 형상 관리 기능: 형상 식별(수정 및 추적), 형상 통제(변경 관리), 형상 감사(무결성), 형상 기록, 버전 제어

4) 관련 용어

 - 저장소: 정보들 저장(레퍼지토리)

 - 가져오기 임포트

 - 체크아웃: 저장소에서 파일 받아오는 것

 - 체크인: 저장소 파일 새로운 버전으로 갱신

 - 커밋: 충돌을 알리고 diff 도구를 이용해 수정한 후 갱신 완료

 - 동기화: 최신 버전으로 자신의 작업 공간 동기화

5) 소프트웨어 버전 등록 과정

 - 가져오기 -> 인출 -> 예치(커밋) -> 동기화(업데이트) -> 차이(Diff)

6) 제품 소프트웨어의 형상 관리 역할

 - 형상 관리를 통해 이전 리비전이나 버전에 대한 정보에 접근 가능하여 배포본 관리에 유용

 - 소스 수정 제한

 - 동일한 프로젝트에 대해 여러 개발자 동시 개발 가능

 

★버전 관리 도구

1) 공유 폴더 양식: 로컬 컴퓨터 공유 폴더에 저장. 변경사항 DB에 기록하며 관리 ex) SCCS, RCS, RVCS, QVCS

2) 클라이언트/서버 방식: 중앙 시스템에 저장 관리. ex) CVS, SVN

3) 분산 저장소 방식: 하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장되어 관리되는 방식 ex) Git, Bitkeeper

4) SVN:(Subversion) CVS를 개선한 것. 서버는 유닉스. 오픈소스로 무료 사용

 -> add, commit(서버 소스파일에 적용), update(클라이언트 소스파일에 적용), checkout, lock/unlock, import, export, info, diff, merge

5) Git★: 협업을 위해 버전을 공동 관리. 파일 변화를 스냅샷으로 저장 

 -> add, commit(로컬 저장소에 저장), branch, checkout(브랜치로 이동), merge, init(로컬 저장소 생성), remote add, push, fetch(변경 이력만을 로컬 저장소로 가져와 반영), clone, fork(원격 저장소로 복제)

 

★애플리케이션 테스트

- 결함을 찾아내는 일련의 행위 또는 절차, 확인, 검증

- 기본 원리

 > 결함이 존재함을 밝히는 것. 완벽한 테스팅 불가능. 갭라 초기 테스팅 시작.

 > 결함 집중(파레토 법칙 20%의 모듈에서 80%의 결함 발견).

 > 살충제 패러독스★(동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾아내지 못함)

 > 테스팅은 정황에 의존적, 오류-부재의 궤변

 

★애플리케이션 테스트의 분류

1) 실행 여부에 따른 테스트

- 정적 테스트: 소스코드를 대상을 분석(워크스루, 인스펙션, 코드 검사)

- 동적 테스트: 프로그램 실행

2) 테스트 기반에 따른 테스트

- 명세 기반 테스트: 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인

- 구조 기반 테스트: 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트

- 경험 기반 테스트: 경험 기반

3) 시각에 따른 테스트

 - 검증 테스트: 개발자의 시각

 - 확인 테스트: 사용자의 시각에서 생산된 제품의 결과 테스트 -> 인수 테스트(알파 테스트, 베타 테스트)

4) 목적에 따른 테스트

 - 회복 테스트, 안전 테스트, 강도 테스트, 성능 테스트, 구조 테스트, 회귀 테스트(새로운 결함 ㅇ벗음 확인), 병행 테스트(동일한 데이터 입력하여 결과 비교)

 

★화이트박스 테스트, 블랙박스 테스트

1) 화이트박스 테스트

- 모듈 안의 내용을 직접 볼 수 있음

- 내부의 논리적인 모든 경로를 테스트해 테스트 케이스를 설계

- 소스코드의 모든 문장을 한번 이상 수행함으로써 진행

-> 기초 경로 검사: 대표적인 화이트박스 테스트 기법

-> 제어 구조 검사: 조건 검사, 루프 검사, 데이터 흐름 검사(변수 정의와 변수 사용 위치에 초점)

2) 블랙박스

 - 모듈 안에서 어떤 일이 일어나는지 알 수 없음

 - 특정 기능 알기 위해 각 기능이 완전히 작동되는 것을 입증하는 테스트로 기능 테스트

 > 동치 분할 검사: 자료에 맞는 결과 출력 확인

 > 경계값 분석

 > 원인-효과 그래프 검사

 > 비교 검사(버전)

 > 오류 예측 검사(다른 블랙박스 테스트 기법으로 찾아낼 수 업슨ㄴ 오류를 찾아내는 일련의 보충적 검사 기법(데이터 확인 검사)

 

★개발 단계에 따른 애플리케이션 테스트

1) 단위 테스트: 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트(구조 기반 테스트)

2) 통합 테스트: 완료된 모듈들을 결합하여 하나의 시스템으로 완성시크는 과정에서의 테스트

3) 시스템 테스트: 컴퓨터 시스템에서 완벽하게 수행되는가를 점검하는 테스트

4) 인수 테스트★: 사용자의 요구사항을 충족하는지에 중점을 두는 테스트

 > 알파테스트: 통제된 환경에서 사용자가 개발자와 함께 테스트

 > 베타테스트: 통제되지 않은 환경에서 여러 명의 사용자가 행하는 테스트 기법

 

★통합 테스트

1) 상향식 통합 테스트

 - 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터 필요

 - 하위의 모듈들을 클러스터로 결합 -> 더미 모듈인 드라이버 작성 -> 클러스터 단위로 테스트 -> 상위로 이동해 결합 후 드라이버는 실제 모듈로 대체

2) 하향식 통합 테스트

 -> 깊이 우선 통합법, 넓이 우선 통합법 사용.

 - 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있음.

3) 혼합식 통합 테스트: 하위에서는 상향식, 상위 수준에서는 하향식 통합 사용

 

★테스트

1) 테스트케이스: 설계된 입력 값, 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서

2) 테스트 시나리오: 여러 개의 테스트 케이스들을 묶은 집합, 테스트 케이스들을 적용하는 구체적인 절차를 명세한 문서

 - 여러 개의 시나리오로 분리해 작성

 - 사용자의 요구사항과 같은 설계 문서 등을 토대로 작성

3) 테스트 오라클: 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입해 비교하는 활동

 - 제한된 검증: 모든 테스트 케이스에 적용할 수 없음

 - 수학적 기법: 값을 수학적 기법을 이용해 구할 수 있음

 - 자동화 기능: 프로그램 실행, 결과 비교, 커버리지 측정 등을 자동화할 수 있음

   > 참오라클: 모든 테스트 케이스의 입력값에 대해 기대하는 효과 제공

   > 샘플링 오라클: 특정 몇몇 테스트케이스의 입력값들에 대해서만 기대하는 결과 제공

   > 휴리스틱 오라클: 나머지 입력 값들에 대해서는 추정으로 처리

   > 일관성 검사 오라클: 수행 전과 후의 결과값이 동일한지 확인하는 오라클

4) 테스트 하네스

 - 테스트 드라이버: 하위 모듈 호출 수행 후 결과 도출

 - 테스트 스텁: 상위 모듈 대신

 - 테스트 슈트: 테스트 케이스 집합

 - 테스트 케이스: 입력 값, 실행 조건, 기대 결과 등으로 만들어진 테스트 항목 명세서

 - 테스트 스크립트: 자동화된 테스트 실행 절차에 대한 명세서

 - 목 오브젝트: 행위를 조건부로 입력해두면 예정된 행위를 수행하는 객체

 

★결함 관리

1) 결함 상태 추적

 - 결함 분포, 결함 추세(진행 시간에 따른 결함 수), 결함 에이징(지속되는 시간)

2) 결함 추적 순서

 - 결함 등록 -> 결함 검토 -> 결함 할당 -> 결함 수정 -> 결함 조치 보류 -> 결함 종료 -> 결함 해제

3) 결함 심각도, 우선순위

 - 결함 심각도: 치명적 > 주요 > 보통 > 경미 > 단순

 - 결함 우선순위: 치명적 > 높음 > 보통 > 낮음

 

★ 애플리케이션 성능 분석

1) 애플리케이션 성능

- 처리량: 애플리케이션이 처리하는 일의 양

- 응답 시간: 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간

- 경과 시간: 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸리는 시간

- 자원 사용률

2) 애플리케이션 성능 저하 원인 분석

- DB에 필요 이상의 많은 데이터를 요청한 경우

- 커넥션 풀의 크기를 너무 작거나 크게 설정한 경우

- JDBC, ODBC 같은 미들웨어를 사용한 후 종료하지 않아 연결 누수가 발생한 경우

- 대량의 파일을 업로드하거나 다운로드해 처리 시간이 길어진 경우

3) 소스 코드 최적화

 - 클린 코드 작성 원칙: 가독성, 단순성, 의존성 배제, 중복성 최소화, 추상화(가단의중추)

4) 소스코드 품질분석 도구의 종류

 - 정적 분석 도구: pmd, cppcheck, checkstyle,sonalQube, com, cobertuna

 - 동적 분석 도구: Avalanche, valgrind

 

★ 모듈 연계

1) EAI(Enterprise Application Integration)

 - 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션

  > 포인트 투 포인트: 점대점으로 연결

  > 허브 앤 스포크: 허브 시스템을 통해 데이터 전송하는 중앙 집중형 방식

  > 메시지 버스: 미들웨어를 두어 처리하는 방식

  > 하이브리드: 허브, 메시지 박스의 혼합방식

(포허메하)

2) ESB(Enterprise Service Bus)

 - 애플리케이션 간 연계, 데이터 변환, 웹 서비스 지원 등 표준 기반의 인터페이스를 제공하는 솔루션

 - 서비스 중심의 통합을 지향

 - 결합도를 약하게 유지

 - 관리 및 보안 유지가 쉽고, 높은 수준의 품질 지원이 가능

 

★인터페이스 구현, 보안

1) 데이터 통신을 이용한 인터페이스 구현

 - 데이터 포맷을 인터페이스 대상으로 전송하고 수신 측에서 파싱해 해석하는 방식

 - 주로 JSON이나 XML 형식의 데이터 포맷을 사용해 인터페이스 구현

  > JSON: 속성-값-쌍으로 이뤄진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷

  > XML: HTML문법이 각 웹 브라우저에서 상호호환적이지 못하다는 문제와 SGML의 복잡함을 해결 위해 개발

2) 인터페이스 엔터티를 이용한 인터페이스 구현

 - 시스템 사이 별도의 인터페이스 엔터티로 성호 연계하는 방식

 - 일반적으로 인터페이스 테이블을 엔터티로 활용

3) 인터페이스 보안 기능 적용: 네트워크, 애플리케이션, 데이터베이스 영역

 * 스니핑: 중간에서 남의 패킷 정보를 도청

 * 시큐어 코딩: 일련의 보안활동(입력 데이터 검증 표현, 보안 기능, 시간 및 상태, 에러 처리, 코드 오류, 캡슐화, API 오용)

 

★인터페이스 구현 검증, 오류 확인

1) 인터페이스 구현 검증 도구

 -xUnit: 다양한 언어를 지원하는 단위 테스트 프레임워크

 - STAF: 컴포넌트 재사용 등 다양한 환경 지원하는 테스트 프레임워크

 - FitNesse: 웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크

 - NTAF: STAF의 강점인 재사용 및 확장성과 FitNesse의 장점 협업 기능을 통합한 NHN의 테스트 자동화 프레임워크

 - Selenium: 다양한 브라우저 및 개발 언어 지원

 - watir: Ruby언어를 사용

2) 인터페이스 오류 발생 즉시 확인: 오류 메시지 알람, SMS발송, 이메일 발송

3) 인터페이스 오류 발생 주기적 확인: 오류 로그 확인, 오류 테이블 확인, 감시(APM) 도구 사용

 

★ 트리 순회

http://blog.naver.com/occidere

★ 이진 트리

> 차수가 2 이하인 노드로 구성

> 이진 트리, 편향 트리, 포화 이진트리, 완전이진트리

 

논리데이터 저장소

개체, 속성, 관계

 

물리데이터 저장소

단위 개체를 테이블로 변환 -> 속성을 컬럼으롭 ㅕㄴ환 -> UID를 기본키로 변환 -> 관계를 외래키로 변환 -> 컬럼 유형과 길이 정의 -> 반정규화 수행

 

인덱스

- 분포도 10~15% 이내

- 수정이 빈번하지 않는 컬럼

- ORDER BY, GROUP BY, UNION이 빈번한 컬럼

- 분포도가 좋은 컬럼은 단독 인덱스로 생성

- 인덱스들이 자주 조합되어 사용되는 컬럼은 결합 인덱스로 생성

- 지나치게 많은 인덱스는 오버헤드 발생

- 인덱스만의 추가적인 저장 공간이 필요

 

- 기본테이블로부터 유도된, 이름을 가지는 가상 테인블로 기본 테이블과 같은 형태의 구족 사용

- 가상 테이블이기 때문에 물리적으로 구현되어 있지 않지만 사용자에게 있는 것처럼 간주

- 논리적 독립성 제공 가능

- 정의된 뷰로 다른 뷰를 정의할 수 있음

- 다른 뷰도 자동을 삭제됨

   > REPLACE: 뷰가 이미 존재하는 경우 재생성

   > FORCE: 존재 여부 상관 없이 뷰 생성

   > NOFORCE: 존재할 때만 뷰 생성

   > WITH CHECK OPTION: 조건을 만족하는 행만 변경

   > WITH READ ONLY: 데이터 조작어 작업 불가

- 장점: 논리적 데이터 독립성 제공, 자동 보안 제공

- 단점: 독립적인 인덱스 가질 수 없음. 뷰의 정의를 ALTER로 변경할 수 없음. 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신, 연산에 제약

 

클러스터

- 인덱스의 단점 해결한 기법 -> 분포도가 넓을수록 유리

- 분포도가 넓은 '테이블'의 클러스터링은 저장 곤간의 절약이 가능

- 대량의 범위를 자주 액세스하는 경우 적용

 > 클러스터 테이블 선정

  - 수정이 빈번하지 않은 '테이블'

  - ORDER BY, GROUP BY, UNION이 빈번한 테이블

  - 처리 범위가 넓어 단일 테이블 클러스터링

  - 조인이 많아 문제 발생 시 다중 테이블 클러스터링

  - 조회 속도를 향상시켜주지만 입력, 수정, 삭제 시 성능이 저하됨

 

파티션

- 레인지 파티셔닝(범위분할): 지정한 열의 값을 기준을 분할

- 해시 파티셔닝(해시분할): 해시 함수에 따라 데이터 분할

- 리스트 파티셔닝: 정해진 그룹핑 기준에 따라 분할

- 컴포지트 파티셔닝(조합분할): 범위분할 이후 해시 함수 적용

-> 장점: 성능 향상, 가용성 향상, 백업 가능, 경합 감소

 

PL/SQL
선언부: 참조할 모든 변수, 상수, CURSOR, EXCEPTION 선언

실행부: BEGIN, END 사이에 기술되는 영역

예외부: 실행부에서 에러가 발생했을 때 문장 기술

장점: 컴파일 불필요, 모듈화 기능, 절차적 언어 사용, 에러 처리

객체 활용: 저장된 프로시저, 저장된 함수, 저장된 패키지, 트리거

 

단위 모듈 구현의 원리

- 정보 은닉, 분할과 정복, 데이터 추상화, 모듈 독립성(낮은 결합도와 높은 응집도)

 

알고리즘 설계 기법

- 분할과 정복(문제를 나누어 풀고 병합해 답 얻음),

- 동적 계획법(과거에 구한 해 활용),

- 탐욕법(그 순간 가장 좋은 거),

- 백트래킹(유망하지 않으면 부모노드로 돌아가 다른 자손 검색)

 

★시간 복잡도에 다른 알고리즘

O(1) 상수형 복잡도, 항상 일정 속도로 작동★ ex)해시함수

O(logN) 로그형 복잡도 ex)이진 탐색

O(n) 선형 복잡도 정비례 ex)순차 탐색

O(N logN) 선형 로그형 복잡도 ex)퀵정렬, 합병 정렬

O(N2) 제곱형 N의 크기가 작으면 log2N보다 느릴 수 있음. ex) 선택 정렬, 버블 정렬, 삽입 정렬

 

 

 

반응형

'정처기' 카테고리의 다른 글

정보처리기사 실기 정리  (0) 2021.07.07
정보시스템 구축 관리  (0) 2021.05.14
프로그래밍 언어 활용  (0) 2021.05.09
데이터베이스 구축  (0) 2021.05.07
소프트웨어 설계  (1) 2021.05.06