[정보처리기사 필기] 2022 기사패스 정보처리기사 기출문제 상세풀이 800제 : 1 ~ 50 오답정리

1. 패턴

  • GoF의 디자인 패턴
    • 소프트웨어 설계에 있어 공통된 문제들에 대한 표준적인 해법과 작명법을 제안한 책
    • Gang of Four 전문가 서술 : 에리히 감마, 리처드 헬름, 랄프 존슨, 존 블리시데스
  • 패턴의 개념 : 각기 다른 소프트웨어 모듈이나 기능을 가진 다양한 응용 소프트웨어 시스템을 개발할 때 서로 간에 공통되는 설계 문제 및 해결 점
  • 패턴의 역할 : 공통의 언어 생성, 팀원 사이의 의사소통 원활화
  • 패턴의 종류
    • 생성 패턴 (Creation Pattern)
      • 객체의 생성 방식을 결정하는 패턴
      • 클래스 : Factory method
      • 객체 : Singleton, Abstract factory, Builder, Prototype
    • 구조 패턴 (Structural Pattern)
      • 객체를 조직화하는데 유용한 패턴
      • 클래스 : Adapter
      • 객체 : Bridge, Composite, Decorator, Facade, Fly weight, Proxy
    • 행위 패턴 (Behavioral Pattern)
      • 객체의 행위를 조직, 관리, 연합하는데 사용하는 패턴
      • 클래스 : Template method, Interpreter
      • 의미 : Iterator, Command, Chain of Responsibility, State, Strategy, Mediator, Memento, Visitor, Observer
    • 클래스 패턴 : 클래스 간의 관계가 상속을 통하여 정의, 컴파일 시점에 정적으로 결정
    • 객체 패턴 : 객체 간의 관계를 다룸, 보통 구성을 통해 정의, 실행 중에 관계가 생성되어 더 동적이고 유연

 

2. 객체지향 프로그램

  • OOP (Object Oriented Programming)
  • 컴퓨터 프로그래밍 패러다임 중 하나
  • 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 객체들의 모임으로 파악하고자 하는 것
  • 각각의 객체는 메시지를 주고 받고 데이터를 처리할 수 있음
  • 객체지향의 장점
    • 프로그램을 유연하고 변경이 용이하게 만듦
    • 대규모 소프트웨어 개발에 많이 사용
    • 프로그래밍을 더 배우기 쉽게하고 소프트웨어 개발과 보수를 간편하게 함
    • 직관적인 분석이 가능
  • 객체지향 프로그램 (OOP)의 구성

  • 객체지향의 기법
    • 메서드 (Method)
      • 객체가 수행하는 기능
      • 객체가 갖는 데이터 (속성, 상태)를 처리하는 알고리즘
    • 객체 (Object)
      • 클래스의 인스턴스, 자신 고유의 데이터를 가짐
        • 인스턴스 : 실제 메모리상에 할당된 것
      • 클래스에서 정의한 행위를 수행
    • 클래스 (Class)
      • 공통된 특성과 연산을 갖는 객체의 집합, 같은 종류의 집단에 속하는 속성과 행위를 정의한 것
      • 객체지향 프로그램의 기본적인 사용자 정의 데이터형
      • 데이터를 추상화하는 단위
    • 메시지 (Message)
      • 객체들 간 상호작용을 하는데 사용되는 수단
      • 객체에게 행위 지시를 하는 명령으로 객체간의 통신을 말함
  • 객체지향의 특징
    • 캡슐화 (Encapsulation)
      • 속성과 메서드를 하나로 묶어서 객체로 구성
      • Readability 향상 (유지보수 용이)
      • 재사용성이 높은 S/W 개발이 가능
      • 객체 간 인터페이스 이용, 종속성 최소화
    • 추상화 (Abstraction)
      • 공통 성질 추출, 슈퍼클래스로 구성
      • 객체 중심의 안정된 모델 구축
      • 현실 세계를 자연스럽게 표현
      • 분석의 초점이 명확해짐
    • 다형성 (Polymorphism)
      • 동일한 이름의 여러 오퍼레이션 (메서드)을 다른 사양으로 정의 가능
      • 오버 로딩 : 매개변수의 수 또는 타입을 달리하여 구분
      • 오버 라이딩 : 부모 클래스의 메서드를 재정의
    • 정보은닉 (Information Hiding)
      • 캡슐화된 항목을 다른 객체로부터 숨김
      • 메시지 전달에 의해 다른 클래스 내의 메서드가 호출
    • 상속성 (Inheritance)
      • 부모 클래스의 속성과 메서드를 상속받아 사용
      • 부모 클래스, 자식 클래스 간의 관계가 슈퍼 클래스와 서브 클래스로 유지
      • 부모 클래스는 추상적, 자식 클래스는 구체적

