본문 바로가기
자격증/정보처리기사

[정보처리 실무] 1장 프로그래밍 언어 활용

by 윤사부 2021. 2. 11.
728x90

001 데이터 타입(Data Type)

◈ 데이터 타입의 개요

  - 변수에 저장될 데이터의 형식을 나타내는 것

  - 변수에 값을 저장하기 전에 어떤 형식의 값을 저장할지 데이터 타입을 지정하여 변수를 선언

  - 데이터 타입의 유형

   ① 정수 타입(Integer Type)

   * 소수점이 없는 숫자를 저장

   ② 부동 소수점 타입(Floating Point Type)

   * 소수점 이하가 있는 실수를 저장

   ③ 문자 타입(Character Type)

   * 한 문자를 저장

   * 작은따옴표(' ')안에 표시

   ④ 문자열 타입(Chracter String Type)

   * 문자열을 저장

   * 큰따옴표(" ")안에 표시

   ⑤ 불린 타입(Boolean Type)

   * 조건의 참(True), 거짓(False) 여부를 판단하여 저장

   * 기본값은 거짓(False)

   ⑥ 배열 타입(Array Type)

   * 같은 타입의 데이터 집합을 만들어 저장

   * 데이터는 중괄호({ }) 안에 콤마(,)로 구분하여 값들을 나열

 

002 변수

◈ 변수의 개요

  - 컴퓨터가 명령을 처리하는 도중 발생하는 값을 저장하기 위한 공간

  - 변할 수 있는 값

  - 변수는 저장하는 값에 따라 정수형, 실수형, 문자형, 포인터형 등으로 구분

 

◈ 기억 클래스

  - 변수 선언 시 메모리 내에 변수의 값을 저장하기 위한 기억영역이 할당되는데 할당되는 기억영역에 따라 사용 범위에 제한이 있음

  - 기억영역을 결정하는 작업

  - C언어에서 제공하는 기억 클래스의 종류

   * 자동 변수(Automatic Variable) : 함수나 코드의 범위를 한정하는 블록 내에서 선언되는 변수

   * 외부 변수(External Variable) : 현재 파일이나 다른 파일에서 선언된 변수나 함수를 참조하기 위한 변수

   * 정적 변수(Static Variable) : 함수나 블록 내에서 선언하는 내부 정적 변수와 함수 외부에서 선언하는 외부 적정 변수가 있음

   * 레지스터 변수(Register Variable) : 메모리가 아닌 CPU 내부의 레지스터에 기억영역을 할당받는 변수

 

003 데이터 입출력

◈ scanf() 함수

  - C언어의 표준 입력 함수

  - 키보드로 입력받아 변수에 저장하는 함수

  - 표기 형식

scanf(서식 문자열, 변수의 주소)

 

◈ printf() 함수

  - C언어의 표준 출력 함수

  - 인수로 주어진 값을 화면에 출력하는 함수

  - 표기 형식

printf(서식 문자열, 변수)

 

◈ Java에서의 표준 입력

  - Java에서 키보드로 입력받아 변수에 저장하려면 먼저 Scanner 클래스를 이용해 키보드로부터 값을 입력받는 객체 변수를 생성한 후 이를 사용

  - 표기 형식

Scannner scan01 = new Scanner(System.in);

inNum = scan0.nextInt();

 

◈ Java에서의 표준 출력

  - Java에서 값을 화면에 출력할 때는 printf() 메소드를 이용

  - 표기 형식

System.out.printf(서식 문자열, 변수)

 

004 연산자

◈ 연산자 종류

  - 산술 연산자 : +, -, *, /, %,++, --

  - 관계 연산자 : ==, !=, >, >=, <, <=

  - 논리 연산자 : !, &&, ||

  - 비트 연산자 : &, ^, |, ~, <<, >>

  - 대입 연산자 : +=, -=, *=, /=, %=, <<=, >>=

  - 조건 연산자 : 조건 ? 수식1 : 수식 ;

  - 기타 연산자 : sizeof, 콤마, (자료형)

 

