전공과목 정리 100

[프로그래밍언어론📐] 6장 자료형

출처 : 프로그래밍 언어론 : 원리와 실제 (창병모, 인피니티북스, 2021) 6.1 자료형 개요1) 자료형의 의미- 자료형해당 타입의 변수가 가질 수 있는 값들의 집합그 값들에 적용 가능한 연산들의 모음 2) 기본 자료형- 사전 정의된 기본 자료형 : boolean, char, int, float, double, ...- 사용자 정의 기본 자료형열거형 : 열거된 값들로 이루어진 타입 3) 부분 타입 (subtype)- 부분 타입 기반 타입(base type)의 일부분 값들로 정의된 자료형기반 타입의 모든 연산을 부분 타입에 적용 가능Ada, Pascal 6.2 복합 타입1) 타입 구성자- 기본 자료형으로부터 더 복잡한 자료형(복합 타입)을 구성하는 방법배열 타입 (Array type)리스트 타입 (Li..

[프로그래밍언어론📐] 5장 의미론

출처 : 프로그래밍 언어론 : 원리와 실제 (창병모, 인피니티북스, 2021) 5.0 의미론1) 의미론의 개요- 프로그램의 의미와 정확한 정의 및 이해- 소프트웨어의 정확한 명세- 소프트웨어 시스템에 대한 검증 혹은 추론- 컴파일러 혹은 해석기 작성의 기초 2) 의미론의 종류- 작동 의미론 (Operational Semantics)프로그램의 의미를 프로그램 실행(작동) 과정으로 설명- 표기 의미론 (Denotational Semantics)프로그램의 의미를 함수 형태로 정의하여 설명- 공리 의미론 (Axiomatic Semantics)프로그램의 시작 상태와 종료 상태를 논리적 선언(assertion) 형태로 정의하여 설명 5.1 수식의 의미1) 수식- 상태에서 수식의 값- V : (State, Expr..

[프로그래밍언어론📐] 4장 변수 및 유효범위

출처 : 프로그래밍 언어론 : 원리와 실제 (창병모, 인피니티북스, 2021) 4.1 변수 선언1) 변수 선언과 유효범위- 변수 선언 : 사용 전 선언- 변수의 유효범위 (scope) : 선언된 변수가 유효한(사용될 수 있는) 프로그램 내의 범위/영역- 정적 유효범위(Static scope) 규칙선언된 이름은 선언된 블록 내에서만 유효함대부분의 언어에서 표준 규칙으로 사용됨2) 변수 선언- 변수 id는 타입 변수이며 초기화가 가능하다.- 변수 id는 지역 변수로 유효범위는 선언된 블록 내이다. → ... | let in end; → { id [=];} 3) 블록의 중첩- let 블록 내의 문장 S에 다시 let 블록이 나타날 수 있다. 4) 언어 S의 전역 변수- 지역 변수 : let문 내에서 선언된..

[프로그래밍언어론📐] 3장 언어 설계와 파서 구현

출처 : 프로그래밍 언어론 : 원리와 실제 (창병모, 인피니티북스, 2021) 3.1 프로그래밍 언어 S1) 샘플 프로그래밍 언어- 대화형 인터프리터 방식으로 동작 가능- 블록 중첩을 허용- 실행 전에 타입 검사를 수행하는 강한 타입 언어- 어휘분석기, 파서, AST, 타입 검사기, 인터프리터 순차 구현 2) 언어 S의 문법 → {} → | | → id [= ]; → id = ;| '{' '}'| if () then [else ]| while () | read id; | print ; | let in end; → {} → {} → int | bool | string 3) 프로그래밍 언어 S- 언어 S의 프로그램 : 명령어()들로 구성- 명령어변수 선언 : 함수 정의 : 실행 문장 : - 실..

[프로그래밍언어론📐] 2장 구문법 (Syntax)

출처 : 프로그래밍 언어론 : 원리와 실제 (창병모, 인피니티북스, 2021) 2.1 구문 및 구문법1) 구문법 (Syntax)- 문장 혹은 프로그램을 작성하는 방법- 자연어(영어, 한국어)의 문법처럼 프로그래밍 언어의 구문법이 있다.- 프로그래밍 언어의 이론적 기초 2) 재귀적 정의 : 이진수의 구문법- 숫자(D)는 0, 1 중 하나이다.- 이진수 구성 방법숫자(D)는 이진수(N)이다.이진수(N) 다음에 숫자(D)가 오면 이진수(N)이다. 3) 수식의 구문법 5) 프로그래밍 언어의 구문 구조 6) 문맥-자유 문법 CFG- 넌터미널 심볼은 보통 대문자로, 터미널 심볼은 소문자로 표기 7) 생성 규칙 2.2 유도1) 유도 (Derivation)- 구문검사 : 입력된 문장 혹은 프로그램이 문법에 맞는지 검..