3. UML 클래스 사이의 관계

  • 일반화 관계 Generalization (IS-A)
    • 객체지향 개념에서 상속관계
    • UML에서는 일반화 관계로 모델링
    • 한 클래스가 다른 클래스를 포함하는 상위 개념
    • 상위와 하위 관계를 의미하며 하위는 상위의 공통점을 상속
    • 클래스를 상속받아 자식 클래스에서 사용
    • 표기법 : 속이 빈 화살표
    • 코드 : B Class는 A Class를 속성과 행위를 상속 받음

      Class A { }
      Class B extends A { }
  • 연관관계 Association (HAS-A)
    • 클래스들이 상호 메시지를 주고 받는 관계를 표현
    • 한 클래스가 다른 클래스와 영속적인 여니관성을 맺을 때 사용
    • 표기법 : 실선, 실선 화살표
    • 코드 : Class Circle는 내부에 Class Point를 생성하여 행위 호출
      //양방향
      public Class Point {
      	private Circle[] circleOBJ;
      }
      public Class Circle {
      	private Point[] pointOBJ;
      }
      
      //단방향
      public Class Poin { }
      public Class Circle {
      	private Point[] pointOBJ;
      }
  • 의존 관계 Dependency (use)
    • 연관관계의 특수한 형태로 한 클래스가 다른 클래스에 의존적인 연관관계를 나타낼 때 사용
    • 표기법 : 점선 화살표
    • 코드 : Class A는 Class VO에 의존 관계, 만일 Class VO의 속성이 바뀌면 Class A 역시 행위의 수정이 필요
      public Class VO {
      	int age;
      	String name;
      	public void setAge(int Age) { this.age = Age; }
      	public void setName(String Name) { this.name = Name }
      }
      
      public Class A {
      	VO valueOBj = new VO();
      	public void test() {
      		valueObj.setAge(6);
      		valueObj.setName("test");
      	}
      }
  • 집합연관 (집약관계) Aggregation
    • 연관 관계의 특수한 형태
    • 클래스들 사이의 전체와 부분의 관계를 나타냄
    • 전체 객체의 라이프 타임과 부분 객체의 라이프 타임은 독립적
    • 전체 객체가 사라져도 부분 객체는 계속 생존할 수 있음
    • 표기법 : 속이 빈 마름모
    • 코드 : Class A는 Class B를 Vector 형태로 많이 소유할 수 있음

      public Class A {
      Private Vector <B> vectorB;
      }
      Class B {}
  • 복합연관 (합성관계) Composition
    • 연관 관계의 특수한 형태
    • 클래스들 사이의 전체와 부분의 관계를 나타냄
    • 전체 객체의 라이프 타임과 부분 객체의 라이프 타임이 동일
    • 전체 객체가 사라지면 부분 객체도 없어짐
    • 표기법 : 속이 찬 마름모
    • 코드

      public Class A {
      Private Vector <B> vectorB;
      vectorB.close();
      return;
      }
      Class B {}
  • 실체화 관계 Realization (implement)
    • 하나의 클래스가 다른 클래스를 구체적으로 실체화하는 관계
    • 인터페이스 클래스를 다른 클래스가 구현해주는 관계가 좋은 관계
    • 표기법 : 빈 삼각형 + 점선
    • 코드
      Public Class interface A { }
      Public Class B implements A { }