◈ 연산자 우선순위(높음에서 낮음순서)

   ① 단항 연산자

   ② 이항 연산자(산술 연산자 → 시프트 연산자 → 관계 연산자 → 비트 연산자 → 논리 연산자)

   ③ 삼항 연산자

   ④ 대입 연산자

   ⑤ 순서 연산자

 

005 제어문

 if / else if / else

  - 조건에 따라서 실행할 문장을 달리하는 제어문

  - 조건이 참일 때만 실행할 문장을 지정할 수도 있고 참과 거짓에 대해 각각 다른 실행문을 지정할 수도 있음

 switch / case / break / default

  - 조건에 따라 분기할 곳이 여러 곳인 경우 간단하게 처리 할 수 있는 제어문

  - case문의 레이블에는 한 개의 상수만 지정할 수 있으며 int, char, enum형의 상수만 가능

  - case문의 레이블에는 변수를 지정할 수 없음

  - break문은 생략이 가능하지만 break문이 생략되면 수식과 레이블이 일치할 때 실행할 문장부터 break문 또는 switch문이 종료될 때까지 모든 문장이 실행


006 반복문

 for문

  - 초기값, 최종값, 증가값을 지정하는 수식을 이용해 정해진 횟수를 반복하는 제어문

  - 초기값을 정한 다음 최종값에 대한 조건이 참이면 실행할 문장을 실행한 후 초기값을 증가값 만큼 증가시키면서 최종값에 대한 조건이 참인 동안 실행할 문장을 반복 수행

  - 표기 형식

for(식1; 식2; 식3)

   * 초기값, 최종값, 증가값 중 하나 이상을 생략할 수 있고 각각의 요소에 여러 개의 수식을 지정할 수도 있음

   * for문은 처음부터 최종값에 대한 조건식을 만족하지 못하면 한 번도 수행하지 않음

 while문

  - 조건이 참인 동안 실행할 문장을 반복 수행하는 제어문

  - while문은 조건이 참인동안 실행할 문장을 반복 수행하다가 조건이 거짓이면 while문을 끝낸 후 다음 코드를 실행

  - while문은 조건이 처음부터 거짓이면 한 번도 수행하지 않음

  - 표기 형식

while(조건)

     실행할 문장;

 do while문

  - 조건이 참인 동안 정해진 문장을 반복 수행하다가 조건이 거짓이면 반복문을 벗어나는 while문과 같은 동작을 함

  - 다른 점은 do~while문은 실행할 문장을 무조건 한 번 실행한 다음 조건을 판단하여 탈출 여부를 결정

  - do~while문은 실행할 문장을 우선 실행한 후 조건을 판별하여 조건이 참이면 실행할 문장을 계속 반복 수행하고 거짓이면 do~while문을 끝낸 후 다음 코드를 실행

  - 표기 형식

do

     실행할 문장;

while(조건);

 break, continue

  - switch문이나 반복문의 실행을 제어하기 위해 사용되는 예약어

  - break : switch문이나 반복문 안에서 break가 나오면 블록을 벗어남

  - continue : 이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 이동

 

007 배열과 문자열

배열의 개념

  - 동일한 데이터 유형을 여러 개 사용해야 할 경우 이를 손쉽게 처리하기 위해 여러 개의 변수들을 조합해서 하나의 이름으로 정의해서 사용하는 것

  - 배열은 변수명 뒤에 대괄호([ ])를 붙이고 그 안에 사용할 개수를 지정

  - 배열의 위치는 0부터 시작

  - 배열의 위치를 나타내는 첨자 없이 배열 이름을 사용하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같음

  - 배열의 종류

 

 1차원 배열

   * 변수들을 일직선상의 개념으로 조합한 배열

   * 표기 형식

자료형 변수명[개수];

 

 2차원 배열

   * 변수들을 평면(행과 열)으로 조합한 배열

   * 표기 형식

자료형 변수명[행개수][열개수]

 

배열 형태의 문자열 변수

  - 큰따옴표(" ")로 묶인 글자는 글자 수에 관계없이 문자열로 처리

  - 문자열을 저장하는 자료형이 없기 때문에 배열 또는 포인터를 이용하여 처리

  - 형식

