정처기 실기 6장 프로그래밍 언어 활용
포스트
취소

정처기 실기 6장 프로그래밍 언어 활용

1) 기본 문법 활용

- 데이터 타입의 길이

- Java

  • short - 2byte
  • long - 8byte
  • char - 2byte

- Python

  • long - 무제한
  • float - 8byte

- C#

  • long - 8byte
  • char - 2byte
  • decimal - 16byte(실수형)

- 변수

- 변수 명명 제한

-> 첫 자리에는 숫자를 사용할 수 없다.

-> 이미 사용되고 있는 예약어의 경우에는 변수로 사용할 수 없다.

- 일반적인 변수 명명법

프로그램의 가독성 향상 및 유지보수성 증가를 위해

- 변수 명명법

Pascal Casing(파스칼 케이싱) : 대문자로 시작하는 변수명을 사용

-> 복잡어일 경우 중간에 시작하는 새로운 단어는 대문자로 적는다.

-> HumanResource

Camel Casing(카멜 케이싱) : 첫번째 문자는 소문자로 시작하고 복잡어일 경우 파스칼 케이싱과 동일

-> getName

GNU Naming(snake) : 모두 소문자를 사용하고 복합어 사이를 '_'를 사용하여 연결

-> human_resource

- Hungarian notation(헝가리안 표기법) : 첫글자 g는 전역변수, m은 멤버변수 의미

-> 전역이나 멤버변수의 경우 그 다음에 _를 적는다.

-> n과 i는 자연수, i는 주로 인덱스, n은 카운트 목적에 주로 사용

-> g_name, n_Cnt

- GNU Naming Convention : 모든 문자를 대문자로 사용하는 GNU Naming Convention의 형태를 사용

-> DEFAULT_DEPARTMENT_CODE

- 연산자

산술 연산자, 시프트 연산자, 관계 연산자, 논리 연산자 등

- 시프트 연산자

  • >> : 왼쪽 값에 오른쪽 값만큼의 부호비트를 채우면서 오른쪽으로 시프트 시킴
  • >>> : 왼쪽 값에 오른쪽 값만큼의 0으로 채우면서 오른쪽으로 시프트 시킴

- 비트 연산자

&(AND), |(OR), ^(XOR), ~(NOT)

- 증감 연산자

피연산자가 하나인 단항 연산자

-> 전위 증감 연산자와 후위 증감 연산자로 나뉨

-> 대입 연산자와 함께 사용했을 때 동작의 순서가 다름

- 삼항 연산자

조건식의 결과에 따라 대입의 결과가 달라지는 경우 사용

-> String str = (a>b) ? "학생 : "교수"

- 사용자 정의 자료형

기존에 존재하는 자료형에 새로운 이름을 부여하거나 여러 자료형을 묶어 새로운 자료형으로 사용하는 것

-> C언어에서는 typedef를 통한 별칭(alias)이나 구조체 의미

-> 객체 지향 언어에서는 주로 클래스를 의미

- C언어의 사용자 정의 자료형

typedef int INT;

-> 새로운 이름 부여

struct Human {
    char name[10];
    int age;
}

-> 클래스와는 달리 함수(method)는 구조체에 포함될 수 없다.

-> 구조체에 함수 포인터를 포함시키면 클래스와 유사한 동작 수행 가능

typedef struct Human {
    char name[20];
    int age;
} Human;

- 객체지향에서의 사용자 정의 자료형 -> 클래스 이용

2) 언어 특성 활용하기

- 프로그래밍 언어의 발전 과정

세계 최초의 프로그램은 내장 방식의 프로그램

  • 60년대 이전 : 어셈블리, 포트란, LISP
  • 60년대 : COBOL, PL/I, BASIC
  • 70년대 : 파스칼, C, SMALLTALK, PROLOG
  • 80년대 : ADA, C++, PERL, 파이썬
  • 90년대 : 루비, 자바, 자바스크립트, PHP, 비주얼 베이직
  • 2000년대 이후 : C#, 스칼라, GO, KOTLIN 등

- 프로그래밍 언어의 유형

- 개발 편의성에 따른 분류

  • 저급 언어 : 기계어 수준, 추상화 수준 낮음, 프로그램 작성 어려움
  • 고급 언어 : 개발자가 쉽게 이해 가능, 번역 과정 필요, 컴파일러 또는 인터프리터 이용

- 구현 방식(패러다임)에 따른 분류

  • 절차 지향 언어
  • 객체 지향 언어
  • 함수형 언어 - LISP, SCALAR
  • 논리형 언어 - PROLOG

- 실행방식에 따른 언어 유형

  • 컴파일 방식 - 느린 번역, 빠른 실행 속도
  • 인터프리터 방식 - 빠른 번역, 느린 실행 속도
  • 혼합형 - Java

- 절차적 프로그래밍 언어

절차 지향 혹은 명령 지향적 프로그래밍

-> 프로시저 호출의 개념을 바탕으로 하고 있는 프로그램

-> 프로시저, 루틴, 하위프로그램, 서브루틴, 메서드, 함수

- 프로시저를 이용한 모듈성 장점

  • 코드의 재사용
  • 프로그램 흐름 파악
  • 모듈화 및 구조화
  • 매개변수와 반환 값
  • 유효범위 - 프로시저가 다른 프로시저의 변수에 접근하거나 그 반대의 경우를 막아줌
  • 명시적 허가 - 명시적 허가 없이 방금전 자기 변수도 접근 불가
  • 약결합 - 모듈성 강화

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

- 구조적(절차적) 방식의 문제점을 극복하고 인간이 사고하는 방식대로

- 객체(object)라는 실 세계에 존재하거나 또는 개념적인 그 어떤 것을 표현한 것