4. 객체지향 분석 방법

  • 객체지향 분석 방법의 개념
    • 사용자의 요구사항을 분석하여 요구되는 사항과 관련된 모든 객체, 클래스와 연관된 속성, 연산, 관계 등을 정의하여 모델링하는 작업
    • 분석가에게 중요한 클래스, 객체, 속성, 연산 등을 표현해서 문제를 모형화할 수 있게 해줌
    • 모형화 전후 단계에서 객체의 분류, 속성들의 상속, 메시지의 통신, 연산 등을 결합한 것
  • 객체지향 분석의 목적 : 클래스 식별
  • 객체지향 분석 방법론의 유형
    • 럼바우 방법
      • 가장 일반적으로 사용되는 방법
      • 분석 호라동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법
      • 모든 소프트웨어 구성 요소를 그래픽 표기법을 활용하여 모델링하는 기법
      • 시스템개발의 전 단계가 추상화, 캡슐화, 상속화 등 일관된 객체지향개념이 적용되는 방법
      • 럼바우 방법의 순서 : 객체 모델링 → 동적 모델링 → 기능 모델링
        • 객체 모델링 (Object Modeling)
          • 정보 모델링
          • 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계 규정
          • 그래픽 다이어그램으로 표시하는 모델링
          • 실세계 문제 영역으로부터 객체와 클래스를 추출해 그들 간의 관계를 연관화, 집단화, 일반화 중심으로 규명
          • 클래스의 속성과 연산을 함께 표현함으로써 시스템의 정적 구조 생성
        • 동적 모델링 (Dynamic Modeling)
          • 상태 다이어그램을 사용하여 시스템의 행위를 기술하는 모델링
        • 기능 모델링 (Function Modeling)
          • 자료흐름도 (DFD)를 이용
          • 다수의 프로세스들 간의 자료 흐름을 중심으로 처리과정 표현
          • 어떤 데이터를 입력하면 어떤 결과를 구할 것인지 표현
    • 부치 방법
      • 요구사항 분석을 하는 과정에서 절차지향 프로그램으로 개발하려면 동사를 식별하고, 객체지향 프로그램으로 개발하려면 명사를 선택하라고 한 것에 기반
      • 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 포함하여 사용
      • 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산 정의
      • 클래스와 객체의 의미를 식별, 클래스와 객체들의 관계를 식별, 클래스와 객체를 구현
      • 각 작업에 대한 다이어그램, 클래스 계층 정의, 클래스들의 클러스터링 작업 수행
      • Use Case를 강조하여 사용하는 분석 방법
    • Coad와 Yourdon 방법
      • E-R 다이어그램을 사용하여 객체의 행위 모델링
      • 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성
    • 워프스-브록 방법
      • 분석과 설계 간의 구분이 없음
      • 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행

 

7. 자료사전 사용 기호

  • = : 자료의 정의 - A는 ~로 구성되어 있다
  • + : 자료의 연결 - A와 B를 연결
  • ( ) : 자료의 생략 - 없어도 되는 자료
  • [ | ] : 자료의 선택 - A이거나 B
  • { } : 자료의 반복
  • ** : 자료의 설명

 

9. CASE

  • 계획 수립부터 요구분석, 설계, 개발, 유지보수에 이르는 소프트웨어 생명주기 전 과정을 자동화할 수 있도록 지원하는 자동화 도구
  • 등장 배경
    • 소프트웨어 산업 측면 : 소프트웨어 위기 극복 방안
    • 정보시스템 관리 측면 : 요구사항의 관리 효과 극대화, 재사용성 및 생산성 확대를 위해 등장
  • CASE 도구의 분류
    • Upper CASE : 계획 수립, 요구분석, 기본 설계 단계를 지원 -> 다이어그램으로 표현
    • Middle CASE : 상세설계 작업을 지원, 화면출력 등의 작성 지원
    • Lower CASE :시험, 유지보수 작업 지원, 소스코드와 시스템 명세서 획득
    • I-CASE: 위의 세가지 통합, Rational ROSE, COOL 등이 국내에서 사용 중
  • CASE 도구의 구성

    • 다이어그래밍 도구 : 소프트웨어 명세서 정의, 설계 결과의 표현
    • 설계 분석기 : 설계 명세서의 정확성, 일치성, 모호성에 대한 검사
    • 코드 생성기 : 명세서로부터 프로그래밍 언어로 된 모듈의 코드 생성
    • 정보저장소 (Repository) : CASE 도구의 중심, 소프트웨어 개발 생명주기 (SDLC) 동안 정보 저장
    • 프로젝트 관리 지원 도구 : 범위 관리, 일정 관리, 예산 관리, 의사 소통, 계획 관리, 공정 관리, 자원 관리 등 프로젝트 관리 활동을 편리하게 할 수 있게 함 (REDMINE, GANTT, OpenProj 등)
    • 재공학 도구 : 기존시스템의 설계 명세서 작성 지원
    • 프로토타이핑 도구 : 초기 UI 작성 지원

 

