[정보처리기사 실기] 1장 요약 키워드 정리 _ 프로그래밍 언어 활용

딱지의겨울

·

2021. 4. 6. 13:58

 

1.2 변수

변수

값을 저장하기 위한 공간으로 변할 수 있는 값.

기억클래스

종류 기억영역 예약어 생존기간 사용범위
자동변수 메모리
(스택)
auto 일시적 지역적
레지스터변수 레지스터 register
정적변수(내부) 메모리
(데이터)
static 영구적
정적변수(외부) 전역적
외부변수 extern

자동 변수

- 함수나 블록 내에서 선언되어 실행하는 동안만 존재하며 벗어나면 자동 소멸.

- 초기화 하지 않으면 쓰레기값이 저장됨.

외부 변수

- 현재 파일이나 다른 파일에서 선언된 변수나 함수를 참조하기 위한 변수.

- 함수 밖에서 선언함.

- 함수가 종료된 후에도 값이 소멸되지 않음.

- 초기화 하지 않으면 자동으로 0으로 초기화됨.

- 다른 파일에서 선언된 변수를 참조할 경우 초기화 할 수 없음.

정적 변수

- 함수나 블록 내에 선언하면 내부 변수, 함수 밖에 선언하면 외부 변수.

- 함수가 종료된 뒤에 값이 소멸되지 않음.

- 초기화는 변수 선언시 한번만 할 수 있으며 초기화를 생략하면 자동으로 0으로 초기화됨.

레지스터 변수

- 메모리가 아닌 CPU의 레지스터에 할당받아 자주 사용하는 변수를 저장하여 처리 속도를 높이기 위해 사용함.

- 함수나 블록 밖에서는 자동으로 소멸.

- 레지스터의 사용 개수는 한정되어 있어 데이터를 저장할 레지스터가 없는 경우 자동 변수로 취급되어 메모리 할당됨.

- CPU에 저장되어 메모리 주소를 가질 수 없기 때문에 변수의 주소를 구하는 주소 연산자(&)를 사용할 수 없다.

1.4 연산자

비트 연산자

- &: 모든 비트가 1일때만 1

- | : 모든 비트 중 1이 하나라고 있으면 1

- ^ : 모든 비트가 같으면 1, 하나라도 다르면 0

- ~ : 각 비트의 부정

- >> : 비트를 오른쪽으로 이동

- <<: 비트를 왼쪽으로 이동

연산자 우선순위

종류 연산자 결합
단항 ! ~ ++ -- <
산술 * / % >
+ -
시프트 << >>
관계 < <= > >=
== !=
비트 &
^
|
논리 &&
||
조건 ? : >
대입 = += *= /= %= 등 <
순서 , >

1.11 Python의 기초

입력 함수: input()

- 변수1, 변수2, … = input(출력 문자).split(분리 문자)

- 캐스팅: 변수1, 변수2 = map(자료형, input().split())

 

출력 함수: print()

1) print(출력값1, 출력값2, sep = 분리문자, end = 종료문자)

- end 가 생략되면 기본 값은 줄 바꿈이다.

- sep이 생략되면 기본 값은 공백 한 칸이다.

2) print( ‘서식 문자열’ % (출력 값1, 출력 값2))

print(‘%8.2f’ % 200.20 )

 

Python의 문자열

- 하나의 문자를 표현 할 때 큰따옴표, 작은 따옴표 구분이 없음.

- 문자열 안에 작은 따옴표 존재 -> 큰 따옴표로 묶기

- 문자열 안에 큰 따옴표 존재 -> 작은 따옴표로 묶기

- 문자열 안에 큰따옴표, 작은 따옴표 존재 -> 3개의 작은 따옴표로 묶기

- 주요 메소드

upper(), lower()

capitalize(): 첫글자만 대문자, 나머지는 모두 소문자

title(): 단어의 첫글자만 대문자로

replace(값1, 값2): 값1을 찾아 값2로 바꿈

split(값): 값을 기준으로 분리하여 리스트 반환

count(값): 값을 찾아 개수 반환

find(값): 처음 검색되는 값의 위치 반환. 찾지 못한 경의 -1 반환.

index(값): 처음 검색되는 값의 위치 반환. 찾지 못하면 오류 발생.

- formatting: 문자열의 앞 따옴표 앞에 f를 적어주고, 문자열 내에 {변수}를 적어주는 방법.

name = ‘James’, num = 20 x = f“my name is {name} and I’m {num}.

 

리스트

- 다양한 자료형을 섞어서 저장할 수 있음.

- 형식: 리스트명 = [ 값1, 값2, … ] / list([값1, 값2, …])