- 기능과 자료가 통합된 객체 단위로 프로그래밍

  • 객체 : 클래스의 인스턴스
  • 클래스 : 객체를 생성하는 틀
  • 메세지 : 객체간 통신을 의미

- 객체의 구성요소

  • 개체(Entity) : 현실 세계에 보이는 본질
  • 속성(Attribute) : 자료 저장소 역할을 하며, 절차 지향 프로그래밍 변수와 대응됨
  • 메소드(Method) : 호출 단위 의미, 절차 지향 프로그램의 함수와 대응됨

- 대표적 객체지향 언어

  • Java : (과거)썬 마이크로시스템즈에서 개발
  • C# : 마이크로소프트에서 개발, 닷넷 프레임워크의 한 부분
  • 델파이
  • 스위프트 : Objective-C와 공존할 목적

- 객체지향 프로그램의 특징

-> 캡슐화, 추상화, 다형성, 정보은닉, 상속

- 캡슐화와 정보은닉

캡슐화 기능과 데이터를 하나로 묶어 객체로 표현하는 것

-> 클래스 내부의 동작으로 모르더라도 클래스가 제공하는 메소드를 사용해 클래스의 기능 사용

-> 캡슐화를 통해 정보은닉이 가능해짐

- 정보은닉의 범위

  • private : 동일 클래스에서만 접근 가능
  • package : 동일 클래스, 동일 패키지
  • protected : 동일 클래스, 동일 패키지, 상속 관계
  • public : 모든 위치에서 젖ㅂ근 가능

- 추상화

실체에서 공통되는 속성이나 관심있는 부분만 추출하여 모델링한 개념

- 상속

상위 클래스의 속성, 메소드를 상속하여 새로운 클래스를 생성하는 기법

-> 추상화된 클래스를 구체화시키는 방법

-> C++은 다중상속 지원, Java에서는 클래스의 다중상속은 지원하지 않지만 Interface의 다중구현 가능

- 다형성

동일한 이름의 오퍼레이션(메소드)이 각 클래스마다 다른 사양으로 정의될 수 있는 것

-> 하나의 클래스 안에서 사용되는 오버로딩과 상속관계의 클래스에서 사용되는 오버라이딩이 대표적

* 오버로딩 : 메소드 중복정의 -> 매개변수 타입에 따른 구분

* 오버라이딩 : 메소드 재정의 -> 클래스에 따른 구분

-> 오버라이딩은 객체지향 설계의 OCP(Open Close Principle), LSP(Liskov Substitution Principle), DIP(Dependency Inversion Principle)를 구현하기 위한 필수 요소

-> 다형성의 핵심, 다양한 디자인 패턴에서 사용됨

- 스크립트 언어

소스코드를 컴파일하지 않고도 실행 할 수 있는 프로그래밍 언어

-> 주로 다른 응용 프로그램에 삽입되어 인터프리터를 통해 해석되고 동작

-> 인터프리터가 있다면 어떤 운영 체제 위에서도 동일하게 동작

- 대표적인 스크립트 언어

  • JavaScript : 미국 넷스케이프에서 개발 -> Java와 기능상 아무런 관련이 없다.
  • JSP : Java Server Pages의 약자, 웹 페이지 동적 생성
  • PHP : 서버 측 스크립트 프로그래밍 언어
  • ASP : Active Server Pages의 약자, MS윈도우 서버에서 운영되는 서버 측 스크립트 언어
  • 펄(Perl) Practical Extraction and Report Language의 약자 -> 텍스트 처리에 주안점을 두고 개발된 스크립트 언어로 CGI 개발에 사용
  • Python : 플랫폼 독집적, 인터프리터식, 객체지향적, 동적타이핑의 대화형 언어

- 대표적인 스크립트 언어 Python

최근 인공지능 라이브러리 텐서플로우의 등장과 함께 많은 관심을 받고 있음

-> 변수 선언시 자료형은 자동으로 결정되고, 블럭을 표시하는 괄호 대신 Indent(들여쓰기)를 이용

- Python 기본 문법

- 변수와 자료형

val3 = "abc" //문자열
val4 = [1,2,3] //리스트(배열)
val5 = (1,2,3) //튜플
val6 = {"a":1, "b":2} //딕셔너리

-> 튜플이란 자료형은 읽기 전용으로, 함수 리턴시 여러값을 전달하는데 유용

- 조건문 : if - elif - else

- 논리연산자 : AND, OR, NOT을 기호가 아닌 문자 그대로 사용

- 반복문

-> do - while 문은 없다.

-> 배열을 insertion 하는 방법은 for - in 구문 사용

array = ['가', '나', '다']
for s in array:
	print(s)

-> 인덱스를 사용하고자 할 때에는 range함수를 사용하여 범위 지정

for idx in range(0,3):
	print(array[idx])

- 함수

def sum(a, b): //선언
	return a+b

-> 메소드 오버로딩은 지원하지 않음

- 클래스

class Human:
	def _init_(self, name, age): //생성자
    // 멤버변수 따로 선언없이 self 키워드로 처리
    	self.name = name
        self.age = age
    def getInfo(self): //멤버변수, 파라미터가 없더라도 self키워드 필요
    	return slef.name, self.age

man = Human("dk", "18")
info = man.getInfo()

print(info[0]) // 리턴값(튜플)의 첫번째 값 접근
print(info[1]) // 두번째 값 접근

- 상속

class Human:

class Soldier(Human): // Human 상속

- Python의 오버라이딩

class Shape:
	def draw(self):
    	pass
        
class Rect(Shape):
	def draw(self):
    	pass("Draw Rect")
        
class Circle(Shape):
	def draw(self):
    	pass("Draw Circle")

- 선언형 언어