14. 럼바우의 객체 지향 분석 절차

  • 객체 모델링 (Object Modeling)
    • 정보 모델링
    • 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계 규정
    • 그래픽 다이어그램으로 표시하는 모델링
    • 실세계 문제 영역으로부터 객체와 클래스를 추출해 그들 간의 관계를 연관화, 집단화, 일반화 중심으로 규명
    • 클래스의 속성과 연산을 함께 표현함으로써 시스템의 정적 구조 생성
  • 동적 모델링 (Dynamic Modeling)
    • 상태 다이어그램을 사용하여 시스템의 행위를 기술하는 모델링
  • 기능 모델링 (Function Modeling)
    • 자료흐름도 (DFD)를 이용
    • 다수의 프로세스들 간의 자료 흐름을 중심으로 처리과정 표현
    • 어떤 데이터를 입력하면 어떤 결과를 구할 것인지 표현

 

15. 데이터 흐름도 (DFD)

  • DFD의 구성
    • 처리 (process) : 입력된 자료를 출력으로 변환하는 것, 프로세스, 원 안에 처리 명칭 기술
    • 자료 흐름 (data flow) : 발생지, 종착지, 처리 및 저장소 사이에서 자료의 흐름을 나타냄, 화살표 위에 자료의 명칭 기술
    • 자료 저장소 (data store) : 시스템 상의 자료의 저장소를 나타냄, 평행선 안에 자료 저장소 명칭 기술
    • 단말기 (terminator) : 시스템에 필요한 자료가 입력되는 발생지와 시스템에서 처리된 자료가 출력되는 종착지 또는 외부에 존재하는 사람이나 조직을 나타냄, 사각형 안에 발생지나 종착지 명칭 기술
  • DFD 작성 지침
    • 자료 흐름은 처리를 거쳐 변환 될 때마다 새로운 이름 부여
    • 어떤 처리가 출력자료를 산출하기 위해서는 반드시 입력 자료가 발생
    • 상위 단계의 처리와 하위 자료 흐름도의 자료 흐름은 서로 일치

 

18. 요구사항 분석

  • 요구사항 분석의 개념
    • 소프트웨어 개발의 실제적인 첫 단계
    • 개발 대상에 대한 사용자의 요구사항을 이해하고 문서화하는 활동
  • 요구사항 분석 시 고려사항
    • 사용자 요구를 정확하게 추출하여 목표를 정하고 어떤 방식으로 해결할 것인지 결정
    • 사용자 요구사항을 정확하고 일관성 있게 분석하여 문서화
    • 소프트웨어 분석가에 의해 요구사항 분석 수행
  • 요구사항 분석의 수행
    • 문제인식 : 사용자 면담, 설문 조사 및 협조, 각종 문서 검토 등을 통해 요구사항 수집
    • 평가와 종합 : 추출된 요구사항에 대한 정보 평가, 여러 가지 해결책 종합
    • 모델 제작 : 평가와 종합을 바탕으로 자료와 제어의 흐름, 기능 처리, 동작 행위, 정보 내용 등을 이해하기 쉽도록 모델로 작성
    • 문서화와 검토 : 소프트웨어의 기능, 성능, 제약 조건 등에 대하여 명세화, 검토
  • 요구사항 명세서
    • 요구사항 분석 단계에서 분석된 여러 결과를 바탕으로 소프트웨어의 기능, 제약 조건, 성능, 참조 자료 등을 기술한 것
    • 요구사항 분석서
    • 설계 명세서 작성은 설계 단계에서 수행

 

22. 트리 용어

  • 루트 노드 (root node) : 부모가 없는 노드, 트리는 하나의 루트 노드만을 가짐
  • 단말 노드 (leaf node) : 자식이 없는 노드
  • 내부 노드 (internal node) : 루트나 단말 노드가 아닌 노드
  • 링크 (link) : 노드를 연결하는 선, edge, branch
  • 형제 (sibling) : 같은 부모를 가지는 도느
  • 노드의 크기 (size) : 자신을 포함한 모든 자손 노드의 개수
  • 노드의 깊이 (depth) : 루트에서 어떤 노드에 도달하기 위해 거쳐야 하는 간선의 수
  • 노드의 레벨 (level) : 트리의 특정 깊이를 가지는 노드의 집합
  • 노드의 차수 (degree) : 부(하위) 트리 개수 혹은 간선의 수 (각 노드가 가진 가지의 수)
  • 트리의 차수 (degree of tree) : 트리의 최대 차수
  • 트리의 높이 (height) : 루트 노드에서 가장 깊숙히 있는 노드의 깊이

 