[프로그래밍언어론📐] 1장 서론

출처 : 프로그래밍 언어론 : 원리와 실제 (창병모, 인피니티북스, 2021)1.1 프로그래밍 언어란?1) 프로그래밍언어- 계산 과정을 기계가 읽을 수 있고 사람이 읽을 수 있도록 기술하기 위한 일종의 표기법- 계산 (computation) : 데이터 조작, 텍스트 처리, 알고리즘- 기계 읽기 (machine readability) : 효율적인 번역 또는 실행- 사람 읽기 (human readability) : 프로그래밍 편의성, 컴퓨터 연산들의 이해하기 쉬운 추상화 2) 프로그래밍 언어의 중요성- 언어에 따라 상이한 프로그래밍 방식절차형(명령헝) 언어 (procedural langauge)함수형 언어 (functional langauge)논리 언어 (logic language)객체지향 언어 (obje..

[소프트웨어분석및설계🛠️] 12장 시스템 구현 및 운영

출처 : 강의 교안, 시스템분석설계 with 애자일 (생능출판사, 최은만) 1. 구현 및 운영 개요1.1 시스템 구현 및 운영1) 목적- 최종 물리적 시스템 내역 ➡️ 작동되고 신뢰할만한 소프트웨어로 변환- 수행된 작업의 문서화- 현재와 향후 사용자들에게 도움 제공 2) 주요 활동- 코딩, 테스팅, 설치- 문서화, 사용자 교육, 지원- 유지보수 1.2 코딩, 테스팅, 설치- 코딩물리적 설계 내역을 작동되는 컴퓨터 코드로 변환산출물 : 코드, 프로그램 문서- 테스팅다양한 방법들로 코딩과 병행해서 수행 가능산출물 : 테스트 시나리오 및 테스트 데이터, 프로그램과 시스템 테스팅 결과- 설치산출물 : 사용자 지침, 사용자 교육계획, 설치 및 전환 계획 1.3 시스템 문서화/교육 및 지원- 시스템 문서화생명주기 ..

[소프트웨어분석및설계🛠️] 11장 데이터베이스와 UI 설계

출처 : 강의 교안, 시스템분석설계 with 애자일 (생능출판사, 최은만) 1. 데이터베이스 설계1.0 데이터베이스 설계1) 저장 매커니즘- 자료의 저장정보시스템의 주된 요구사항시간이 흘러도 변하지 않고 최소의 중복성을 가지는 안정적인 구조- 파일시스템 vs. 데이터베이스 ➡️ 대부분의 정보시스템은 자료를 저장하기 위해 데이터베이스 시스템을 사용파일 시스템은 디렉토리와 파일로 구성파일의 구성 : 연속구조, 순차 구조, 랜덤 구조접근 방식 : 순차 접근, 인덱스 순차 접근, 직접접근- 파일 시스템의 문제데이터 파일들에 중복된 데이터 존재, 데이터 간의 불일치데이터의 공유가 부족 ; 새로운 프로그램 개발을 위해 새롭게 파일 구성응용프로그램과 데이터 간의 독립성이 없음 ; 유지보수 비용이 증가데이터 보안 ..

[소프트웨어분석및설계🛠️] 10장 설계 패턴

출처 : 강의 교안, 시스템분석설계 with 애자일 (생능출판사, 최은만) 1. 설계 패턴1.1 설계 패턴- 아키텍처 설계 수준보다 낮은 수준의 설계 문제에 재사용 가능한 솔루션을 제공- 패턴 (Pattern) : 실세계에 존재하는사물이나 개념에서 반복적으로 발생하는 형상을 추상화하여 정의한 것- 패턴 사용의 장점생산성 증가, 전문가 경험의 전달 및 학습 효과솔루션에 대한 불필요한 논쟁 제거, 결과물의 품질 향상- 설계 패턴 (design pattern)소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결책많은 개발자들이 경험상 체득한 설계 지식을 검증하고 이를 추상화하여 일반화한 템플릿- 설계 패턴을 사용하는 이유쉽게 재사용 가능 ➡️ 검증된 것을 재사용함으로써 생산성을 높일 수 있음..

[💡시스템종합설계(캡스톤디자인)] node.js crypto 이용하기

공통node.js에서 crypto를 이용하기 위해 npm 명령어로 다운받고 import한다.import crypto, { Cipher } from "crypto"; AES를 이용한 암/복호화const key = "01234567890123456789012345678901"const iv =Buffer.alloc(16,0);// 암호화const AESencrypt = crypto.createCipheriv("aes-256-cbc", key, iv);const cipertext = AESencrypt.update("Hello world", "utf-8", "base64") + AESencrypt.final("base64");console.log(cipertext);// 복호화const AESdecrypt =..