특정 선언으로만 프로그램을 동작 시키는 프로그래밍 패러다임

-> 무엇과 같은지를 설명하는 방식

- 선언형 언어의 유형

  • 함수형 언어 - Haskell, LISP
  • 논리형 언어 - Prolog, SQL
  • 제약형 언어 - Oz - 변수간의 관계를 제약하는 형태로 프로그래밍을 기술

- 선언형 언어의 특징

  • 참조 투명성 : 프로그램 동작의 변경 없이 관련 값을 대체 할 수 있다면 이를 참조상 투명하다 한다.
  • 지연(Lazy) 평가 지원 : 계산이 필요한 순간이 오는 경우 까지 미룬다는 개념
  • 빠른 개발 : 이미 만들어진 것을 선언을 통해 사용
  • 적은 버그 : 구체적인 작동 순서를 나열하지 않음

- 대표적인 선언형 언어

  • 하스켈(Haskell) : 난립하고 있는 함수형 언어들을 통합 정리
  • SQL : 관계형 데이터베이스 관리시스템(DBMS)의 데이터를 관리하기 위해 설계
  • 프롤로그(Prolog) : 논리식을 토대로 하여 오브젝트와 오브젝트 간의 관계에 관한 문제를 해결하기 위해 사용
  • XML : 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어

3) 라이브러리 활용하기

- 라이브러리 : 효율적인 프로그램 개발을 위해 필요한 프로그램을 모아 놓은 집합체

-> 모듈화 되어 제공되는 프로그램

-> 별도 설치가 필요한지에 따라 표준/외부 라이브러리로 분류

- 모듈 패키지

  • 라이브러리는 모듈과 패키지 총칭
  • 모듈은 개별 파일
  • 패키지는 파일들을 모아 놓은 폴더

* Java

import 패키지명.모듈명

* C

include "경로/모듈명.h"
include <경로/모듈명.h>

* Python

import 패키지명

- 언어별 표준 라이브러리

- C언어

  • stdio.h - 핵심 입력과 출력 함수 정의
  • string.h. - 문자열 처리 함수들
  • math.h - 일반적인 수학 함수들
  • stdlib.h - 동적할당관련 함수, 난수 생성 함수, 정수의 연산 함수, 검색 및 정렬 함수 등

- Java

  • java.lang - Java 언어의 주요 구성요소와 관련된 패키지
  • java.util - 다양한 자료구조를 동일한 방법으로 처리할 수 있도록 하는 라이브러리
  • java.io, java.net - 키보드, 네트워크, 파일 등 입출력 관련 주요 기능
  • java.sql - 데이터베이스 프로그래밍 관련

- Python

  • String - 일반적인 문자열 연산
  • Math - 수학 함수
  • datetime - 기본 날짜와 시간 형
  • calendar - 일반적인 캘린더 기능
  • os.path - 파일 경로 관련 기능
  • tempfile - 디렉토리 생성 기능

-> import 모듈명 as 별명

-> 별명.함수로 접근

-> from 모듈 import 함수

-> 모듈에서 함수만 import

- 라이브러리 검색

- 자바 표준 라이브러리

-> https://docs.oracle.com/javase/8/docs/api/overview-summary.html

Overview (Java Platform SE 8 )

This document is the API specification for the Java™ Platform, Standard Edition. Submit a bug or feature For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descr

docs.oracle.com

- 파이썬 표준 라이브러리

-> 파이썬 2

https://docs.python.org/2/library/index.html

The Python Standard Library — Python 2.7.18 documentation

The Python Standard Library While The Python Language Reference describes the exact syntax and semantics of the Python language, this library reference manual describes the standard library that is distributed with Python. It also describes some of the opt

docs.python.org

-> 파이썬 3

https://docs.python.org/3.4/library/index.html

The Python Standard Library — Python 3.4.10 documentation

The Python Standard Library While The Python Language Reference describes the exact syntax and semantics of the Python language, this library reference manual describes the standard library that is distributed with Python. It also describes some of the opt

docs.python.org

- 외부 라이브러리 추가 방법

- Java : Maven의 pow.xml 파일에 <dependency> 태그를 통해 라이브러리 추가

-> Gradle은 Build.gradle 파일에 dependency 블록안에 implementation 을 추가

-> Maven의 xml 사용으로 인한 표현 한계를 Groovy 언어 사용으로 극복

-> Android Development Toolkit(ADT)의 기본 빌드 도구로 사용됨

- Python

pip install numpy

절차적 프로그래밍 언어

개요

🧙‍♂️ 절차적 프로그래밍 언어는 일련의 처리 절차를 정해진 문법에 따라 순서대로 기술해나가는 언어

🧙‍♂️ 명령형 언어임

✔ 프로그램이 실행되는 절차 중요

✔ 데이터 중심으로 프로시저 구현, 프로그램 전체가 유기적으로 연결

✔ 자연어에 가까운 단어와 문장으로 구성

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

장단점

✔ 컴퓨터의 처리 구조와 유사하여 실행 속도 빠름

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

✔ 모듈 구성이 용이하며 구조적 프로그래밍 가능

✔ 프로그램 분석하기 어려움

✔ 유지보수나 코드 수정이 어려움

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

언어특징
C
✔ 시스템 소프트웨어 개발 편리 / 시스템 프로그래밍 언어로 가장 적합
✔ 자료 주소를 조작할 수 있는 포인터 제공
✔ 고급 언어이면서 저급 언어의 특징을 모두 갖춤
✔ 컴파일러 방식의 언어
✔ 이식성이 좋아 컴퓨터 기종에 관계 없이 프로그램 작성 가능

ALGOL
✔ 수치 계산이나 논리 연산을 위한 과학 기술 계산용 언어
✔ pascal과 c언어의 모체

