본문 바로가기
개발공부/한눈에 보기 👀

프로그래밍 관련 용어 정리

by 개발자D 2024. 12. 26.

프로그래밍 관련 용어 정리

 

프로그래밍을 처음공부할 때 모르는 용어가 너무 많아서 힘들었습니다. 같은 용어이지만 다르게 해석될 때도 있어서 난감했는데요.  저처럼 고생하지 않도록 지금까지 공부하면서 정리했던 용어들을 모두 적어봤습니다. 공부하면서 옆에 두고 사용할 수 있는 단어장이 됐으면 좋겠습니다. 

개발

💛 소스코드 : 컴퓨터가 이해하고 실행할 수 있도록 작성된 명령어들의 모음

💛 코딩 : 컴퓨터가 수행할 작업을 명령어로 작성하는 작업 = 소스코드를 작성하는 작업

💛 프로그래밍 : 작업 수행의 절차와 논리를 설계하여 소프트웨어를 만드는 과정

  • 💛 절차지향 프로그래밍 : 데이터를 기반으로 명령을 순차적으로 실행하는 방식
  • 💛 함수형 프로그래밍 : 변수 사용을 줄여 코드의 간결성과 안정성을 높이는 방식
  • 💛 객체지향 프로그래밍 : 프로그램을 객체 단위로 구성하여 설계하는 방식
    • 💛 주요 개념 : 상속, 다형성, 캡슐화
  • 💛 방어적 프로그래밍 : 예상 가능한 모든 상황에 대비해 설계하는 프로그래밍 방식
  • 💛 공격적 프로그래밍 : 예기치 않은 상황에서 오류를 발생시켜 수정이 필요함을 알리는 방식

💛 개발 : 소프트웨어를 설계, 구현, 운영, 유지보수를 포함한 전체 과정

  1. 요구 사항 분석
  2. 시스템 명세
  3. 구조 설계
  4. 구현
  5. 테스트
  6. 유지 보수

🧡 프로그램 : 특정 목적을 수행하기 위해 작성된 명령어들의 집합

💛 소프트웨어 : 실행가능한 프로그램, 필요한 라이브러리, 데이터의 집합

💛 라이브러리 : 여러 프로그램에서 재사용할 수 있는 함수와 데이터의 집합

💛 프레임 워크 : 프로그램 개발을 쉽게 하기 위한 구조와 도구 모음

💛 패키지 : 코드를 배포할 수 있도록 묶은 파일 집합

💛 패키지 매니저 : 패키지를 설치하고 관리하는 도구 (예: 파이썬의 pip, 자바의 Gradle)

💛 데이터 : 의미 없이 수집된 원초적인 자료

💛 정보 : 데이터에 의미를 부여해 활용 가능하게 만든 것

💛 알고리즘 : 문제 해결을 위한 단계적 절차

🤎  API(Application Programming Interface) :

1. 프로그램 간 상호작용을 가능하게 하는 약속과 규칙의 모음(*인터페이스)

  • 🤎  REST API (전 세계적으로 통용되는 양식)

2. 프로그램 개발에 자주 사용되는 클래스 및 ^인터페이스의 모음

  • 🤎 Windows API, 단일 유닉스 규격, JavaAPI, 웹 API, Python의 표준 라이브러리.

💛 *인터페이스 : 서로 다른 시스템 간 데이터와 명령어를 주고받기 위한 접점

💛 ^인터페이스 : 특정 객체 지향 언어에서 사용되는 구현 명세 개념

💛 프로그래밍 언어 : 컴퓨터가 이해할 수 있는 형식으로 명령을 작성하기 위한 도구

  • 💛 컴파일 언어 : 프로그래밍을 마친 뒤 코드 전체를 미리 기계어로 번역한 다음 실행 파일을 생성해서 실행하는 언어 (예: C)
  • 💛 인터프리터 언어 : 작성된 코드를 한 줄 한 줄 통역하면서 실행되는 언어 (예: JavaScript, Python)
  • 💛 하이브리드 언어 : 컴파일 언어와 인터프리터 언어의 특성을 동시에 가지는 언어 (예: Java, Kotlin)
  • 💛 매니지드 언어 : 메모리를 자동으로 관리하는 언어
  • 💛 언매니지드 언어 : 메모리를 개발자가 직접 관리해야 하는 언어

💛 통합 개발 환경 IDE(Integrated Development Environment) : 소스 코드 작성, 실행, 디버깅 등을 지원하는 개발 도구