25. McCall의 품질인자 - 소프트웨어 품질 측정을 위해 개발자 관점에서 고려해야 할 사항

  • 제품 개선 (Produict Revision)
    • 유지보수성 (Maintainability) : 운영 중인 프로그램 내의 에러를 수정하는데 드는 노력
    • 유연성 (Flexibility) : 운영 중인 프로그램을 변경하는데 드는 노력
    • 테스트 용이성 (Testability) : 프로그램이 의도하는 기능을 수행하는지를 확인하기 위하여 테스트를 하는데 드는 노력
  • 제품 운영 (Product Operations)
    • 정확성 (Correctness) : 프로그램이 설계 사양을 만족시키며 사용자가 원하는대로 수행되고 있는 정도
    • 신뢰성 (Reliability) : 프로그램이 항시 정확하게 동작하고 있는 정도
    • 효율성 (Efficiency) : 프로그램의 기능을 수행할 때 요구되는 소요 자원의 양
    • 무결성 (Integrity) : 허가되지 않은 사람의 소프트웨어나 데이터에의 접근을 통제할 수 있는 정도
    • 유용성 (Usability) : 사용이 용이한 정도
  • 제품 전이 (Product Transition)
    • 이식성 (Portability) : 하나의 운영 환경에서 다른 환경으로 소프틍뤠어를 옮기는데 드는 노력
    • 재사용성 (Re-usability) : 다른 애플리케이션에서 재사용할 수 있는 정도
    • 상호운용성 (Inter-operability) : 타 시스템과 인터페이스가 가능한 정도

 

26. 정보 통신과 관련된 중요 법칙

  • Brooks의 법칙
    • 프로젝트 중 새로운 인력을 투입할 경우 작업 적응기간과 부작용으로 인해 일정이 더 지연되는 현상
    • S.W Project 일정이 지연된다고 해서 Project 말기에 새로운 인원을 추가 투입하면 Project는 더욱 지연되게 된다는 법칙
  • 무어의 법칙
    • 마이크로 칩의 처리 능력은 18개월마다 2배로 늘어난다는 법칙
  • 암달의 법칙
    • 프로그램은 병렬 처리가 가능한 부분과 불가능한 순차적인 부분으로 구성되므로 프로세서를 아무리 병렬화 시켜도 더 이상 성능이 향상되지 않는 성능 향상의 한계가 존재한다는 법칙
  • 길더의 법칙 
    • 조지 길더의 말에서 유래된 정보통신 법칙
    • 광섬유의 대역폭은 12개월 마다 3배씩 증가한다는 법칙
  • 멧갈프의 법칙
    • 하나의 네트워크의 유용성 또는 효용성은 그 네트워크 사용자의 제곱에 비례한다는 법칙
  • 구스타프슨의 법칙
    • 대용량 데이터 처리는 효과적으로 병렬화할 수 있다는 법칙
    • 병렬화로 얻을 수 있는 프로그램의 성능 향상은 프로그램의 순차적인 부분에 의해 제한된다는 암달의 법칙에 대한 반대 개념
  • 리드의 법칙
    • 컴퓨터 네트워크가 사회적 네트워크와 결합 될 때 그 네트워크의 가치는 N의 제곱(멧칼프 법칙)으로 증가하는 것이 아니라 2의  N제곱으로 증가한다는 법칙
    • 집단형성 네트워크 (GFN) 라고도 함
  • 눈덩이 효과
    • 눈 덮인 산꼭대기에서 눈 뭉치 하나를 굴려 내렸을 때 산 밑에 도달한 눈덩이는 엄청난 크기가 되어 있는 현상
    • 소프트웨어 개발 초기 체계적인 분석 및 설계가 수행되지 않을 경우 그 결과가 프로젝트 후반에서는 비용이 상당한 영향으로 온다는 법칙

 

27. DRM의 기술 요소

  • 암호화 (Encryption)
    • 컨텐츠 및 라이선스 암호화
    • 전자 서명
    • PKI, Symmetric / Asymmetric Encryption, Digital Signature
  • 키 관리 (Key Management)
    • 컨텐츠를 암호화한 키에 대한 저장 및 배포 기술
    • Centralized, Enveloping
  • 암호화 파일 생성 (Packager)
    • 컨텐츠를 암호화된 컨텐츠로 생성하기 위한 기술
    • Pre-packaging, On-thefly Packaging
  • 식별 기술 (Idendification)
    • 컨텐츠에 대한 식별 체계 표현 기술
    • DOI, URI
  • 저작권 표현 (Right Expression)
    • 라이선스의 내용 표현 기술
    • XrML/MPEG - 21 REL, ODRL
  • 정책 관리 (Policy management)
    • 라이선스의 발급 및 사용에 대한 정책 표현 및 관리 기술
    • XML, Contents Management System
  • 크랙 방지 (Tamper Resistance)
    • 크랙에 의한 컨텐츠 사용 방지 기술
    • Code Obfuscation, Kernel Debugger Detection, Module Certification
    • Secure DB, Secure Time Management, Encryption
  • 인증 (Authentication)
    • 라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술

 