COBOL
✔ 사무 처리용 언어
✔ 영어 문장 형식으로 구성되어 있어 이해와 사용 쉬움
✔ 4개의 DIVISION으로 구성

FORTRAN
✔ 과학 기술 계산용 언어
✔ 수학/공학 분야의 공식이나 수식과 같은 형태로 프로그래밍 가능✔

객체지향 프로그래밍 언어

개요

🧙‍♂️

객체지향 프로그래밍 언어는 현실 세계의 개체(ENTITY)를 기계의 부품처럼

하나의 객체로 만들어 소프트웨어를 개발할 때 객체들을 조립해서 프로그램을 작성할 수 있도록 한 프로그래밍 기법

🧙‍♂️ 명령형 언어임

장단점

✔ 상속을 통핸 재사용과 시스템 확장 용이

✔ 코드 재활용성 높음

✔ 자연적 모델링에 의해 분석 설계 쉽고 효율적

✔ 대형 프로그램 작성 용이

✔ 개발 및 유지보수 용이

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

✔ 구현 시 처리시간이 지연됨

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

언어특징
JAVA
✔ 분산 네트워크 환경 적용 가능, 멀티스레드 기능 제공하므로 여러 작업 동시에 처리 가능
✔ 운영체제 및 하드웨어에 독립적, 이식성 강함
✔ 캡슐화 가능. 재사용성 높음


C++
✔ C언어에 객체지향 개념을 적용한 언어
✔ 모든 문제를 객체로 모델링하여 표현

Smalltalk
✔ 1세대 객체지향 프로그래밍 언어 중 하나로 순수한 객체지향 프로그래밍 언어
✔ 최초로 GUI 제공한 언어

객체지향 프로그래밍 언어의 구성요소

🧙‍♂️ 객체지향 프로그래밍 언어의 구성 요소에는 객체(Object), 클래스(Class), 메시지(Message)가 있음

객체(Object)

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

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

➡속성(Attribute):

한 클래스 내에서 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의하는 것으로서

성질, 분류, 식별, 수량 또는 현재 상태 등을 표현

➡ 메소드(Method):

객체가 메시지를 받아 실행해야 할 때 구체적인 연산을 정의하는 것으로,

객체의 상태를 참조하거나 변경하는 수단이 됨

클래스(Class)

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

✔ 객체의 유형 또는 타입(Object Type)을 의미

메시지(Message)

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

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

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

🧙‍♂️ 캡슐화, 정보 은닉, 추상화, 상속성, 다형성

캡슐화(Encapsulation)

✔ 데이터(속성)과 데이터를 처리하는 함수를 하나로 묶는 것

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

✔ 재사용 용이

정보 은닉(Information Hiding)

✔ 감기약을 예로 들면 정보 은닉은 감기약에 어떤 재료가 들어 있는지 몰라도

✔ 감기가 걸렸을 때 먹는 약이라는 것만 알고 복용하는 것과 같은 의미임

추상화(Abstraction)

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

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

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

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

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

상속성(Inheritance)

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

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

➡ 단일 상속: 하나의 상위 클래스로부터 상속받는 것

➡ 다중 상속: 여러 개의 상위클래스로부터 상속받는 것

다형성(Polymorphism)

✔ 하나의 메시지에 대해 각 객체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할 수 있는 능력을 의미함

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

객체지향 기술(복습)

✔ 객체지향 분석

(1) 체 모델링: 메소드 식별

(2) 적 모델링: 기능의 흐름 표시

(3) 능 모델링: 상세분석(제한사항, 성능 등)

✔ 객체지향 분석 방법론

(1) 럼바우(Rumbaugh): 객체, 동적, 기능 모형으로 분리하여 접근

(2) 부치(Booch): 미시적(micro), 거시적(macro) 개발 프로세스로 접근

(3) Coad&Yourdon: E-R 다이어그램 사용하여 모델링

(4) Jacobson: 시나리오 접근

(5) Wirfs-Brocks: 설계의 연속적인 프로세스

스크립트 언어

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

🧙‍♂️ 기계어로 컴파일 되지 않고 별도의 번역기가 소스를 분석하여 동작하게 함

✔ 게시판 입력, 상품 검색, 회원 가입 등과 같은 DB 처리 작업에 주로 사용

▶ 서버에서 해석되어 실행된 후 결과만 클라이언트로 보냄 = 서버용 스크립트 언어

➡서버용 스크립트 언어: ASP, JSP, PHP, 파이썬

▶ 클라이언트의 웹브라우저에서 해석+실행 = 클라이언트용 스크립트 언어

➡ 클라이언트용 스크립트 언어: 자바스크립트(JAVA Script), VB스크립트(Visual Basic Script)

선언형 언어

🧙‍♂️ 프로그램이 수행해야 하는 문제를 기술하는 언어

🧙‍♂️ 알고리즘은 명시하지 않고 목표를 명시함

🧙‍♂️ 함수형 언어, 논리형 언어 등이 있음

🧙‍♂️ 명령형 언어의 반대개념임

▶ 가독성이나 재사용성이 좋음

▶ 작동 순서가 구체적으로 작성되지 않기 때문에 오류가 적음

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

✔ HTML, LISP, PROLOG, XML, Haskell 등


프로그래밍 언어의 언어별 특성

1) 절차적 프로그래밍 언어

(1) 알골: 알고리즘 연구개발 이용목적으로 생성. 절차형 언어로는 최초로 재귀호출이 가능.

(2) C: 유닉스 OS에서 사용위해 개발됨.

(3) BASIC: 교육용으로 문법쉬움. 서로다른 종류 사이의 소스코드는 호환되지 않음