💛 런타임 환경 : 특정 언어로 작성된 프로그램이 실행되는 환경

💛 소프트웨어 개발 키트 SDK (Software Development Kit) : 소프트웨어 개발에 필요한 도구와 라이브러리 모음 (예: Java의 JDK)

💛 디버깅 : 프로그램의 오류를 찾아 수정하는 과정

💛 컴파일 : 소스코드를 실행 가능한 형태로 변환하는 과정

💛 빌드 : 실행 파일을 생성하거나 배포 가능한 형태로 만드는 과정

💛 배포 : 완성된 소프트웨어를 사용자에게 제공하는 작업

💛 유지보수 : 소프트웨어 배포 후 발생하는 문제를 해결하고 개선하는 작업

💛 리팩토링 : 코드의 동작은 유지하면서 가독성과 효율성을 개선하는 작업

💛 코드 리뷰 : 작성된 코드를 점검하고 피드백을 주고받는 과정

💛 문서화 : 소프트웨어와 관련 정보를 정리하여 기록하는 작업

💛 폭포수 모델 : 소프트웨어 개발 과정에서 각 단계를 순차적으로 진행하는 전통적인 개발 방식

💛 애자일 : 소프트웨어 개발 및 프로젝트 관리를 위한 유연하고 반복적인 접근 방식

프로그램

🧡 문장 : 실행할 수 있는 코드의 최소 단위

🧡 프로그램 : 특정 목적을 수행하기 위해 작성된 명령어들의 집합 = 문장의 집합

🧡 프로세스 : 메인 메모리로 올라와 실행 중인 프로그램으로 프로세스마다 각자의 메모리를 차지합니다. 

🧡 컨텍스트 스위칭 : CPU가 작업 중인 프로세스, 스레드를 전환할 때 발생하는 작업

🧡 멀티 프로세싱 : 여러 프로세스를 동시에 실행하는 작업 방식

  • 🧡 병렬처리 : 여러 코어가 각기 다른 작업을 동시에 실행하는 방식
  • 🧡 병행처리 : 하나의 코어가 여러 작업을 번갈아 실행하는 방식

🧡 스레드 : 프로세스 내부에서 실행되는 작업의 최소 단위로 스레드는 프로세스의 메모리 공간을 공유합니다.

🧡 모듈 : 프로그램을 구성하는 논리적 단위

🧡 엔트리 포인트 : 프로그래밍 실행이 시작되는 지점

데이터

💚 데이터 센터 : 대규모 서버를 운영하고 관리하는 시설

💚 서버 호스팅 : 서버를 대여하거나 관리해 주는 서비스

💚 온프레미스 : 회사 내에서 자체적으로 서버를 운영하는 방식

💚 클라우드 컴퓨팅 : 인터넷을 통해 서버와 소프트웨어 등을 제공하는 서비스

  • 💚 IaaS : 가상 서버와 같은 인프라를 대여하는 서비스
  • 💚 PaaS : 애플리케이션 개발 환경을 제공하는 서비스
  • 💚 SaaS : 완성된 소프트웨어를 제공하는 서비스

💚 데이터 베이스 : 체계적으로 정리된 데이터의 집합

💚 DBMS : 데이터베이스 관리 시스템

  • 💚 RDBMS : 데이터를 표 형식으로 관리하는 시스템
  • 💚 NOSQL : 비관계형 데이터베이스 시스템

💚 조인 : RDBMS에서 여러 테이블의 데이터를 결합해 조회하는 기능

💚 스트림 : 외부와 데이터를 주고받는 통신 경로

💚 버퍼 : 데이터를 일시적으로 저장하는 공간

💙 반응형 웹 : 화면 크기에 맞게 자동으로 조정되는 웹사이트

💙 적응형 웹 : PC용과 모바일용이 별도로 제작된 웹사이트

💙 쿠키 : 사용자 정보를 브라우저에 저장하여 편리함을 제공하는 데이터

💙 세션 : 유효성을 검증하기 위해 서버와 연결된 사용자 정보를 저장

💙 토큰 : 서버에서 발급하는 사용자 인증 정보

💙 캐시 : 자주 사용하는 데이터를 저장해 두어 빠르게 접근하는 기술

OS

💜 운영체제(OS) : 컴퓨터 하드웨어와 소프트웨어를 관리하고 조정하는 시스템 소프트웨어