28. 네트워크 영역에 적용되는 보안 프로그램

* 보안을 위한 기술에는 S라는 약어가 들어감

  • IPsec
    • 통신 세션의 각 IP패킷을 암호화하고 인증하는 안전한 인터넷 프로토콜 통신을 위한 인터넷 프로토콜 스위트
    • 통신 세션의 개별 IP 패킷을 인증하고 암호화함
  • SSL (전송 계층 보안)
    • 컴퓨터 네트워크에 통신 보안을 제공하기 위해 설계된 암호 규약
    • 인터넷 같이 TCP / IP 네트워크를 사용하는 통신에 적용
    • 통신 과정에서 전송 계층 종단간 보안과 데이터 무결성 확보
    • 3.0 버전부터 TLS로 표준화
  • S-HTTP
    • 웹 상에서 네트워크 트래픽을 암호화하는 주요 방법 중 하나

 

29. 인터페이스 구현 검증 도구

  • xUnit : Java (Junit), C++ (Cppuinit), .Net (Nunit) 등 다양한 언어를 지원하는 단위 테스트 프레임 워크
  • STAF : 서비스 호출, 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임 워크
  • FitNesse : 웹 기반 테스트 케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임 워크
  • NTAF : Naver 테스트 자동화 프레임 워크 (STAF와 FitNesse 통합)
  • Selenium : 다양한 브라우저 지원 및 개발 언어를 지원하는 웹 애플리케이션 테스트 프레임 워크
  • watir : Ruby 기반 웹 애플리케이션 테스트 프레임 워크

 

32. 화이트 박스 테스트

  • 소스 코드 내부를 보면서 제어 구조, 루프 등을 확인하는 테스트 기법
  • 개발자 관점 테스트
  • 화이트 박스 테스트의 종류 : 기본 경로 테스팅, 구조 검사, 루프 검사, 제어 흐름 테스트, 데이터 흐름 검사

 

34. 트리 순회 방식

* 루트 노드를 중심으로 왼쪽, 오른쪽을 구분한 후 단계별로 구분

  • 전위 순회 (Pre -Order) : (Root), Left, Right
  • 중위 순회 (In -Order) : Left, (Root), Right
  • 후위 순회 (Post-Order) : Left, Right, (Root)

 

35. 알고리즘 시간 복잡도 - 빅 오 표기법

  • O(1) : 상수형, 입력 데이터의 수에 관계 없이 일정한 실행 시간을 갖는 알고리즘
  • O(log n) : 로그형, 입력 데이터 n일 경우 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듬
  • O(n) : 선형, 입력 자료의 크기가 n 일 경우 n*(log2n)번 만큼의 수행 시간을 갖는 알고리즘
  • O(n*logn) : 선형 로그형. 입력 자료의 크기가 n일 경우 n*(log2n)번만큼의 수행시간을 갖는 알고리즘 
  • O(n²) : 2차형, 입력 자료의 크기가 n 일 경우 n ² 번만큼의 수행 시간을 갖는 알고리즘
  • O(n⁵) : 3차형, 입력 자료의 크키가 n 일 경우 n ⁵ 번만큼의 수행 시간을 갖는 알고리즘
  • O(2n) : 지수형 , 입력 자료의 크키가 n 일 경우 2n 번만큼의 수행 시간을 갖는 알고리즘
  • O(n!) : 팩토리얼형, , 입력 자료의 크키가 n 일 경우 n*(n-1)*(n-2)....*1(n!) 번만큼의 수행 시간을 갖는 알고리즘

 

36. 알고리즘의 복잡도 측정

  • 행렬 곱셈 : O(n^3)
  • 버블 정렬 : O(n^2)
  • 삽입 정렬 : O(n^2)
  • 퀵 정렬 : O(n log n)
  • 합병 정렬 : O(n log n)
  • 순차 탐색 : O(n)
  • 이진 탐색 : O(log n)
  • 해시 테이블 : O(1)

 

