STEP3 프로그램 설계 (이론) # 용어정리 - hwj0623/ios_swift GitHub Wiki
1.컴퓨터(Computer)
정의 : 프로그래밍을 통해 일련의 "논리/수학적 연산을 자동으로 처리하기 위한 장치"
구성 : 일반적으로 컴퓨터는
1) 하드웨어,
2) OS (메인 소프트웨어; 시스템 소프트웨어로 컴퓨터 하드웨어와 소프트웨어 자원을 관리하여 프로그램에게 공통의 서비스를 제공한다),
3) 응용 어플리케이션 으로 구성된다.
컴퓨터의 구성 1) 하드웨어
-
CPU (중앙연산처리장치)
- 직접적으로
Data
를 조작하는 연산을 수행한다. 레지스터
로 구성.- 트랜지스터의 전기적 신호로 연산을 수행하는 곳.
- 직접적으로
-
메인 메모리 = 주기억장치 (
Main Memory
,Primary Storage
)- CPU에 직접적으로 접근이 가능한 것들을 총칭한다.
- RAM, ROM, Cache로 분류되나 통상적으로는
RAM
을 일컫는다. Volatile memory
와Non-volatile
memory로 나뉘는데, 각각은 전원장치의 on/off에 따라 data가 소실되거나 보존되는 특징을 갖는다.- 기본적으로 메모리는 (ROM을 제외)
휘발성
인 특징을 갖는다. - cf. 반면에 스토리지는
비휘발성
이다.
-
메인 메모리의 3 종류
-
Cache
(CPU 내의 캐시, L2,L3 ..) : CPU와 메모리 사이에 존재하여 CPU에서 자주 사용되는 Data를 메모리를 거치지 않고 사용하도록 저장하는 부분. -
RAM
(Random Access Memory)- why Random Access ? : Reading task들은 보통 위치에 상관없이 동시에 발생한다.
- 특징 : RAM은 read/write 시간이 빠르다.
현재 사용중인
OS System 혹은 Program의 data를 더 느린 보조기억장치로부터load/open (보조기억장치로부터 데이터를 메인 메모리로 적재)
하는 역할을 수행한다. 휘발성
: power off 시 현재 보유중인 데이터를 잃는다.
-
ROM
(Read Only Memory)- 특징 : 읽기 전용 메모리. 한번 프로그램된 후에는 수정이 불가능하다.
- 컴퓨터 부팅 프로그램처럼
essential programs
을 저장하기 위해 사용. 작은 양을 사용한다. 비 휘발성
- more versatile 한
flash storage( NAND Flash 등)
으로 대체되고 있다.
-
Flash memeory
- A special type of memory that works like both RAM and ROM. You can write information to flash memory, like you can with RAM, but that information isn’t erased when the power is off, like it is with ROM.
-
컴퓨터의 구성 2) OS
컴퓨터의 구성 3) 응용 소프트웨어
- OS 위에서 작동하는 프로그램들(응용 어플리케이션)
2. 절차(Program)
`특정한 목적(task)을 위해 컴퓨터에서 수행되는 일련의 연산의 집합` 을 의미
`a set of instructions`
순차적(Sequential) Programming
정의 : 가장 초기에 등장한 코딩 패러다임으로, 코드의 흐름,순서에 기반하는 프로그래밍
-
비구조적 프로그래밍(Non-structured programming)
이랑 개념적으로는 다르나, 절차적 프로그래밍과는구조적/비구조적
차이가 있다. -
구조
라는 개념이 존재하지 않는다. -
과거 천공카드를 활용한 컴퓨터 동작방식처럼 모든 프로그램은 코드를 순차적으로 읽어서 실행한다.
- 그러나 반드시 순서대로만 가는 것은 아니다.
goto
를 활용하여 코드의 순서를 오갈 수는 있다.
절차적(Procedural) Programming
정의 : 반복될 가능성이 있는 모듈을재사용 가능한 프로시저 단위(함수단위)로 나눈 프로그래밍
절차
는 순수한의미의 절차가 아닌Procedual인 프로시저
, 즉함수
를 의미한다.Procedure
!==함수(Function)
을 의미 (넓은 의미에서는 함수에 포함된다. 그러나 프로시저가 함수를 포함되지는 않는다.)- 프로시저는
반환값이 없고(없다) 실행이 주가되는 함수
를 의미 cf. 절차지향 프로그래밍이라는 말은 존재하지 않는다.
순차적 vs 절차적
goto문이 범람했던 순차적 프로그래밍과 달리 절차적 프로그래밍은 [반복될 가능성이 있는 부분]은 [프로시저]로 쪼개고, 또한 각각의 [프로시저 안에서 중복되는 부분]은 [for 문]과 같은 반복문으로 구성
절차적 vs 구조적
절차적 프로그래밍이 함수를 기준으로 구분을 짓는다면, 구조적 프로그래밍은 모듈을 기준으로 프로그래밍을 나눈다.
- 일반적으로
모듈
이라는 개념은물리적인 소스파일
을 의미 - 절차적 프로그래밍이 프로시저로 쪼갰다면 그 프로시저를 비슷한 애들끼리 묶어서 소스파일로 묶은 것을 모듈이라고 보는것
절차적 프로그래밍의 문제점
프로시저
는 추상적인 단위- 프로그램에 있어서 물리적인 요소(변수나 상수 등 메모리에 저장되는 값들)을 관리하는 방법에 대한 관리 방법의 부실
가령, 도서관 프로그램 작성시, [책]이라는 자료형이 필요하다. 또한 책에 대한 [함수] 역시 필요할 것이다. 구조적 프로그래밍에서는 이 둘을 따로 생각할 수 밖에 없다. 즉, 책 자료형은 책 자료형이고, 그것을 사용하는 함수는 함수대로 별도로 존재한다. 코드가 길어지면 사용자 입장에서는 소스파일에 묶어 두더라도 그 둘의 연관성을 파악하기에는 어려움이 존재한다. 즉, 책에 대한 자료형과 책에 대한 함수가 물리적으론(기록되는 곳)같이 있을 수(모듈) 있지만 논리적으로는(개념)함께 할 수 없는 구조이기 때문이다. 이를 묶기 위한 새로운 패러다임으로 OOP가 필요했다.
객체 지향 (Object-Oriented) Programming
- 특정 개념의 함수와 자료형을 함께 묶어서 **
객체
**로 관리하는 프로그래밍
객체지향 프로그래밍의 특징
- 모든 객체는 내부에 자료형(Field)와 함수(Method)가 존재한다.
- 가능한 모든 물리적, 논리적 요소들을
객체
로 만드려는 프로그래밍책이라는 자료를 객체 모델로 만든다면 그 책의 쪽수나,이름과 같은 자료형 뿐만 아니라, 책을 읽기, 책을 만들기 등의 함수들 역시 "책"이라는 객체로 묶어 놓는 것
- 객체는 다른 객체로부터 높은 수준의
독립성
을 보장한다. - 객체의
은닉화
|캡슐화
|다형성
|상속
이 추가됨으로써 보다 강력하게 진화
반응형 (Reactive) Programming
함수형 (Functional) Programming
reference
출처 - 프로그래밍-패러다임순차적비구조적절차적구조적객체지향적-프로그래밍
함수
함수 (in Mathematic)
- 입력과 출력이 명확
- 정의역(X집합)에서 치역(공역의 부분집합)으로 변환되기 위한 과정
순수함수(pure function)
: input -> f(x) -> output의 결과가 명확
함수 (in Programming)
순수함수(pure function)
를 포함- 입력이 없거나, 출력이 없을 수 있음
- 과거에는 1)에 해당하는 것을
함수
, 2)에 해당하는 것을프로시저
로 정의하였음 - 근래에는 2)도 함수로 총칭.
- 함수형 프로그래밍은 1)과 같이
input/output 을 명시
하는 것이 원칙
객체지향(Object Oriented) Programming
출처 -[프로그래밍 패러다임]순차적(비구조적),절차적(구조적),객체지향적 프로그래밍
추상화(Abstraction)
추상 : 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용.
추상화 : 실세계의 복잡한 상황을 간결하고 명확하게 단순화/간추리기/일반화/개념화
`복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것`
추상화의 방법
구체적인 사항은 되도록 생략하고 핵심이 되는 요소/원리 만을 추구
즉, 불필요한 세부사항을 제거하여 복잡도를 낮추는 것
추상화의 예 : OOP의 상속, 인터페이스, DB의 모델링, 클래스
reference
일반화(Generalization)
** Generalization **
2개 이상의 클래스들로부터 공통적인 특징(Shared characteristics)들을 추출하고, 그것들을 일반화된 상위 클래스로 결합하는 과정.
공통적인 특징(Shared characteristics)은 속성(attributes), 연관(associations), 혹은 메서드(methods)가 될 수 있다.
reference
출처 - Generalization, Specialization, and Inheritance
함수(Function)
- 이미지 출처 : https://img1.daumcdn.net
Parameter vs Argument
Parameter(매개변수)와 Argument(인자)를 헷갈리는 사람이 많다.
- Parameter
int fn(int x, double y)
{
//내용.
}
에서 x와 y.
즉, 외부에서 값을 전달받는 변수가 parameter이다.
- Argument
fn(1, 2.3);
에서 1과 2.3.
즉, 전달되는 값이 argument이다.
다시 정리!!
Parameter = 함수 선언시 변수 이름.
Argument = 함수 호출시 전달되는 값.
reference
타입(Type)
프로그램 data는 데이터 타입에 의해 분류된다.
[definition 1] Data Type
: a set of values. 프로그램의 data의 범주(카테고리)를 의미.[definition 2] Data Type
: value의 특정한 properties에 의한연산의 집합 a set of operation
이 가능한 값들의 집합- 데이터 타입에 따라
의미
|연산
|저장방식
이 달라질 수 있다.
Type of Data Types
- Predefined Data Types (primitive types) 프로그램에서 정의한 데이터 타입. Int, String, Character, Collections...
- User Defined Data Types 사용자가 정의한 데이터 타입. Class, Structure, Enum ...
타입
이 정해지면... -> 범위에 대한 정의
가 필요
- 범위가 다른 것을 같은 타입으로 정할 수 없다.
정적 타이핑 vs 동적 타이핑.
타입(Type, 자료형)을 체크해주는 것을 나누어 설명한 것이다..
정적(Static) 타이핑 - 컴파일 시간에 미리 체크한다.
동적(Dynamic) 타이핑 - 런타임(실행시간)에 체크한다.
C, Java가 정적 타입 체크의 대표적인 예라 할 수 있으며,
Python, Javascript, Lisp는 동적 타입 체크를 한다고 볼 수 있다.
컴파일 언어는 정적 바인딩, 스크립트 언어는 동적 바인딩이라 추측하면 대부분 맞는다고 보면 된다.
정적 타입 언어는 컴파일 시간에 검사를 하므로, 실행시 성능이 올라가고 미리 버그를 잡을 확률 또한 올라간다.
동적 타입 언어의 경우 런타임 때까지 결정을 미루는 것으로, 유연함과 편리성이 보장된다.
즉,
정적 타입 언어는 조금 불편하지만 확실하게!!
동적 타입 언어는 나중은 몰라도 지금 편리하게!!
라 할 수 있다.
요런 특징때문에 동적 타입 언어는 간단히, 빨리 코드를 작성해야 할 때는 좋지만
규모가 커지게 되면 어디선가 에러가 터지는 경우가 생길 가능성이 높다.
이를 보완할 수 있는 것이 점진적 타이핑(Gradual Typing)이다.
점진적 타이핑은 일부 변수와 표현식은 정적으로, 또 유형이 정해지지 않은 것들은 동적으로 검사를 할 수 있게 한 것이다.
대표적인 예가 Javascript의 단점을 보완하기 위해 나온 Typescript다.
reference
cf
- Data : 여러 수치, 자료들이 모여있는 것
- infomation : 여러 Data 중에서 의미있는 Data를 추출/가공한 것
컴퓨터 구성요소 (cs23 참고)
``
프로그램 구성요소
1차적으로 3단계로 구분
입력(input)
|처리(process)
결과(output)
2차적으로 5단계로 구분
입력(input)
|처리(process)
| ★처리된 데이터를 [저장]
★ | ★출력을 위한 형식 지정
★ |결과(output)
- [저장] : 내부적으로 해당 데이터가
어떠한 데이터 구조를 가지고 있어야 할지를 규정
한다.
... n차적으로 단계 추가 -- 추상화 과정 필요
입력(input)
| ★입력에 대한 검증
★ |처리(process)
| ★처리결과에 대한 유효성 검증
★|처리된 데이터를 저장
|출력을 위한 형식 지정
| ★출력 오류 테스트
★ |결과(output)
함수
의 그림과 크게 다르지 않다.
프로그램 설계
``