- 삽입: 리스트명.append(값)

- 추가: 리스트명.insert(위치, 값)

- 삭제: (1) del a[3]: 해당 위치 삭제 (2) a.remove(‘mike’): 값 찾아서 삭제

- 주요 메소드

pop(위치): 리스트의 위치에 있는 값 출력하고 삭제.

index(값), count(값)

extend(리스트): 리스트 뒤에 새로운 리스트 추가.

reverse(): 역순으로 뒤집기

sort(): 오름차순으로 정렬, sort(reverse=True)는 역순

copy()

 

Range

- range(최종값): 0부터 최종값-1까지 연속된 숫자 생성

- range(초기값, 최종값): 초기값부터 최종값-1까지

- range(초기값, 최종값, 증가값): 초기값부터 최종값-1까지 증가값 만큼 증가하여 생성.

- a = list(range(9, 4, -1))

>> a = [‘9’, ‘8’, ‘7’, ‘6’, ‘5’] : 증가값이 음수면 최종값+1까지

 

Slice

- 문자열이나 리스트 같은 순차형 객체에서 일부를 잘라서 반환하는 기능

- 형식: 객체명[초기위치:최종위치:증가값]

- 생략 형식(객체명 = a)

a[:], a[::]: 모든 요소 반환

a[초기위치:]: 초기위치부터 마지막까지 반환

a[:최종위치]: 0번째 부터 최종위치-1까지

a[::증가값]: 0번째부터 마지막위치까지 증가값 만큼 증가면서 해당 위치 반환

 

1.12 Python의 활용

클래스

class 클래스명: 실행할 문장 def 메소드명(self, 인수): return

- 객체 선언 방식: 변수명 = 클래스명()

1.13 라이브러리

라이브러리의 개념

- 프로그램을 효율적으로 개발할 수 있도록 자주 사용하는 함수나 데이터를 미리 만들어 놓은 집합체

- 표준 라이브러리: 프로그래밍 언어에 기본적으로 포함되어있는 라이브러리로 모듈이나 페키지 형태.

- 외부 라이브러리: 개발자들이 필요한 기능들을 만들어 공유해 놓은 것.

C언어의 표준 라이브러리

- stdio.h: 데이터의 입출력(printf, scanf, fopen, fclose,,)

- stdlib.h: 자료형 변환, 난수 변환, 메모리 할당 (malloc, rand, atoi, … )

- math.h: 수학 함수 (pow)

- string.h: 문자열 처리 (strlen, strcpy, … )

- time.h: 시간 처리

Java의 표준 라이브러리

- import 문을 선언하여 이용

- java.lang: import 없이도 사용 가능 / String, System, Process, Runtime, Math 등

- java.util: 날짜 처리, 난수 발생, 복잡한 문자열 처리 / Date, Calendar, Random, StringTokenizer

- java.io: 파일 입출력과 관련된 기능 및 프로토콜 / InputStream, OutputStream, Reader, …

- java.net: 네트워크 관련 / Socket, URL, InetAddress, …

- java.awt: 사용자 인터페이스 / Frame. Panel, Dialog, Button, …

Python의 표준 라이브러리

- import 라이브러리 / 라이브러리.메소드()로 사용

- 내장 함수: 기본 인터페이스 / abs(), slice(), pow(), print()

- os: 운영체제와 상호 작용하기 위한 기능 / getcwd(), chdir(), system()

- re: 고급 문자열 처리 /findall(), sub()

- math: 복잡한 수학 연산 / cos(), log()

- random: 무작위 선택 / choice(), sample, random()

- statistics: 통계값 산출 / mean(), variance()

- datetime: 날짜와 시간 조작 / today(), date()

1.14 절차적 프로그래밍 언어

절차적 프로그래밍 언어

- 일련의 처리 절차를 정해진 문법에 따라 순서대로 기술해 나가는 언어.

- 프로그램이 실행되는 절차를 중요시함.

- 데이터를 중심으로 프로시저를 구현하며 프로그램 전체가 유기적으로 연결되어 있음,

- 자연어와 가까운 단어와 문장으로 구성됨.

- 과학 계산이나 하드웨어 제어에 주로 사용

장점

- 컴퓨터 처리 구조와 유사하여 실행 속도가 빠름.

- 같은 코드를 복사하지 않고 다른 위치에서 호출하여 사용 가능.

- 모듈 구성이 용이하여 구조적 프로그래밍이 가능.

단점

- 프로그램을 분석하기 어렵고, 유지 보수나 코드의 수정이 어려움.

절차적 프로그래밍 언어의 종류

- C언어

1972년 미국 벨 연구소의 데니스 리치 개발