(4) FORTRAN: 과학계산위한 과학 기술전문언어. 수학함수 사용 가능.

2) 객체지향 프로그래밍 언어

(1) C++: C에 객체지향프밍 개념과 일반화 프밍위한 템플릿 기능 추가.

(2) C#: microsoft에서 개발한 객체지향프밍언어. 불안전코드(unsafe code) 기술을 통해 플랫폼간 상호운용성 확보

(3) java: 썬 마이크로 시스템즈(oracle합병됨)가 개발한 객체지향 프밍언어. 현제 웹앱개발에 가장많이 사용되며, 자바컴파일러는 자바언어로 작성된 프로그램을 바이트코드라는 특수 바이너리형태로 변환.

(4) delphi:파스칼문법에 여러기능이 추가됨. 윈도즈 아래 모든 부분 프로그래밍 가능. 높은 생산성, 간결코드가 장점. 저수준 시스템 프로그래밍도 가능함.

3) 스크립트 언어

(1) PHP: 동적웹 만들기위해 설계됨. html에 입력시 웹서버에서 코드 인식해 웹페이지 생성. 인터페이스 방식의 자체 인터프리터 제공

(2) Perl: 인터프리터 방식. 실용성. C, sh 등 다른 프밍언어에서 뛰어난 기능을 도입. 불특정 데이터길이 제약없이 강력한 문자열 처리 기능 제공

(3) python: 라이브러리가 풍부. 유니코드 문자열 지원. 들여쓰기 사용. 다른언어로 쓰인 모듈을 연결.

(4) javascript: 객체기반. 웹브라우저내에서 주로 사용. 다른 응용프로그램 내장객체에도 접근할 수 있는 기능. 브라우저마다 지원되는 버전이 상이함.

4) 선언형 언어 종류

구분종류설명
함수형하스켈-패턴맞춤, 커링, 조건제시법, 가드, 연산자정의 등의 기능
-재귀함수, 대수적 자료형 지원
LISP(리스프)-수학표기법 나타내기위한 목적
-트리, GC, 동적자료형, 인터프리터 같은 개념 제시
-함수호출시 함수이름 혹은 연산자가 첫 번째로 위치해 피연산자가 이어 위치.
논리형prolog-논리식 기반, 객체간 관계에 관한 문제를 해결
-인공지능, 계산언어학 분야, 자연어 처리에서 사용
특수분야SQL-RDMBS의 데이터관리위해 설계된 특수 목적의 프밍언어
-DB 관련 프로그램들이 SQL을 표준으로 채택

객체지향 프로그래밍(객클메)

: 객체와 객체간의 통신을 통해 프로그램이 구현됨

구성요소설명
객체(object)개체,속성,메서드로 구성된 클래스의 인스턴스
클래스객체를 표현하는 추상데이터타입. 개체를 생성하는 틀.
메시지객체간의 통신

-객체(개속메): 현실세계에서 개체를 데이터 속성과 메서드를 결합한 형태로 표현한 것.

구성요소설명
개체(entity)현실세계 본질
속성자료저장소 역할. (변수)
메서드호출단위 (함수)

라이브러리

:효율적 프로그램 개발위해 필요한 프로그램을 모아놓은 집합체. 도움말, 설치파일, 샘플코드 등을 제공.(구성요소)

1) 표준 라이브러리

: 여러 종류의 모듈과 패키지를 가지며, 별도 파일 설치없이 사용가능

2) 외부 라이브러리

: 별도파일 설치. 누구나 개발하여 설치가능. 인터넷을 이용해 공유가능.

: 라이브러리는 모듈과 패키지를 총칭함.

모듈이 개별파일이면 패키지는 파일들을 모아놓은 폴더임.

모듈: 전역변수, 함수 등 모아둔 파일. ex) import 모듈명

패키지: 모듈을 디렉터리 형식으로 구조화한 라이브러리. import 패키지명.모듈명

(도설샘)라이브러리의 구성-도움말 / 설치 파일 / 샘플 코드

신기술동향

재해복구 시스템

복구목표시간 (RTO, Recovery Time Objective)

  • 재해로 인하여 서비스가 중단되었을 때, 서비스를 복구하는데까지 걸리는 최대 허용시간

복구목표시점 (RPO, Recovery Point Objective)

  • 재해로 인하여 중단된 서비스를 복구하였을 때, 유실을 감내할 수 있는 데이터의 손실 허용시점

업무연속성계획 (BCP, Business Continuity Planning)

  • 정보기술부문뿐 아니라, 인력-설비-자금 등 제반 자원을 대상으로 장애 및 재해를 포괄하여 조직의 생존을 보장하기 위한 예방 및 복구활동 등을 포함하는 보다 광범위한 계획

재해복구계획 (DRP, Disaster Recovery Planning)

  • 정보기술서비스기반에 대하여 재해가 발생하는 경우를 대비하여, 이의 빠른 복구를 통해 업무에 대한 영향을 최소화하기 위한 제반 계획

재해복구시스템 (DRS, Disaster Recovery System)

  • 재해복구계획의 원활한 수행을 지원하기 위하여 평상시에 확보하여 두는 인적-물적 자원 및 이들에 대한 지속적인 관리체계가 통합된 것

주센터

  • 현재 사용중인 전산 인프라를 운영하는 전산센터로써, 주전산센터 혹은 주사이트라 일컫기도 함.

재해복구 (DR, Disaster Recovery)

  • 재해로 인하여 중단된 정보기술 서비스를 재개하는 것

재해복구센터

  • 주 센터에 반하여 재해에 대비하여 업무 연속성을 보장할 수 있도록 원격지에 구축한 전산 센터로써, 원격지센터 혹은 백업 센터라 일컫기도 함

