[프로그래밍 언어론]프로그래밍 관련 용어 정리
프로그래밍 언어론 강의에서 중요한 용어들 쪽지 시험을 친다고 해서 정리를 해봤어요. 위키백과랑 ChatGPT를 사용해서 각 용어들에 대한 정의와 개념을 찾아봤어요!
Platform이란?
Platform의 개념
특정 하드웨어나 소프트웨어를 기반으로 하는, 다양한 응용 프로그램을 개발 및 실행할 수 있는 환경이다. 플랫폼 위에서 개발하고 실행하는데 필요한 API
, 프레임워크
, 라이브러리
, 개발 도구
등을 제공한다.
일반 응용프로그램과의 차이점
일반 응용프로그램은 독자적인 프로그램으로, 특정한 생태계에 종속되지 않은 채 자신의 목적에 맞는 하드웨어, 소프트웨어 환경에서 실행된다. 반면, 플랫폼에서의 응용 프로그램은 플랫폼이 제공하는 api, 프레임워크를 활용하게 되며(e.g. 스마트폰의 카메라 사용 api) 플랫폼 위에서 개발된다.
대표적인 smartphone platform 의 특징
Android
와 IOS
가 있다. Android
는 Kotlin
을 기반으로 하여 Android SDK
에서 제공하는 API
를 사용하여 개발된다. Kotlin
외에 기존의 Java
또한 사용 가능하며, Android NDK
를 통해 C/C++
코드를 사용하여 개발할 수도 있다.
IOS
는 Objective-C
와 Swift
를 기반으로 개발되며 C
, C++
, Java
같은 언어와의 호환성도 제공된다.
또한, 모두 네이티브 애플리케이션뿐만 아니라 웹 애플리케이션을 지원하여 HTML
, CSS
, JavaScript
를 사용하는 웹 기술로도 개발이 가능하다.
Kotlin의 특징
코틀린은 기존 자바 언어의 문제점을 해결하면서도 자바와 상호운용성을 보장하는 언어로 개발되었다. 예를 들어 널포인터 예외(Null Pointer Exception)
과 같은 자바의 보편적인 문제점을 최소화하기 위해 널 안정성(Null safety)
를 지원하고 있다.
코틀린은 공식적으로 안드로이드 애플리케이션 개발을 위한 언어로 채택되었고 백엔드 개발에도 사용되고 있다. JVM(Java Virtual Machine)
에서 동작하며 자바와의 상호 운용성이 보장되기 때문에 기존 자바 코드와 쉽게 혼용가능하여 많은 개발자가 코틀린을 선택하고 있다.
C++의 특징
memory maps
빠르고 효율적인 입출력 작업을 위해, 파일에 대한 입출력 작업을 메모리에 직접 접근가능 하도록, 파일을 메모리 주소 공간으로 매핑하는 기술을 의미한다.
forward declaration
C/C++
에서 사용되는 용어로 C/C++
에서는 함수나 클래스를 사용하기 전에 해당 함수나 클래스가 선언이 되어 있어야한다. 함수나 클래스의 구현 세부사항이 아직 정해지지 않은 경우, 개발자는 함수나 클래스의 선언부만 먼저 작성하고 나중에 구현부를 작성할 수 있다.
javascript
의 Hoisting
이 이것을 암묵적으로 수행하는 것이다.
smart pointer
포인터와 유사하지만 메모리 관리를 자동화하여 수명이 다한 메모리를 자동으로 제거해준다. 별로의 delete
가 필요 없다.
uniform initializer
객체를 초기화하는 새로운 방법으로 기존 초기화를 위해 ( )
를 사용하였지만 이는 함수 call
과 형태가 같아 객체가 생성되지 않는 경우가 존재하였다. 그렇기에 { }
, uniform initializer
, 를 도입하였다.
variadic template
가변 인자 템플릿으로 함수를 정의할 때 인자의 개수와 상관없이 정의 가능하고 인자들을 처리할 수 있다.
Orthogonality가 C언어에서 발생시킬 수 있는 오류
- Assignment state는
rvalue
가lvalue
로 대입되고lvalue
가expression
으로 되기 때문에 조건문에서==
대신=
을 사용했을 때 오류로 인식하지 못한다. - 배열은 주소를 저장하고 있기 때문에 함수를 호출할 때, 배열은 참조전달을 하고 나머지 는 값 전달을 한다.
RUST와 ownership
메모리 안정성을 보장하기 위한 새로운 개념이다. RUST 에는 모든 값이 소유자
가 있으며, 각 값은 오직 하나의 소유자
만 가질 수 있다. 소유자
는 메모리 공간을 소유하고, 해당 메모리 공간이 필요 없어지면 자동으로 해제한다. 즉, 소유자
가 스코프를 벗어나 소멸되며 해당 메모리는 자동으로 해제가 된다.
또한, RUST
에는 참조자
라는 개념을 사용하여 소유권을 이전하지 않고 메모리를 참조할 수 있도록 하였다. 따라서 소유자
가 메모리를 계속 소유할 수 있으면서 다른 코드에서 해당 메모리를 참조할 수 있도록 하였다. 이런 개념으로 인해 RUST
는 안전하고 효율적인 메모리 관리를 달성하였다.
RUST의 병렬처리 모델 Actor mode
Actor model
에서는 애플리케이션을 작은 단위인 Actor
로 분할하여 처리한다. 액터는 각자 상태를 가지고 있고 다른 액터와 상호작용을 하기 위해서는 오직 메시지를 보내는 것만이 가능하다. 액터는 다른 액터와 메시지를 주고받으며 작업을 처리하게 된다.
Actor model
은 상태를 공유하는 전통적인 방식보다 안정성과 성능이 뛰어나다. 공유 상태에서 발생하는 락과 경쟁 조건 등의 문제에서 벗어나 RUST
의 소유권 규칙
과 결합해 메모리 안전성
을 보장한다.
Agent-oriented programming
에이전트, 자율적으로 행동하는 소프트웨어 개체, 간의 상호작용을 통해 특정 작업을 수행
❓에이전트란❓인간이나 조직, 컴퓨터 시스템 등을 대표하는 추상적인 개념. 상태, 행동, 지식, 환경 등을 가진다.
예를 들어, 스마트 홈 시스템🏠에서 센서, 액추에이터(작동기), 스마트 기기 등이 각각의 에이전트가 되어 이들의 상호작용을 통해 스마트 홈을 제어한다.
Event-driven programming
프로그래밍 패러다임 중 하나.
이벤트가 발생할 때, 이벤트 핸들러를 실행하여 이벤트를 처리하는 방식으로 동작한다.
웹에서 javascript
가 이벤트를 이벤트 핸들러를 통해 처리하는 걸 떠올릴 수 있다.
Cloud computing
인터넷을 통해 컴퓨팅 서비스를 제공하는 것.
- IaaS(Infrastructure as a Service)
- 가상화된 컴퓨팅 리소스(서버, 스토리지, 네트워크 등)을 제공
- 개발자가 자유롭게 사용할 수 있는 서버를 받는다.
AWS EC2
,Microsoft Azure
등
- PaaS(Platform as a Service)
- 개발을 위한 플랫폼(개발 도구, 미들웨어, 런타임 등)을 제공
- 적절한 플랫폼을 선택하여 제공받으면 개발자는 코드를 개발만 하면 배포 가능
Heroku
,Microsoft Azure App Service
등
- SaaS(Software as a Service)
- 소프트웨어 서비스를 제공
- 개발이나 배포의 개념이 아님(사용자가 필요한 서비스를 사용하면 된다.)
Dropbox
,Google Workspace
등
SaaS(software as a Service), ASP의 차이점
- ASP
ASP
(Application Service Provider)는SaaS
의 이전 모델이다.- 소프트웨어 회사가 애플리케이션을 호스팅하고 유지보수하며 고객에게 서비스를 제공
- 고객은
ASP
에 라이선스 비용을 지불하고 애플리케이션을 사용
- SaaS
ASP
에서 진화한 형태ASP
에서는 각 고객에 맞춰 프로그램을 커스터마이징을 해야했지만, 하나의 플랫폼에서 다양한 형식의 서비스를 골라 이용가능
HTML 5.0
Semantic markup(<div>
대신 <header>
, <nav>
, <footer>
같이 표현 가능), Multimedia(Audio, video api), Canvas 등을 지원하여 웹 페이지를 보다 간결하고 의미론적으로 표현할 수 있다.
CSS 2.0
선택자
의 다양성이 향상되었으며, box model(padding, border, margin),
positioning` 등이 도입되어 스타일을 더욱 정교하게 조절할 수 있게 되었다.
빅데이터
기존 데이터베이스 관리 시스템으로 처리할 수 없는 대규모의, 다양한 유형의 데이터를 처리하는 기술
다음의 3가지 주요 특징을 가진다.
- 다양한 유형의 데이터(정형 데이터 외에 비정형 데이터도 포함)
- 대규모 데이터 처리(대용량 데이터 - 분산 컴퓨팅, 병렬 처리 등의 기술 필요)
- 빠른 데이터 처리(인터넷 검색, 금융 거래 등 실시간 처리가 필요함)
Web-Service
인터넷 상에서 서로 다른 컴퓨터 간에 데이터를 교환하기 위한 시스템
Web of Things
IoT
(Internet of Things), 사물인터넷, 기술과 월드 와이드 웹(WWW
) 기술을 결합하여 웹 기술(HTTP 통신 등)을 이용한 장치 간 상호작용 및 데이터 공유를 가능하게 하는 기술이다.
Deep learning
인공 신경망(Artificial Neural Network)를 이용한 머신러닝의 한 분야로 대량의 데이터를 학습하여 인식, 예측, 분류 등의 작업을 수행하는 인공지능 기술이다.
딥러닝은 입력층, 은닉층, 출력층으로 구성되어 있고, 이때 은닉층이 깊게 쌓여 있기 때문에 deep learning
이라고 부른다.
Lambda calculus
계산 이론과 수학의 일부분을 설명하기 만들어진 언어로 함수형 프로그래밍의 기초형이다. 모든 함수는 수학적 함수로 간주하여 처리한다. 함수는 람다 표현식(lambda expression)
으로 표현되며, 이를 사용하여 함수를 정의하고 조합할 수 있다.
tables in Relational DB
관계형 Database에서의 데이터를 저장하기 위한 자료구조이다. row
는 각 테이블의 레코드
이고 column
이 속성
을 의미한다.
Data frames of R
R에서 데이터 프레임은 표 형태로 데이터를 저장한다. 각 열은 동일한 데이터 타입을 가지고, 각 행은 서로 다른 관측값을 저장한다. 데이터베이스와 유사한 구조로 이루어져 있다.
White spaces
문자열 내부의 공백, 탭, 줄바꿈 등과 같은 모든 비인쇄 문자(non-printing character)들을 의미
Hoisting in JavaScript
변수나 함수를 선언한 위치와 상관없이 해당 스코프
의 최상위로 끌어 올리는 것이다. 선언이 뒤에서 되는 변수도 먼저 사용이 가능하다. 이를 피하기 위해선 var
이 아닌 let
, const
의 키워드를 사용하는 것이 추천된다.
Duck typing
객체가 사용되는 적절한 메서드나 속성의 존재에 따라 객체의 타입을 판단하는 방식이다. 객체의 타입을 미리 선언하거나 검사하지않고, 객체가 필요한 메서드나 속성을 가지고 있는지만 검사하기 때문에 유연한 코드가 작성가능하다. 예를 들면 Python
에서는 리스트, 튜플, 딕셔너리 모두 iterable
하여 for문에서 동일하게 다룰 수 있다.
Type system
새로 만든 name
에 대해 어떤 type
인지 어떤 역할을 하는지 속성을 부여하는 것을 의미한다.
name
과 관련된 설정
- Name의 최대 길이
- case sensitvity
- special word
- keyword
- reserved word
keyword vs reserved word
keyword
는 특정 문맥에서만 의미를 가지는 if
, else
, int
, float
같은 단어를 의미한다. reserved word
는 예약어로 시스템에서 사전에 name
으로 사용할 수 없도록 막은, 시스템이 예약한 단어이다. 키워드가 예약어가 아니라면 가독성이 떨어지는 일이 발생한다.
IF THEN THEN THEN = ELSE ELSE ELSE = ELSE;
if 변수 THEN 변수 = 변수 ELSE 변수 = 변수;
THEN과 ELSE가 예약어로 되어 있지 않아 변수로 사용가능하고 결과적으로 가독성이 매우 나빠졌다.
binding
program element에 속성 또는 수행에 필요한 요소(형(type), 기억장소(memory) 등)를 연결하는 것.
- static binding
- run-time 전에 처음 발생
- 프로그램 실행 중 binding 된 속성이 변하지 않는다.
- 저장되는 value는 binding과 상관이 없어 바꿀 수 있다.(constant와 다름)
- heap에 저장
- dynamic binding
- run-time 중에 처음 발생
- 실행 도중 binding된 속성이 변할 수 있다.
- stack에 저장
Type compatibility
두 변수가 동일한 구조를 갖는 경우 두 변수는 호환되는 유형을 가진다.
typedef
를 통해 같은 구조의 이름이 다른 타입을 생성하였을 때, 자동 호환이 된다.
C언어의 경우
type compatibility가 record(struct) 외에 지켜진다. record는 저장되는 구조를 분석하여 호환시키기 어려워 지키지 않는다.
Scope
변수가 살아있는 구간.
- static scope
하위 레벨로 갔을 때 상위 레벨의 변수를 전부 유지 - dynamic scope
하위 레벨로 갔을 때 그 구간에서 새로운scope
가 생겼다가 돌아왔을 때 원래scope
로 복구(e.g. 함수 call sub routine)
댓글남기기