시스템 소프트웨어를 개발하기 편리하여 시스템 프로그래밍 언어로 널리 사용됨.

자료의 주소를 조작할 수 있는 포인터 제공.

고급 프로그래밍 언어와 저급 프로그래밍 언어의 특징을 모두 갖춤.

UNIX 의 일부가 C언어로 구현되어있음.

컴파일러 방식의 언어

이식성이 좋아 컴퓨터 기종과 관계없이 작성 가능.

- ALGOL

수치계산이나 논리 연산을 위한 과학 기술 계산용 언어

PASCAL과 C언어의 모체.

- COBOL

사무처리용 언어.

영어 문장 형식으로 되어 이해와 사용이 쉬움

4개 의 Division으로 구성: Identification, Environment, Data, Procedure

- FORTRAN

과학기술 계산용 언어

수학과 공학분야의 공식이나 수식과 같은 형태로 프로그래밍 가능.

1.15 객체지향 프로그래밍 언어

객체지향 프로그래밍 언어

- 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체로 만들어, 기계적인 부품들을 조립하여 제품을 만들듯이 소프트웨어를 개발할 때도 객체들을 조립해서 프로그램을 작성할 수 있도록 한 프로그래밍 기법.

- 프로시저 보다는 명령과 데이터로 구성된 객체를 중심으로 하는 프로그래밍 기법. 한 프로그램을 다른 프로그램에서 이용할 수 있도록 한다.

장점

- 상속을 통한 재사용과 시스템의 확장이 용이함.

- 코드의 재활용성이 높음.

- 자연적 모델링에 의해 분석과 설계를 쉽고 효율적으로 할 수 있음.

- 사용자와 개발자 사이의 이해를 쉽게 해줌.

- 대형 프로그램의 작성이 용이.

- 소프트웨어 개발 및 유지 보수가 용이

단점

- 프로그래밍 구현을 지원해주는 정형화된 분석 및 설계 방법이 없음.

- 구현 시 처리 시간이 지연됨.

객체지향 프로그래밍 언어의 종류

- JAVA

분산 네트워크 환경에 적용이 용이하며 멀티 스레드 기능을 제공하므로 여러 작업을 동시에 처리할 수 있음.

운영체제 및 하드웨어에 독립적

캡슐화가 가능하고 재사용성이 높음.

- C++

C언어에 객체 지향 개념을 적용.

모든 문제를 객체로 모델링 하여 표현함.

-Smalltalk

1세대 객체 지향 프로그래밍 언어 중 하나로 순수한 객체 지향 프로그래밍 언어.

최초로 GUI를 제공한 언어

구성 요소

- 객체(Object)

데이터(속성)와 이를 처리하기 위한 연산(메소드)를 결합시킨 실체.

데이터 구조와 그 위에서 수행되는 연산들을 가지고 있는 소프트웨어 모듈

속성(Attribute): 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의하는 것. 성질, 분류, 식별, 수량 또는 현재 상태 등을 표현.

메소드(Method): 객체가 메시지를 받아 실행해야 할 때 구체적인 연산을 정의하는 것. 객체의 상태를 참조하거나 변경하는 수단이 됨.

- 클래스(Class)

두개 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현하는 요소.

공통된 특성과 행위를 갖는 객체의 집합.

객체의 유형 또는 타입을 의미

- 메시지(Message)

객체들간에 상호작용을 하는데 사용되는 수단으로 객체의 메소드를 일으키는 외부의 요구 사항.

메시지를 받은 객체는 대응하는 연산을 수행하여 예상된 결과를 반환하게 됨.

객체지향 프로그래밍 언어의 특징

- 캡슐화(Encapsulation)

데이터(속성)와 데이터를 처리하는 함수하나로 묶는 것을 의미.

캡슐화된 객체의 세부 내용이 외부에 은폐되어 변경이 발생할 때 오류의 파급 효과가 적다.

캡슐화된 객체들은 재사용이 용이하다. 유지 보수가 용이.

- 정보 은닉(Information Hiding)

캡슐화에서 중요한 개념으로 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것.

- 추상화(Abstraction)

불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것. 즉, 모델화 하는 것.

데이터의 공통된 성질을 추출하여 슈퍼 클래스를 선정하는 개념.

과정 추상화: 자세한 수행과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법.

데이터 추상화: 데이터의 세부적인 속성이나 용도를 정의하지 않고 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법.

제어 추상화: 이벤트 발생의 정학한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법.

- 상속성(Inheritance)