💜 펌웨어 : 운영체제의 일종으로 하드웨어의 동작을 제어하는 간단한 소프트웨어

💜 앱에서의 운영체제(OS)

  • 💜 네이티브 앱 : 특정 운영체제를 기반으로 개발된 앱
  • 💜 크로스 플랫폼 앱 : 하나의 코드베이스로 다양한 운영체제에서 실행 가능하도록 개발된 앱
  • 💜 하이브리드 앱 : 네이티브 앱과 웹의 특징을 혼합한 애플리케이션
  • 💜 웹 앱 : 앱처럼 보이는 웹사이트
  • 💜 PWA(Progressive Web Apps) : 설치가 가능한 웹 앱, 하이브리드 앱보다 네이티브 기능 접근에 제한적

API

🤎  API :

1. 프로그램 간 상호작용을 가능하게 하는 약속과 규칙의 모음

  • 🤎  REST API : 전 세계적으로 통용되는 양식

2. 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음

  • 🤎 Windows API, 단일 유닉스 규격, JavaAPI, 웹 API 등

🤎 Open API : 누구나 접근하고 사용할 수 있도록 공개된 API. 

🤎 정보 표현, 사용 방법

  • 🤎 XML : 태그 기반의 데이터 표현 방식
  • 🤎 JSON : 가볍게 읽기 쉬운 데이터 표현 방식
  • 🤎 AJAX : 자바스크립트를 이용해 비동기 방식으로 데이터를 교환하는 기술 

🤎 IP : 인터넷상에서 데이터를 주고받기 위한 통신 규약

🤎 IP 주소 : 네트워크에서 통신을 위해 장치를 식별하는 고유 번호

🤎 도메인 : 사람이 기억하기 쉽도록 IP 주소를 쉬운 문자 주소에 연결한 것

🤎 DNS : 도메인과 IP 주소를 매핑해 주는 시스템

🤎 URI : 인터넷상의 자원을 식별하기 위한 고유한 식별자

🤎 URL : 인터넷상의 자원의 위치를 나타내는 식별자

🤎 HTTP : 클라이언트의 요청과 서버의 응답으로 이뤄지는 통신규약

하드웨어

🤍 CPU : 컴퓨터의 중앙 처리 장치로, 저장된 프로그램을 불러와 기계어 명령을 해석하고 실행하는 역할을 담당

  • 🤍 코어 : CPU의 핵심 처리 단위로, 코어의 수가 많을수록 동시에 여러 작업(멀티태스킹)을 처리할 수 있음
  • 🤍 스레드 : CPU가 독립적을 실행할 수 있는 작업의 최소 단위
  •     ⚠ 🧡 프로그램의 스레드와 다릅니다.
  •     ⚠ 이 글에는 없지만 프로그래밍 언어의 스레드와도 다릅니다.
  • 🤍 클럭 : CPU 코어가 작동하는 속도를 나타내며, 클럭 속도가 높을수록 작업 속도가 빠름
  • 🤍 캐시 : CPU에 내장된 소형 고속 메모리로, 자주 사용하는 데이터를 임시로 저장하여 처리 속도를 향상함
  •     ⚠ 💙 웹의 캐시와 다릅니다.

🤍 메모리 : 데이터를 저장하고 필요할 때 CPU에 제공하는 공간

  • 🤍 주 기억 장치 (RAM) : 
    • 속도가 빠르고 CPU가 직접 접근 가능한 메모리
    • 용량이 적고 가격이 높음
    • 휘발성 메모리로 전원이 꺼지면 데이터가 사라짐
  • 🤍 보조 기억 장치 (HDD, SSD) :
    • 속도가 느리고 CPU가 직접 접근하지 않음
    • 용량이 크고 가격이 낮음
    • 뷔휘발성 메모리로 전원이 꺼져도 데이터가 유지됨

코드

🖤 표현식 : 값을 만들어 내는 간단한 코드

🖤 키워드 / 예약어 : 특별한 의미가 부여된 단어로, 이미 특정 용도로 사용 중인 단어

🖤 식별자 : 변수나 함수의 이름

  • 🖤 스네이크 케이스 : snake_case
  • 🖤 캐멀 케이스 : camelCase
  • 🖤 파스칼 케이스 : PascalCase