char 배열이름[크기] = "문자열"

  - 배열에 문자열을 저장할 때는 배열 선언 시 초기값으로 지정해야 함

  - 이미 선언된 배열에는 문자열을 저장할 수 없음

  - 문자열 끝에 자동으로 널 문자('\0')가 삽입되므로 널 문자까지 고려하여 배열 크기를 지정

 

Java에서의 배열 처리

  - 향상된 for문을 사용할 수 있는데 향상된 for문은 객체를 대상으로만 가능

  - 배열을 객체로 취급하며 배열을 이용하여 작업할 때 필요할 만한 내용은 이미 API로 만들어 두었기 때문에 잘 골라서 사용

 

 Java의 문자열

  - 문자열을 처리할 수 있도록 클래스를 제공하므로 그에 따른 속성과 메소드도 지원

 

008 포인터

◈ 포인터와 포인터 변수

  - 포인터는 변수의 주소를 말하며 C언어에서는 주소를 제어할 수 있는 기능을 제공

  - C언어에서 변수의 주소를 저장할 때 사용하는 변수를 포인터 변수라고 함

  - 포인터 변수를 선언할 때는 자료의 형을 먼저 쓰고 변수명 앞에 간접 연산자 *를 붙임(int *a;)

  - 포인터 변수에 주소를 저장하기 위해 변수의 주소를 알아낼 때는 변수 앞에 번지 연산자 &를 붙임(a = &b;)

  - 실행문에서 포인터 변수에 간접 연산자 *를 붙이면 해당 포인터 변수가 가리키는 곳의 값을 말함(c = *a;)

 

◈ 포인터와 배열

  - 배열을 포인터 변수에 저장한 후 포인터를 이용해 배열의 요소에 접근할 수 있음

  - 배열 위치를 나타내는 첨자를 생략하고 배열의 대표명만 지정하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같음


009 사용자 정의 함수

◈ 사용자 정의 함수 개요

  - 사용자가 필요한 기능을 취향대로 만들어 사용할 수 있는 함수

  - 사용자 정의 함수를 이용하면 프로그램 구조가 간단해지고 이해하기가 쉬워짐

  - 동일한 코드를 반복 입력하는 수고를 줄일 수 있음

 

◈ 재귀함수

  - 자기가 자기를 호출하는 순환 프로그램

  - 순환하는 만큼 반복하여 실행하면서 변수에 저장된 값을 추적하면 결과를 이해하기 쉬움


010 Java의 클래스와 메소드

◈ 개요

  - 클래스는 객체 생성을 위한 필드(속성)와 메소드(함수)를 정의하는 설계도

  - Java는 아무리 작은 프로그램이라도 클래스를 만들어서 사용해야 함


011 Python의 기초

◈ input() 함수

  - Python의 표준 입력 함수

  - 키보드로 입력 받아 변수에 저장하는 함수

  - 입력되는 값은 문자열로 취급되어 저장

  - 표기 형식

변수 = input(출력문자)

 

◈ print() 함수

  - Python의 표준 출력 함수

  - 값을 화면에 출력하는 함수

  - 표기 형식

print(출력값1, 출력값2)

 

◈ 리스트(List)

  - C와 Java에서는 여러 요소들을 한 개의 이름으로 처리할 때 배열을 사용하지만 Python에서는 리스트를 사용

 

◈ Range

  - 연속된 숫자를 생성하는 것으로 리스트, 반복문 등에서 많이 사용

 

◈ 슬라이스(Slice)

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

  - 일부 인수를 생략하여 사용할 수 있음

 

012 Python의 활용

◈ 코드 읽기

 

013 라이브러리

◈ 라이브러리의 개요

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

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

  - 외부 라이브러리 : 개발자들이 필요한 기능들을 만들어 인터넷 등에 공유해 놓은 것으로 외부 라이브러리를 다운받아 설치한 후 사용

 