이미 정의된 상위 클래스(부모 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것.

상속성을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 사용이 가능.

단일 상속: 하나의 상위 클래스를 상속.

다중 상속: 여러개의 상위클래스 상속

- 다형성(Polymorphism)

메시지에 위해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력.

객체들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다

1.16 스크립트 언어

스크립트 언어

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

- 기계어로는 컴파일 되지 않고 별도의 번역기가 소스를 분석하여 동작하는 언어.

- 게시판 입력, 상품 검색, 회원 가입 등과 같은 데이터베이스 처리 작업을 수행하기 위해 주로 사용함.

- 서버용 스크립트 언어

서버에서 해석되어 실행 된 후 결과만 클라이언트로 보내는 언어

ASP, JSP, PHP, 파이썬

- 클라이언트용 스크립트 언어

클라이언트의 웹 브라우저에서 해석되어 실행되는 언어

자바스크립트

장점

- 컴파일 없이 바로 실행되므로 결과를 바로 확인할 수 있다.

- 배우고 코딩하기 쉽다. / 개발 시간이 짧다

- 소스코드를 쉽고 빠르게 수정할 수 있다.

단점

- 코드를 읽고 해석해야 하므로 실행 속도가 느리다.

- 런타임 오류가 많이 발생한다.

스크립트 언어의 종류

- 자바 스크립트

넷스케이프의 브렌던 아이크가 개발한 클라이언트용 스크립트 언어.

웹 페이지의 동작을 제어하며 변수 선언이 필요 없다.

서버에서 데이터를 전송할 때 아이디, 비밀번호, 수량 등의 입력사항을 확인하기 위한 용도로 많이 사용된다.

- ASP(Active Server Page)

서버 측에서 동적으로 수행되는 페이지를 만들기 위한 언어로 MS사에서 제작함.

윈도우 계열에서만 수행 가능한 언어.

- JSP(Java Server Page)

JAVA로 만들어진 서버용 스크립트 언어

다양한 운영체제에서 사용 가능.

- PHP(Professional Hypertext Preprocessor)

서버용 스크립트 언어

리눅스, 유닉스, 윈도우 운영체제에서 사용가능.

C, Java 등과 문법이 유사하므로 배우기 쉬워 웹 페이지 제작에 많이 사용됨.

- 파이썬

객체지향 기능을 지원하는 대화형 인터프리터 언어(원시 프로그램을 줄 단위로 번역하여 바로 실행해주는 언어)

플랫폼에 독립적이고 문법이 간단.

 

 

1.17 선언형 언어

선언형 언어

- 명령형 언어: 문제를 해결하기 위한 방법을 기술하는 언어. 알고리즘은 명시하고 목표를 명시하지 않음.

- 선언형 언어: 프로그램이 수행해야 할 문제를 기술하는 언어. 알고리즘은 명시하지 않고 목표를 명시한다.

- 목표를 명시하고 알고리즘은 명시하지 않음(대표적인 예: HTML)

- 함수형 언어

수학적 함수를 조합하여 문제를 해결하는 언어. 알려진 값을 함수에 적용하는 것을 기반으로 함.

적용형 언어라고도 함.

재귀 호출이 자주 이용됨

병렬처리에 유리

종류: LISP

- 논리형 언어

논리학에 기반을 둔 언어. 논리 문장을 이용하여 프로그램을 표현하고 계산을 수행함.

선언적 언어라고도 함.

반복문이나 선택문을 사용하지 않음

비절차형 언어

종류: PROLOG

장,단점

- 가독성과 재사용성이 좋음.

- 작동 순서를 구체적으로 작성하지 않기 때문에 오류가 적음.

- 프로그램 동작을 변경하지 않고도 관련 값을 대체할 수 있음.

선언형 언어의 종류

- HTML

인터넷의 표준 문서인 하이퍼텍스트 문서를 만들기 위해 사용하는 언어.

특별한 데이터 타입이 없는 단순한 텍스트므로 호환성이 좋고 사용이 편리.

- LISP

인공지능 분야에 사용되는 언어.

기본 자료 구조가 연결리스트 구조이며 재귀 호출을 많이 사용한다. (함수형 언어)

- PROLOG

논리학을 기초로 한 고급 언어.

인공지능 분야에서 논리적인 추론이나 리스트 처리 등에 주로 사용

- XML

기존의 HTML의 단점을 보완하여 웹에서 구조화된 폭넓고 다양한 문서들을 상호 교환할 수 있도록 설계한 언어. HTML에 사용자가 새로운 태그를 정의할 수 있으며 문서의 내용과 이를 표기하는 방식이 독립적.

- Haskell

함수형 프로그래밍 언어로 부작용이 없음.

코드가 간결하고 에러 발생 가능성이 낮다.