🖤 변수 : 값을 저장하기 위해 사용하는 메모리 공간의 이름

  • 🖤 선언 : 식별자나 데이터 타입을 정의하는 것
  • 🖤 할당 : 변수에 값을 저장하는 것
    • 🖤 초기값 : 변수를 선언하고 처음 저장되는 값
    • 🖤 초기화 : 변수를 선언하고 초기값을 할당하는 행위
  • 🖤 참조 : 변수에 접근하는 것

🖤 상수 : 한 번 저장하면 값을 변경할 수 없는 변수

🖤 리터럴 : 소스 코드에 직접 입력된 값

🖤 하드코딩 : 코드에 직접 값이나 설정을 고정적으로 입력하는 방식

🖤 스파게티 코드 : 구조화되지 않고 복잡하게 얽혀 있는 코드

🖤 보일러 플레이트 코드 : 코드 작성 시 반복적으로 작성해야 하는 기본 코드 구조

🖤 객체 : 데이터와 그 데이터를 조작하는 메서드가 결합된 프로그래밍 구성 요소

🖤 null : 참조 타입 변수가 아무 객체도 참조하지 않음을 나타내는 값

🖤 메서드 시그니처 : 메서드 이름, 매개변수 타입을 조합한 형태

🖤 아스키코드 :  영어 알파벳, 숫자, 특수 문자를 포함한 128개의 문자 집합을 정의한 표준 코드

🖤 유니코드 : 세계 각국의 문자를 코드값으로 매핑한 국제 표준 규약

🖤 주석 : 코드에 대한 설명이나 참고 내용을 추가하기 위한 비실행 텍스트

🖤 trailing comma : 마지막 파라미터에 콤마 ‘,’를 추가하여 코드를 추가할 때 가독성을 높이고 변경사항 추적을 용이하게 만듦

 

기타

💘 스택 : 함수 호출 정보, 매개변수, 지역 변수, 리턴 주소와 같은 일시적인 실행 데이터가 저장되는 공간

💘 힙 : 객체나 배열과 같은 동적 메모리 할당을 위한 공간

💘 오버로딩 : 같은 이름의 메서드를 매개 변수 타입이나 개수를 다르게 정의하는 것

💘 오버라이딩 : 부모 클래스의 메서드를 자식 클래스에서 재정의하여 동작을 변경하는 것

💘 인자 : 호출부에서 함수에 전달하는 값들을 의미. 실제 값을 가짐.

💘 매개변수 / 파라미터 : 선언부에서 함수에 전달받는 값들을 의미. 타입과 이름이 지정됨.

💘 값에 의한 호출 :  함수에 매개변수의 복사본을 전달하여 원본에는 영향을 주지 않는 호출 방식

💘 참조에 의한 호출 : 함수에 매개변수의 주소값을 전달하여 원본에 영향을 줄 수 있는 호출 방식

💘 깊은 복사 : 데이터를 새로운 객체에 완전히 복사하여 원본과 복사본이 독립적으로 동작하도록 만드는 것

💘 얕은 복사 :  데이터를 참조만 복사하여 원본과 복사본이 동일한 메모리를 공유하도록 만드는 것

💘 비파괴적 함수 : 원본 데이터를 변경하지 않고 새로운 데이터를 반환하는 함수

💘 파괴적 함수 : 원본 데이터를 직접 변경하는 함수

💘 콜백 함수 : 특정 이벤트가 있을 때 호출되는 함수

💘 오버헤드 : 작업 수행을 위해 추가적으로 소요되는 시간, 메모리, 리소스 등의 비용

💘 유닉스 타임 : 1970년 1월 1일 0시 0분 0초(세계 표준시, UTC)부터 경과한 시간을 초 단위로 나타낸 값

💘 인코딩 : 데이터를 특정 형식으로 변환하여 저장하거나 전송할 수 있도록 만드는 과정

💘 디코딩 : 인코딩 된 데이터를 원래의 형태로 복원하는 과정

💘 텍스트 데이터 : 사람이 읽을 수 있는 문자 기반 데이터로, 용량이 크지만 쉽게 편집 가능하며 주로 문서와 설정 파일에서 사용됨 

  • 💘 인코딩 방법 : ASCII, UTF-8, UTF-16, EUC-KR, Shift_JIS

💘 바이너리 데이터 : 컴퓨터가 처리하는 2진수 형태의 데이터로, 용량이 적고 효율적이며 주로 이미지, 동영상, 실행 파일 등에 사용됨

  • 💘 인코딩 방법 : JPEG, PNG, GIF