재해복구시스템의 복구수준별 유형 비교

Mirror Site

  • 주 센터와 동일한 수준의 정보기술 자원을 원격지에 구축, Active-Active 상태로 실시간 동시 서비스 제공

Hot Site

  • 주 센터와 동일한 수준의 정보기술 자원을 원격지에 구축하여 Standby 상태로 유지 (Active-Standby)

Warm Site

  • 중요성이 높은 정보기술자원만 부분적으로 재해복구센터에 보유
  • 데이터는 주기적(약 수시간~1일)으로 백업

Cold Site

  • 데이터만 원격지에 보관하고, 이의 서비스를 위한 정보자원은 확보하지 않거나 장소 등 최소한으로만 확보
  • 주센터의 데이터는 주기적(수일~수주)으로 원격지에 백업

클라우드 컴퓨팅

IaaS

  • 인프라(infra)
    • 정보기술이나 인터넷에서 컴퓨터와 사용자를 연결하는데 사용되는 물리적 하드웨어를 지칭. IT서비스를 제공하기 위한 서버와 스토리지 같은 H/W와 각 장비들을 연결하고 외부 인터넷망과 연결하기 위한 네트워크(장비 및 S/W), 나아가 이런 장비들을 유지관리하기 위해 필요한 데이터센터(랙, 공조, 항온항습, 전기, 변압, UPS, 소화설비를 포함하는)까지도 의미한다.

PaaS

  • 플랫폼(platform)
    • IT에서 플랫폼은 어플리케이션을 작동시키기 위한 "기반 OS"나 "기술환경"을 의미

SaaS

데이터 마이닝

  • 대규모로 저장된 데이터로부터 체계적이고 자동적으로 통계적인 규칙이나 패턴을 찾는 방법

데이터 웨어하우스

  • 조직이나 기업체의 중심이 되는 업무시스템에서 모아진 정보를 일관된 스키마로 저장한 저장소

온톨로지

  • 실세계에 존재하는 모든 개념들과 개념들의 속성, 개념들 간의 관계 정보를 컴퓨터가 이해할 수 있도록 서술해 놓은 개념화 명세서

가상화(Virtualization)

  • 하나의 물리적 리소스를 여러개인 것처럼 사용하거나, 여러개의 물리적 리소스를 하나인 것처럼 사용하는 기술

REST (Representational State Transfer)

  • HTTP URI를 통해 자원(Resource)을 구분하고 POST, GET, PUT, DELETE를 통해 상태를 주고 받는 기술

알고리즘

정렬

버블정렬

  • 인접한 두 숫자를 바꾸면서 정렬 if(a[j] > a[j+1]){ temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; }

선택정렬

  • 한 텀 돌때마다 가장 작은 값을 찾음 for( ){ if(array[i] < array[min]){ min = j; } }

삽입정렬

  • 기준값을 정하고 정렬하여 쉬프트 for( ){ a[j+1] = a[j]; }

운영체제

프로세스 스케줄링 알고리즘

선점형

  • 라운드 로빈
    • 시간 할당량 / 시간 내 안되면 뒤로 돌림 ( 회전목마 ) / 균등하게 시간 주어짐
  • SRT Shortest Remaining Time First
    • 가장짧은 처리 우선수행
  • 다단계 큐
    • 독립적. 독자적 다단계
  • 다단계 피드백 큐
    • FCFS와 라운드 로빈 혼합.우선순위 단계

비선점형

  • 우선순위 프로세스별 우선 순위 / Priority
  • 기한부 명시시간 내 / Deadline
  • FCFS / FIFO
    • 도착 순서
  • SJF / Shortest Job First
    • 최소시간 우선
  • HRN / Highest Response Ratio Next
    • 응답률 순서
    • (대기시간 + 서비스시간) / (서비스시간)

Quartz Cron Trigger

초(Seconds)
분(Minutes)
시(Hours)
일(Day-of-Month)
월(Months)
요일(Days-of-Week)
연도(Year) - optional
  • 와일드카드 문자
    • 이 필드에서 가능한 “매번”을 표현합니다. 그러므로, 앞의 예제에서 “월(Month)”필드의 ‘’표시는 단순히 “매월”을 의미합니다. 요일(Day-of-Week)필드에 ‘’는 “한주동안 매일”을 의미합니다.
  • 월(Months)
    • 숫자 0에서 11, 또는 물자열 JAN, FEB, MAR, APR, MAY, JUN. JUL, AUG, SEP, OCT, NOV, 그리고 DEC를 사용할 수 있습니다. 요일(Days-of-Week)은 1과 7(1=일요일)사이의 숫자를 사용하거나, 문자열 SUN, MON, TUE, WED, THU, FRI, 그리고, SAT를 사용할 수 있습니다.
  • “/” 문자
    • 값의 증가 표현에 사용될 수 있습니다. 예를들어, 분(Minutes) 필드에 ‘0/15’ 를 사용한다면, 이것은 “0분 부터 시작하여 (시간의) 매 15분 마다”를 의미합니다. 만약, 분(Minutes) 필드에 ‘3/20’을 사용한다면, “3분부터 시작하여 매 20분 마다”를 의미하므로, ‘3,23,43’을 분 필드에 나열한것과 같습니다. 미묘하게 주목할 점은 “/35”의 경우 “매 35분 마다”를 의미하지 않는다는 것입니다. 이것은, “0분부터 시작하여 매 35분 마다”이므로, 달리 표현하면 ‘0,35’를 나열한 것과 같습니다.
  • “?”문자
    • 일(day-of-month)와 요일(day-of-week) 필드에서만 허용됩니다. 이것은 “설정 값 없음”에 사용됩니다. “?”문자는 두 필드(일, 요일)중 하나만 설정할 경우에 나머지 필드에 유용하게 사용됩니다. 다음 섹션의 예제를 보면 이해가 쉬울 것입니다.
  • “L”문자
    • 일(day-of-month)과 요일(day-of-week) 필드에서만 허용됩니다. 이 문자는 “마지막(last)”의 첫글자에서 따왔습니다. 하지만, 두 필드에서 조금 다른 의미로 해석됩니다. 예를들어, “L”이 일(day-of-month) 필드에서 사용되었을 경우 “이달의 마지막 날”을 의미합니다. 1월이면 31일이 되고, 2월은 (윤년이 아닌경우)28일이 됩니다. 요일(day-of-week) 필드에서 사용될 경우에는 단순히 “7” 또는 “SAT”를 의미합니다. 하지만, “L”이 특정값의 뒤에 올경우, 이것은 “이달의 마지막 x요일”이 됩니다. 예를들어, “6L” 또는 “FRIL”은 “이달의 마지막 금요일”을 의미합니다. 또한, 마지막 날에서 특정 기간(offset)을 설정할 수도 있습니다. “L-3”과 같이 설정하면 “(이달의 마지막일로부터)3일전부터 마지막날 까지”의 기간을 의미합니다. “L”옵션을 사용할때, 값의 목록이나 범위를 명확히 하지 않을 경우 예상밖의 결과를 낳을 수 있으므로 주의가 필요합니다.
  • “W”
    • 주어진 날로부터 가장 가까운 평일(월요일~금요일)을 가르킵니다. 만일, “15W”라는 값을 일(day-of-month)필드에 설정하면, “이달의 15번째날에서 가장 가까운 평일”을 의미합니다.
  • “#”
    • “이달의 n번째 X요일”을 가르킵니다. 예를들어, “6#3” 또는 “FRI#3”을 요일(day-of-week) 필드에 설정할 경우 이것은 “이달의 세번째 금요일”을 의미 합니다.