37. ISO/IEC 9126의 품질 모델

  • 사용 품질 : 효과성, 생산성, 안정성, 만족도
  • 내부/외부 품질
    • 기능성 : 적절성, 정확성, 상호운용성, 보안성, 준수성
    • 신뢰성 : 성숙성, 결합수용성, 복구용이성, 준수성
    • 사용성 : 이해용이성, 학습성, 운영성, 기호성, 준수성
    • 효율성 : 시간 효율성, 자원 활용성, 준수성
    • 유지보수성 : 분석성, 변경성, 안정성, 시험성, 준수성
    • 이식성 : 환경 적응성, 설치 용이성, 치환성, 상호공존성, 준수성

 

39. 소스코드 품질 분석 도구

  • 정적 분석 도구
    • pmd
      • 자바 및 타 언어 소스코드에 대한 버그, 데드 코드 분석
      • Eclipse에 임베드 되어 사용
      • 지원 환경 : Linux, Windows
      • 개발 도구 지원 : Eclipse, NetBeans
    • cppcheck
      • C / C++ 코드에 대한 메모리 누수, 오버플로우 등 문제 분석
      • 배열 범위 체크, 클래스 체크, 메모리 누수 체크, null pointer 체크 등 발생 가능한 결함에 대한 오류 검출 
      • 지원 환경  : Windows
      • 개발 도구 지원 : Eclipse, gedit, Visual Studio
    • SonarQube
      • 소스 코드 품질 통합 플랫폼, 플러그인 확장 가능
      • 지원환경 : Cross-Platform
      • 개발도구 지원 : Eclipse
    • checkstyle
      • 자바 코드에 대한 코딩 표준 준수 검사 도구
      • Sun Check RuleSet 제공
      • 지원환경 : Cross-Platform
      • 개발도구 지원 : Ant, Eclipse, NetBeans
    • CodeSonar
      • Microsoft C# assembly 파일과 디버깅 정보 (.pdb 파일) 기반으로 분석을 수행 -> 이에 상응하는 소스 코드 (.cs 파일)을 통해 검출된 결과 출력
      • 지원환경 : Windows
      • 개발도구 지원 : Wisual Studio
    • Splint
      • C코드를 분석하여 오류를 검출하는 도구
      • 지원환경 : Cross-Platform
      • 개발도구 지원 : Eclipse, Visual Studio
  • 코드 복잡도
    • ccm
      • 다양한 언어의 코드 복잡도 분석 도구
      • Linux, Mac 환경 CLI형태 지원
        • 지원환경 : Cross-Platform
        • 개발도구 지원 : Visual Studio
    • cobertura
      • Jcoverage 기반의 테스트 커버리지 측정 도구 
      • 지원환경 : Cross-Platform
      • 개발도구 지원 : Ant, Maven
    • McCabelQ
      • 컴포넌트의 McCabe복잡도 계산
      • 지원환경 : Cross-Platform
      • 개발도구 지원 : Eclipse, Visual Studio
  • 동적 분석 도구
    • Avalanche
      • Valgrind 프레임 워크 및 STP 기반 소프트웨어 에러 및 취약점 동적 분석 도구
      • 지원환경 : Linux, Android
    • Valgrind
      • 자동화된 메모리 및 쓰레드 결함 발견 분석 도구
      • 메모리 관리에 관련된 오류 검출 및 Cache, Heap, Multi, Tread의 프로파일링을 지원하는 오픈 소스 도구
      • 지원환경 : Cross-Platform
      • 개발도구 지원 : Eclipse, NetBeans

 

41. SQL 종류

  • 데이터 질의어 (DQL) : 데이터 
    • 검색 : SELECT
  • 데이터 조작어 (DML) : 데이터
    • 수정 : UPDATE
    • 삭제 : DELETE
    • 추가 : INSERT
  • 데이터 정의어 (DDL) : 테이블
    • 데이터베이스 객체를 생성하고 수정, 삭제하는 명령어
      • 생성 : CREATE
      • 변경 : ALTER
      • 객체 삭제 : DROP
      • 객체 내용 삭제 : TRUNCATE
      • 참조 테이블 삭제 옵션 : CASCADE
    • 데이터베이스의 스키마를 정의, 스키마에 대한 명세는 시스템 카탈로그에 저장
  • 데이터 제어어 (DCL)
    • 규정이나 기법을 정의하고 제어하는 언어
    • 사용자 권한 부여/취소
      • GRANT : 권한 부여
      • REVOKE : 권한 회수
    • 트랜잭션 제어 (TCL)
      • COMMIT : 완료한 작업을 데이터베이스에 영구적으로 반영
      • ROLLBACK : 작업 시작 이전의 상태로 되돌림
      • SVAEPOINT : 저장점 지정, ROLLBACK과 함께 사용 시 특정 지점까지 ROLLBACK

 