◈ C언어의 대표적인 표준 라이브러리

 1) stdio.h

  - 데이터의 입출력에 사용되는 기능들을 제공

  - 주요 함수 : printf, scanf, fprintf, fscanf, fclose, fopen 등

 2) math.h

  - 수학 함수들을 제공

  - 주요 함수 : sqrt, pow, abs 등

 3) string.h

  - 문자열 처리에 사용되는 기능들을 제공

  - 주요 함수 : strlen, strcpy, strcmp 등

 4) stdlib.h

  - 자료형 변환, 난수 발생, 메모리 할당에 사용되는 기능들을 제공

  - atoi, atof, srand, rand, malloc, free 등

 5) time.h

  - 시간 처리에 사용되는 기능들을 제공

  - 주요 함수 : time, clock 등

 

Java언어의 대표적인 표준 라이브러리

 1) java.lang

  - java에 기본적으로 필요한 인터페이스, 자료형, 예외 처리 등을 관련된 기능 제공

  - import문 없이도 사용 가능

  - 주요 클래스 : String, System, Process, Runtime, Math, Error 등

 2) java.util

  - 날짜 처리, 난수 발생, 복잡한 문자열 처리 등에 관련된 기능 제공

  - 주요 클래스 : Data, Calender, Random, StringTokenizer 등

 3) java.io

  - 파일 입출력과 관련된 기능 및 프로토콜을 제공

  - 주요 클래스 : InputStream, OutputStream, Reader, Writer 등

 4) java.net

  - 네트워크와 관련된 기능을 제공

  - 주요 클래스 : Socket, URL, InetAddress 등

 5) java.awt

  - 사용자 인터페이스(UI)와 관련된 기능을 제공

  - 주요 클래스 : Frame, Panel, Dialog, Button, Checkbox 등

 

014 절차적 프로그래밍 언어

◈ 개요

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

 

 종류

 1) C

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

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

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

  - 고급 프로그래밍 언어이면서 저급 프로그램 언어의 특징을 모두 갖추고 있음

  - UNIX의 일부가 C언어로 구현

  - 컴파일러 방식

  - 이식성이 좋아 컴퓨터 기종에 관계없이 프로그램을 작성할 수 있음

 2) ALGOL

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

  - PASCAL과 C언어의 모체

 3) COBOL

  - 사무 처리용 언어

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

  - 4개의 DIVISION으로 구성

 4) FORTRAN

  - 과학 기술 계산용 언어

  - 수학과 공학 분야의 공식이나 수식과 같은 형태로 프로그래밍 할 수 있음

 

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

 개요

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

 

 종류

 1) Java

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

  - 운영체제 및 하드웨어에 독립적이며 이식성이 강함

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

 2) C++

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

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

 3) Smalltalk

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

  - 최초로 GUI를 제공한 언어

 

 구성요소

 1) 객체(Object)

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

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

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

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

 2) 클래스(Class)

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

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

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

  - 데이터를 추상화하는 단위

 3) 메시지(Message)

  - 객체들 간에 상호작용을 하는데 사용되는 수단으로 객체의 메소드(동작, 연산)를 일으키는 외부의 요구 사항

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

 

◈ 특징

 1) 캡슐화(Encapsulation

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

  - 캡슐화된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어 변경이 발생할 때 오류의 파급 효과가 적음

  - 캡슐화된 객체들은 재사용이 용이

 2) 정보 은닉(Information Hiding)

  - 캡슐화에서 가장 중요한 개념

  - 다른 객체에게 자신의 정보를 숨기고 자신만 연산을 통하여 접근을 허용

 3) 추상화(Abstraction)

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

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

 4) 상속성(Inheritance)

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

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

 5) 다형성(Polymorphism)

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

  - 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 함

 

016 스크립트 언어

◈ 스크립트 언어의 개요

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

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

 