신기술동향

재해복구 시스템

복구목표시간 (RTO, Recovery Time Objective)

  • 재해로 인하여 서비스가 중단되었을 때, 서비스를 복구하는데까지 걸리는 최대 허용시간

복구목표시점 (RPO, Recovery Point Objective)

  • 재해로 인하여 중단된 서비스를 복구하였을 때, 유실을 감내할 수 있는 데이터의 손실 허용시점

업무연속성계획 (BCP, Business Continuity Planning)

  • 정보기술부문뿐 아니라, 인력-설비-자금 등 제반 자원을 대상으로 장애 및 재해를 포괄하여 조직의 생존을 보장하기 위한 예방 및 복구활동 등을 포함하는 보다 광범위한 계획

재해복구계획 (DRP, Disaster Recovery Planning)

  • 정보기술서비스기반에 대하여 재해가 발생하는 경우를 대비하여, 이의 빠른 복구를 통해 업무에 대한 영향을 최소화하기 위한 제반 계획

재해복구시스템 (DRS, Disaster Recovery System)

  • 재해복구계획의 원활한 수행을 지원하기 위하여 평상시에 확보하여 두는 인적-물적 자원 및 이들에 대한 지속적인 관리체계가 통합된 것

주센터

  • 현재 사용중인 전산 인프라를 운영하는 전산센터로써, 주전산센터 혹은 주사이트라 일컫기도 함.

재해복구 (DR, Disaster Recovery)

  • 재해로 인하여 중단된 정보기술 서비스를 재개하는 것

재해복구센터

  • 주 센터에 반하여 재해에 대비하여 업무 연속성을 보장할 수 있도록 원격지에 구축한 전산 센터로써, 원격지센터 혹은 백업 센터라 일컫기도 함

재해복구시스템의 복구수준별 유형 비교

Mirror Site

  • 주 센터와 동일한 수준의 정보기술 자원을 원격지에 구축, Active-Active 상태로 실시간 동시 서비스 제공

Hot Site

  • 주 센터와 동일한 수준의 정보기술 자원을 원격지에 구축하여 Standby 상태로 유지 (Active-Standby)

Warm Site

  • 중요성이 높은 정보기술자원만 부분적으로 재해복구센터에 보유
  • 데이터는 주기적(약 수시간~1일)으로 백업

Cold Site

  • 데이터만 원격지에 보관하고, 이의 서비스를 위한 정보자원은 확보하지 않거나 장소 등 최소한으로만 확보
  • 주센터의 데이터는 주기적(수일~수주)으로 원격지에 백업

클라우드 컴퓨팅

IaaS

  • 인프라(infra)
    • 정보기술이나 인터넷에서 컴퓨터와 사용자를 연결하는데 사용되는 물리적 하드웨어를 지칭. IT서비스를 제공하기 위한 서버와 스토리지 같은 H/W와 각 장비들을 연결하고 외부 인터넷망과 연결하기 위한 네트워크(장비 및 S/W), 나아가 이런 장비들을 유지관리하기 위해 필요한 데이터센터(랙, 공조, 항온항습, 전기, 변압, UPS, 소화설비를 포함하는)까지도 의미한다.

PaaS

  • 플랫폼(platform)
    • IT에서 플랫폼은 어플리케이션을 작동시키기 위한 "기반 OS"나 "기술환경"을 의미

SaaS

데이터 마이닝

  • 대규모로 저장된 데이터로부터 체계적이고 자동적으로 통계적인 규칙이나 패턴을 찾는 방법

데이터 웨어하우스

  • 조직이나 기업체의 중심이 되는 업무시스템에서 모아진 정보를 일관된 스키마로 저장한 저장소

온톨로지

  • 실세계에 존재하는 모든 개념들과 개념들의 속성, 개념들 간의 관계 정보를 컴퓨터가 이해할 수 있도록 서술해 놓은 개념화 명세서