44. 정규화의 유형

비정규 릴레이션
↓ 도메인이 원자 값
1NF
  부분적 함수 종속 제거
2NF
  이행적 함수 종속 제거
3NF
  결정자이면서 후보키가 아닌 것 제거
BCNF
  다치 종속 제거
4NF
  조인 종속성 이용
5NF

 

  • 비정규 릴레이션
  • 제1정규형(1NF) : 릴레이션 R의 모든 속성 값이 원자값을 가지는 릴레이션
  • 제2정규형(2NF) : 릴레이션 R이 제 1정규형이고 기본키가 아닌 속성이 기본 키에 완전 함수 종속일 때
  • 제3정규형(3NF) : 릴레이션 R이 제 2 정규형이고 기본키가 아닌 속성이 기본키에 비이행적 non-transitive로 종속할 때 (직접 종속)
  • 보이스/코드 정규형(BCNF) : 릴레이션 R에서 함수 종속성 X -> Y 가 성립할 때 모든 결정자 X가 후보키일 때
  • 제4정규형(4NF) : 릴레이션 R에서 MVD A -> B가 존재할 때 R의 모든 애트리뷰트 들이 A에 함수 종속 (FD)이면 R은 4NF (즉, R의 모든 애트리뷰트 X에 대해 A-> X이고 A가 후보키)
  • 제5정규형(5NF) : 릴레이션 R에 존재하는 모든 조인 종속이 R의 후보키를 통해 성립되면, R은 5NF

 

49. 데이터베이스 설계 과정

데이터 모델 종속적 특정 DBMS 독립적 요구사항 분석
개념적 설계
논리적 설계
특정 DBMS 종속적 물리적 설계
데이터 베이스 구축
  • 요구사항 분석
    • 요구사항 수집 : 기존 문서 조사, 인터뷰, 설문조사 등을 사용하여 DB에 저장할 대상, 제약 조건, 데이터 처리 등에 대한 요구사항 수집
    • 요구사항 분석 : 개체와 속성, 개체 간 관계 파악, 데이터 처리 시 사용되는 주요 연산들, 연산 시접근하는데이터 양등을 분석
  • 개념적 설계
    • 한 조직체에서 사용되는 정보 모델 구축, 높은 추상화 수준의 데이터 모델 사용, E-R 모델이 대표적
    • 개체 타입, 관계 타입, 속성들을 식별, 속성들의 도메인 결정, 후보키와 기본 키 결정
    • 개념적 스키마는 ER 다이어그램으로 표현
  • 논리적 설계
    • 선택한 DBMS의 데이터 모델을 사용하여 논리적 스키마 생성
      • 개념적 스키마를 논리적 스키마로 변환
      • ER 모델로 표현된 개념적 스키마를 관계 데이터 베이스 스키마로 변환
    • 스키마 정제 (정규화) : 더 좋은 관계 데이터 베이스 스키마로 변환하기 위해서 정규화 과정 적용
  • 물리적 설계
    • 데이터 처리 요구사항들을 만족시키기 위해 저장 구조와 접근 경로 등을 결정
    • 성능상의 주요 기준 : 응답 시간, 트랜잭션 처리율, 보고서 생성 소요 시간
  • 데이터 베이스 구축
    • 데이터베이스 설계 결과물을 토대로 SQL의 DDL로 데이터베이스 객체들을 생성
    • 데이터베이스 설계 도구를 이용할 경우 자동으로 특정 DBMS에 맞는 데이터베이스를 구축할 수 있음
  • 데이터 이행
    • 데이터베이스로 저장할 신규 데이터를 수집하고 도메인에 맞도록 데이터를 변환하고 데이터베이스 테이블로 적재하는 과정
    • 기존 데이터베이스에 저장된 데이터를 전환할 경우 데이터 전환 과정을 수행

 

50. E-R 모델

  • 개념적 데이터 모델의 가장 대표적인 것
  • 1970년 피터 첸에 의해 개발
  • 개체 타입과 이들 간의 관계 타입을 이용하여 현실 세계를 개념적으로 표현하는 방법
  • E-R 다이어그램의 기호
    • 사각형 : 개체 타입
    • 마름모 : 관계 타입
    • 타원 : 속성
    • 밑줄 타원 : 기본 키 속성
    • 복수 타원 : 복합 속성
    • 관계 : 개체 관계( 1:1, 1:N, N:M 등)에 대한 대응 수를 선위에 기술
    • 선 링크 : 개체 타입과 속성 연