자격증/정보처리기사

[정보처리기사_실기] Chapter 10. 프로그래밍 언어 활용

ZZJJing 2020. 10. 11. 18:51

■ 비트 (Bit) : 컴퓨터를 이해하기 위한 기본적인 용어로  Binary Digit의 약자이다. 

 

■ 1Byte (바이트- 8bit) -> 킬로바이스 (KB) -> 메가바이트 (MB) -> 기가바이트(GB) -> 테라바이트(TB) -> 페타바이스(PB) -> 엑사베이트(EB)

 

■ 서식 문자열 

%d (정수형) / %u (부호없는 정수형10진수) / %c (문자) / %s (문자열) / %f (실수) / %e (지수) / %ld (long형 10진수) / %lo (long 형 8진수) / %lx (long형 16진수) / %p (주소를 16진수로 입출력하기위해 지정) 

 

■ 제어문자 

\n (new line - 한줄 넘기기) 

\b (backspace -커서를 왼쪽으로 한 칸 이동함)

\t (tab - 일정간격을 띄움) 

\r (carriage return - 커서를 현재 줄의 처음으로 이동)

\0 (null -널문자 출력) 

 

■ 컴퓨터 처리 프로세스 [ 인 해 실 기 ]

출 -> 석 -> 행 -> 록 

 

■ 자료구조 

컴퓨터에 데이터를 삽입,삭제, 수정하게 해주는 논리적인 공간구조를 의미 

(단순[int,double,float 등] / 선형[규, 스택] / 비선형[트리 등] / 파일 구조[순차파일, 색인파일]로 분류) 

 

■ 알고리즘 

넓은 의미 : 자료구조와 함께 프로그램을 구성하는 요소 

좁은 의미 : 어떤 문제의 해답을 찾는 규칙, 해법을 의미

 

■ 변수 : 특정 데이터를 저장하여 입/출력 연산에 활용하는 공간

 

■ 바인딩 : 데이터를 변수에 삽입하는 행위 또는 특정 변수의 데이터를 다른 변수로 이관하는 작업을 통칭 

- 정적 바인딩 : 프로그램 실행 전 속성을 연결하는 방식

- 동적 바인딩 : 프로그램 실행시간에 속성을 연결하는 방식

 

■ 선언 : 변수에 이름과 데이터 타입의 속성을 부여하는 것 

- 명시적 선언 : 직접 입력 

- 묵시적 선언 : 디폴트 규칙에 이해 속성 부여 

 

■ 데이터 타입 : 변수가 가질 수 있는 속성 값의 길이 및 성질 

* 불린형 Java : boolean / C: bool 

 

■ 연산자 우선순위 (높 -> 낮) 

단항 연산자 (! / ++ / -- / sizeof) -> 이항 연산자 -> 삼항 연산자 -> 대입 연산자 (=/ +=/ *= ..) -> 순서 연산자  

 

* 이항 연산자 (높 -> 낮) [ 산 시 관 비 논 ] 

술 연산자(* / + / -..) -> 프트 연산자 (>> / << ) -> 계 연산자 (== / != )-> 트 연산자 (& / | / ^) -> 논리 연산자 (&& / || )

 

■ 연산자 종류

- 단항 연산자

- 산술 연산자(+,-,/,*,%)

- 논리 연산자(true, false, ||, &&)

- 삼항 연산자

- 대입 연산자

- 관계(비교)연산자(>,<,<=,>=,==,!= : 항상 true, false를 반환)

- 비트 연산자 ( & , | ,~, ^)   : ^ 는 두값을 비교하여 서로 다르면 참, 같으면 거짓반환 != 이거랑 같다. 

 

 

■ 명령문 : 조건문(If, Switch) / 반복문 (for, while, do-while) 

→ 문제 풀이 따로 공부 

 

■ 추상화 종류 [ 기 자 제 ]

- 기능 추상화 : 입력자료를 출력자료로 변환하는 과정을 추상화 하는 방법 

- 자료 추상화 : 자료와 자료에 적용할 수 있는 오퍼레이션을 함께 정의하는 방법 

- 제어 추상화 : 외부 이벤트에 대한 반응을 추상화하는 방법 

 

■ 상속 -> 부모의 특성을 자식이 이어받아 재사용 또는 확장하는 특성을 의미 