가상화(Virtualization)

  • 하나의 물리적 리소스를 여러개인 것처럼 사용하거나, 여러개의 물리적 리소스를 하나인 것처럼 사용하는 기술

REST (Representational State Transfer)

  • HTTP URI를 통해 자원(Resource)을 구분하고 POST, GET, PUT, DELETE를 통해 상태를 주고 받는 기술

알고리즘

정렬

버블정렬

  • 인접한 두 숫자를 바꾸면서 정렬 if(a[j] > a[j+1]){ temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; }

선택정렬

  • 한 텀 돌때마다 가장 작은 값을 찾음 for( ){ if(array[i] < array[min]){ min = j; } }

삽입정렬

  • 기준값을 정하고 정렬하여 쉬프트 for( ){ a[j+1] = a[j]; }

운영체제

프로세스 스케줄링 알고리즘

선점형

  • 라운드 로빈
    • 시간 할당량 / 시간 내 안되면 뒤로 돌림 ( 회전목마 ) / 균등하게 시간 주어짐
  • SRT Shortest Remaining Time First
    • 가장짧은 처리 우선수행
  • 다단계 큐
    • 독립적. 독자적 다단계
  • 다단계 피드백 큐
    • FCFS와 라운드 로빈 혼합.우선순위 단계

비선점형

  • 우선순위 프로세스별 우선 순위 / Priority
  • 기한부 명시시간 내 / Deadline
  • FCFS / FIFO
    • 도착 순서
  • SJF / Shortest Job First
    • 최소시간 우선
  • HRN / Highest Response Ratio Next
    • 응답률 순서
    • (대기시간 + 서비스시간) / (서비스시간)

Quartz Cron Trigger

초(Seconds)
분(Minutes)
시(Hours)
일(Day-of-Month)
월(Months)
요일(Days-of-Week)
연도(Year) - optional
  • 와일드카드 문자
    • 이 필드에서 가능한 “매번”을 표현합니다. 그러므로, 앞의 예제에서 “월(Month)”필드의 ‘’표시는 단순히 “매월”을 의미합니다. 요일(Day-of-Week)필드에 ‘’는 “한주동안 매일”을 의미합니다.
  • 월(Months)
    • 숫자 0에서 11, 또는 물자열 JAN, FEB, MAR, APR, MAY, JUN. JUL, AUG, SEP, OCT, NOV, 그리고 DEC를 사용할 수 있습니다. 요일(Days-of-Week)은 1과 7(1=일요일)사이의 숫자를 사용하거나, 문자열 SUN, MON, TUE, WED, THU, FRI, 그리고, SAT를 사용할 수 있습니다.
  • “/” 문자
    • 값의 증가 표현에 사용될 수 있습니다. 예를들어, 분(Minutes) 필드에 ‘0/15’ 를 사용한다면, 이것은 “0분 부터 시작하여 (시간의) 매 15분 마다”를 의미합니다. 만약, 분(Minutes) 필드에 ‘3/20’을 사용한다면, “3분부터 시작하여 매 20분 마다”를 의미하므로, ‘3,23,43’을 분 필드에 나열한것과 같습니다. 미묘하게 주목할 점은 “/35”의 경우 “매 35분 마다”를 의미하지 않는다는 것입니다. 이것은, “0분부터 시작하여 매 35분 마다”이므로, 달리 표현하면 ‘0,35’를 나열한 것과 같습니다.
  • “?”문자
    • 일(day-of-month)와 요일(day-of-week) 필드에서만 허용됩니다. 이것은 “설정 값 없음”에 사용됩니다. “?”문자는 두 필드(일, 요일)중 하나만 설정할 경우에 나머지 필드에 유용하게 사용됩니다. 다음 섹션의 예제를 보면 이해가 쉬울 것입니다.
  • “L”문자
    • 일(day-of-month)과 요일(day-of-week) 필드에서만 허용됩니다. 이 문자는 “마지막(last)”의 첫글자에서 따왔습니다. 하지만, 두 필드에서 조금 다른 의미로 해석됩니다. 예를들어, “L”이 일(day-of-month) 필드에서 사용되었을 경우 “이달의 마지막 날”을 의미합니다. 1월이면 31일이 되고, 2월은 (윤년이 아닌경우)28일이 됩니다. 요일(day-of-week) 필드에서 사용될 경우에는 단순히 “7” 또는 “SAT”를 의미합니다. 하지만, “L”이 특정값의 뒤에 올경우, 이것은 “이달의 마지막 x요일”이 됩니다. 예를들어, “6L” 또는 “FRIL”은 “이달의 마지막 금요일”을 의미합니다. 또한, 마지막 날에서 특정 기간(offset)을 설정할 수도 있습니다. “L-3”과 같이 설정하면 “(이달의 마지막일로부터)3일전부터 마지막날 까지”의 기간을 의미합니다. “L”옵션을 사용할때, 값의 목록이나 범위를 명확히 하지 않을 경우 예상밖의 결과를 낳을 수 있으므로 주의가 필요합니다.
  • “W”
    • 주어진 날로부터 가장 가까운 평일(월요일~금요일)을 가르킵니다. 만일, “15W”라는 값을 일(day-of-month)필드에 설정하면, “이달의 15번째날에서 가장 가까운 평일”을 의미합니다.
  • “#”
    • “이달의 n번째 X요일”을 가르킵니다. 예를들어, “6#3” 또는 “FRI#3”을 요일(day-of-week) 필드에 설정할 경우 이것은 “이달의 세번째 금요일”을 의미 합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

정처기 실기 5장 인터페이스 구현

정처기 실기 7장 SQL 응용

assets\js\dist