◈ 스크립트 언어의 분류

  - 서버용 스크립트 언어

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

   * 종류 : ASP, JSP, PHP, 파이썬(Python), 펄(Perl), 루비(Ruby) 등

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

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

   * 종류 : 자바 스크립트(Java Script), VB 스크립트(Visual Basic Script) 등

 

 스크립트 언어의 종류

 1) 자바 스크립트(Java Script)

  - 넷스케이프(Netscape)의 브렌던 아이크가 개발한 언어

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

 2) ASP(Active Server Page)

  - 서버 측에서 동적으로 수행되는 페이지를 만들기 위한 언어

  - 마이크로 소프트 사에서 제작하였으며 Windows 계열에서만 수행 가능한 프로그래밍 언어

 3) JSP(Java Server Page)

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

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

 4) PHP(Professional Hypertext Preprocessor)

  - 서버용 스크립트 언어로 Linux, Unix, Windows 운영체제에서 사용이 가능

  - C, Java 등과 문법이 유사하여 배우기 쉽고 웹 페이지 제작에 많이 사용

 5) 파이썬(Python)

  - 객체지향 기능을 지원하는 대화형 인터프리터 언어

  - 플랫폼에 독립적이고 문법이 간단하여 배우기 쉬움

 

017 선언형 언어

선언형 언어의 개요

  - 프로그램이 수행해야 할 문제를 기술하는 언어

  - 목표를 명시하고 알고리즘은 명시하지 않음

 

선언형 언어의 분류

  - 함수형 언어

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

   * 대표적인 언어 : LISP

  - 논리형 언어

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

   * 대표적인 언어 : PROLOG

 

 선언형 언어의 종류

 1) HTML

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

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

 2) LISP

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

  - 기본 자료 주고자 연결 리스트 구조이며 재귀 호출을 많이 사용

 3) PROLOG

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

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

 4) XML

  - 기존 HTML의 단점을 보완하여 웹에서 구조화된 폭넓고 다양한 문서들을 상호 교환할 수 있도록 설계된 언어

  - 사용자가 HTML에 새로운 태그를 정의할 수 있음

 5) Haskell

  - 함수형 프로그래밍 언어

  - 부작용이 없고 코드가 간결하여 에러 발생 가능성이 낮음

 

018 예외 처리

예외 처리 개요

  - 프로그램의 정상적인 실행을 방해는 조건이나 상태를 예외라고 함

  - 예외가 발생했을 때 프로그래머가 해당 문제에 대비해 작성해 놓은 처리 루틴을 수행하도록 하는 것을 예외 처리라고 함

  - C++, Ada, Java, 자바 스크립트와 같은 언어에는 예외 처리 기능이 내장되어 있음

  - 그 외 언어에서는 필요한 경우 조건문을 이용해 예외 처리 루틴을 작성

  - 예외의 원인 : 하드웨어 문제, 문영체제의 설정 실수, 라이브러리 손상, 사용자의 입력 실수, 받아들일 수 없는 연산, 할당하지 못하는 기억장치 접근 등

 

Java 예외 처리

  - 기본 형식

try {

     예외가 발생할 가능성이 있는 코드;

}

catch (예외객체 매개변수) {

     예외객체에 해당하는 예외 발생 시 처리 코드;

}

catch (Exception 매개변수) {

     예외객체에 해당하지 않는 예외 발생 시 처리 코드;

}

finally {

     예외의 발생 여부와 관계없이 무조건 처리되는 코드;

}

 

◈ Java의 주요 예외 객체

   * ClassNotFoundException : 클래스를 찾지 못함

   * NoSuchMethodException : 메소드를 찾지 못함

   * FileNotFoundException : 파일을 찾지 못함

   * InterruptedIOException : 입출력 처리가 중단됨

   * ArithmeticException : 0으로 나누는 등 산술 연산에 대한 예외가 발생

   * IllegalArgumentException : 잘못된 인자를 전달함

   * NumberFormatException : 숫자 형식으로 변환할 수 없는 문자열을 숫자 형식으로 변환함

   * ArrayIndexOutOfBoundsException : 배열의 범위를 벗어난 접근을 시도함

   * NegativeArraySizeException : 0보다 작은 값으로 배열의 크기를 지정함

   * NullPointerException : 존재하지 않는 객체를 참조함

728x90

댓글