- 단일 상속(상위 수준의 그룹이 하나만 존재할 때)  / 다중 상속이 있다. 

 

■ 프로그래밍 년도별 언어 

- 1960년 이전 : ASSEMBLY / FORTRAN / LISP 

- 1960년대 : COBOL / PL/I / BASIC 

- 1970년대 : PASCAL / C (1972년 개발, unix 운영체제에서 구현) / SMALLTALK /  PROLOG 

- 1980년대 : ADA / C++ / PYTHON / PROLOG? 

- 1990년대 : RUBY / JAVA / JAVASCRIPT / C# 

 

■ 프로그래밍 언어 유형 분류 

- 개발 편의성에 따른 분류 : 저급언어 / 고급언어 

- 실행하는 방식에 따른 분류 : 명령형 언어 / 함수형 언어 / 논리형 언어 / 객체 지향 언어 

- 구현 기법에 따른 분류 : 컴파일 언어 / 인터프리터 언어 / 혼합형 방식 

- 컴파일러(전체를 다 번역하고 돌림- FOTRAN, PASCAL, C, C++) 와 인터프리터 (한 줄 씩 번역 - BASIC, PROLOG, LISP, SNOBOL) 

 

 객체 지향언어 구성요소 [ 객 클 메 ]

체(데이터[속성] + 연산[메소드]) / 래스 / 시지 

* 객체  - 개체, 속성, 메소드로 구성된 클래스의 인스턴스를 의미 

 

■ 객체지향 특징 [ 캡 정 추 상 다 ]

슐화(Encapsulation)  / 보은닉(Information Hiding) / 상화(Abstraction) / 속성(Inheritance) / 형성(Polymorphism)

* 캡슐화 (Encapsulation) 

- 속성과 메서드를 하나로 묶어서 객체로 구성 

- 유지보수 용이 

- 재사용성이 높은 S/W 개발이 가능 

- 객체 간 인터페이스를 이용, 종속성을 최소화

 

* 추상화 : 현실 사실을 공통 속성, 공통 기능으로 정의하는 방식의 모델링 

* 상속성 : 부모 클래스 속성, 기능을 상속받아 재사용가능한 특성 

* 다형성 : 추상화 클래스의 속성, 기능을 상속받아 재정의 하거나 동명 메소드 선언 기능 특성 (객체들은 동일한 메소드명을 사용하여 같은 의미의 응답을 함) 

 

■객체지향 5원칙 [ S O L I D ]

SRP (Single Responsibility Principle) : 단일 책임의 원칙 

Open-Closed Principle (OCP) :  개방-폐쇄의 원칙 ▷ 변화는 확장 가능, 변경은 어려운 구조

Liskov Substitution Principle : 리스코프 치환 원칙 ▷ Is-a 관계, 자식 타입은 부모 타입이 사용되는 곳에 대체 가능

Interface Segregation Principle : 인터페이스 분리원칙 ▷ 자주 사용하는 메소드는 분리 구현 

Dependency Inversion Principle (DIP) : 의존 역전 원칙 ▷ 참조대상은 추상 클래스여야함

 

■ 오버로딩과 오버라이딩 

- 오버로딩 (Overloading) : 같은 이름의 함수인데, 파라미터가 다른 것 

- 오버라이딩 (Overriding) : 상속받은 함수를 재사용하는 것으로 함수명, 인자값, 반환값이 다 같아야한다.

 

■ 절차지향 / 객체 지향 

- 절차지향 프로그래밍 : 순차적 코드로 수행 / 자료구조와 명령 중심 

    ex) C (데니스리치가 개발/컴파일러 방식의 언어/이식성이 좋다.), ALGOL , COBOL , FORTRAN 

- 객체지향 프로그래밍 : 객체와 객체 간의 통신을 통한 프로그램 구현, 객체와 속성, 메소드로 구성됨 

    ex) Java , C++ , Smalltalk  

 

■ JAVA 접근제한자 

- private : 해당 클래스에서만 접근이 가능 

- public : 외부에서 사용 가능 

- protected : 동일 패키지 내에서만 접근가능 

 

 

■ 스크립트 언어

정의 : 하나의 응용 소프트웨어를 제어하기 위한 용도로 쓰이는 언어. 소스코드를 컴파일 하지 않고 실행할 수 있는 프로그래밍 언어이다

+ HTML 문서 안에 직접 프로그래밍 언어를 삽입하여 사용 

- 자바스크립트 : 넷스케이프의 브랜던 아이크가 개발 / 웹 페이지의 동적을 제어, 변수 선언이 필요없다. / 클라이언트용 스크립트 언어

- ASP (Active Server Page) : 서버측 동적 언어 / Windows 계열에서만 수행 가능 / 서버용 스크립트 언어

- JSP (Java Server Page) : 자바로 만들어진 서버용 스크립트 언어 / 다양한 운영체제 사용가능 

- PHP (Professional Hypertext Preprocessor) : 서버용 스크립트 언어 / C, Java등과 문법이 유사 

- Python 파이썬 : 객체 지향 기능을 지원하는 대화형 인터프리터 언어 / 플랫폼에 독립적, 문법이 간단 / 서버용 스크립트 언어

 

■ 선언형 언어 -> HTML / LISP /PROLOG / XML / Haskell

함수형 언어 - LISP(인공지능 분야언어, 자료구조가 연결 리스트 구조) , Haskell (부작용없음/ 코드 간결/ 에러발생 가능성 낮음)

논리형 언어 - PROLOG (논리학기초,/ 인공지능 분야에서 사용)

 

■ 라이브러리 

필요할 때 찾아서 사용할 수 있도록 모듈화되어 제공되는 프로그램을 말한다. 

- 구성 : 샘플코드, 도움말, 설치 파일 

- 표준 라이브러리 : 프로그래밍 언어가 기본적으로 가지고 있는 라이브러리를 의미 

- 외부 라이브러리 : 표준 라이브러리와 달리 별도로 파일을 설치하여야 한다. 

- 모듈과 패키지의 총칭이다. 

--> 모듈 (Module)  : 한개의 파일에서 기능을 제공  - 사용) import (모듈명)

--> 패키지 (Package) :  여러개의 모듈을 한 개의 폴더에 묶어서 기능 제공 - 사용) import (패키지).(모듈명) 

 

 

■ 응집도 (Cohension) [ 기 순 통 절 시 논 우 ]  높 → 낮  *높아야 좋다.

응집도는 모듈 내부의 구성 요소 간 관계의 밀접정도로 평가

- 기능적 응집도 (Functional Cohesion) : 모듈 내부의 모든 기능이 단일한 목적을 위해 수행 

- 순차적 응집도 (Sequential Cohesion) : 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용하는 경우

- 통신적 응집도 (Communication Cohesion) : 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우 

- 절차적 응집도 (Procedural Cohesion) : 모듈이 다수의 관련 기능을 가질 때, 모듈 안의 구성요소들이 그 기능을 순차적으로 수행하는 경우

- 시간적 응집도 (Temporal Cohesion) : 연관된 기능이라기보다는 특정 시간에 처리되어야하는 활동들을 한 모듈에서 처리하는 경우 

- 논리적 응집도 (Logical Cohesion) : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우 

- 우연적 응집도 (Coincidential Cohesion) : 모듈 내부의 각 구성 요소들이 연관이 없는 경우 

 

■ 결합도 (Coupling) [ 자 스 제 외 공 내 ]  낮→높  *낮아야 좋다. 

결합도는 모듈과 모듈 사이의 관련성이 어느 정도인가를 나타낸다. 

관련성이 적을 수록 모듈의 독립성이 높아 모듈 간 영향이 작아진다.

- 자료 결합도 (Data Coupling) : 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 상호작용이 일어남

- 스탬프 결합도 (Stamp Coupling) :모듈간의 인터페이스로 배열이나 오브젝트, 스트럭쳐등이 전달되는 경우 

- 제어 결합도(Control Coupling) : 단순 처리할 대상인 값만 전달하는 것이 아니라 어떻게 처리해야한다는 제어요소가 전달되는 경우 

- 외부 결합도 (External Coupling) : 모듈에서 외부로 선언한 데이터를 다른 모듈에서 참조하는 경우로 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 때 주로 발생 

- 공통 결합도 (Common Coupling) : 파라미터가 아닌 모듈 밖에 선언 되어 있는 전역변수를 참조하고 전역변수를 갱신하는 식으로 상호 작용하는 경우 

- 내용 결합도 (Content Coupling) : 다른 모듈 내부에 있는 변수나 기능을 또 다른 모듈에서 사용하는 경우