cpp glossary

Bcow·2020년 9월 21일
0

C++

목록 보기
1/1

// : 한 줄 짜리 주석. 약간 다른 말로는, C++ 스타일 주석. C99이후부터는 C에서도 사용 가능

<< : iostream의 input/output operator이라는데... 뉴비라서 아직 잘 모르겠음

C++ : 여러 가지 프로그래밍 언어에서 활용할 수 있는 프로그래밍 언어. 내 생각에는... C에다가 좀 더 모던하고 복잡한 것들을 끼얹은 무언가. c with class로 시작했다는데 지금은 너무 멀리 온 듯.

주석 : 메모, 접근금지, TODO, 간단한 명세, 그림그리기 등등 다양한 용도로 활용 가능. 어찌되었든간에 근본은 왜 이런 짓을 했는지 의도를 설명하는 것.

컴파일러 : 내가 짠 코드를 object code로 옮겨 주는 노예이자 프로그래머의 친구. 위키백과 말대로는 translation unit 단위로 object code를 만든다는데 ㅇㅅㅇ.

컴파일 타임 에러 : 컴파일러가 잡아낸 오류. 컴파일 타임 에러를 마주칠 때 마다 컴파일러가 내가 한 병신짓을 잡아 낼만큼 똑똑하다는 사실에 감사하십쇼 휴먼.

cout : c-out. character output stream의 줄임말이래. 아무튼 표준 입출력(정확히는 출력)을 다루는데 사용함. 코테에서 ios::sync_with_stdio(false)은 선택이 아니고 필수.

cin : character input. c-in이라고 읽는다. 표준 입력스트림을 가르킴.
코테에서 cin.tie(nullptr)은 선택이 아니고 필수.

실행 파일 : 실행 가능한 프로그램. 링커가 object file을 링킹해가지고서 실행파일을 만들어줌.

함수 : 순차적으로 실행해야 하는 명령어의 집합.
반환 타입, 이름, 매개변수 목록, 함수 몸체로 구성됨.

논리적으로 구별하고 싶거나 뭐 코드를 깔끔하게 만들고 싶거나 테스트를 편하게 하기 위해서, 혹은 반복되는 코드가 있을 때 함수를 사용한다. 뻔한 얘기지만 뭐... 어째됐든 함수 하나가 한 가지 일만 하는게 제일 깔끔하다.

헤더 : 프로그램에서 사용하는 용어들의 정의를 표현한다...고 책에 나와있기는 한데 ㅇㅅㅇ 뭔가 마음에 안들고...

이게 C언어에서는 declaration들이랑 static lifetime 변수들, inline함수 따위를 싸그리 집어넣은 무언가 ㅇㅅㅇ.
다른 말로 하면, 주로 interface에 해당하는 부분(inline function은 예외)만 담겨 있다. cpp에서는 뭐가 얼마나 다른지 두고 봐야지.

관례상 *.h 형식.

IDE : 통합 개발 환경. 에디터나 디버거같이 개발에 필요한 툴들을 하나로 묶어서 사용하기 편하도록 통합시켜 놓은 것. 복잡한데 편하다

#include : 헤더 파일을 포함시켜서, 안쪽에 있는 것들을 사용 가능하게 만들어 준다.

링커 : object code를 링크해주는 역할. 달리 말하면, object code를 실행 파일로 만들어 준다.

라이브러리 : 다른 사람이 만든 코드. #include 가지고 접근?해서 사용 가능.

main() : C/C++ 프로그램이면 일단 있어야 하는 함수. 프로그램의 시작점을 알린다. 고급지게는 entry point랬나 머 아무튼.

목적 코드(object code) : 컴파일러가 소스 코드를 먹고 내뱉는 것 ... 기계어 형태로 되어있기는 한데 링크하기 전까지는 실행을 못 시키니깐 의미가 없드아.

출력 : 말 그대로 사용자가 알아먹을 수 있도록 출력하는거 아닌가...?

프로그램 : 컴퓨터의 TODO 리스트. 우리가 프로그래밍 해서 만들고 싶은 것.

소스 코드 : 내가 컴퓨터한테 내리는 매우매우 상세한 지시 사항. 이걸 바탕으로 프로그램이 만들어진다.

구문(statement) : 컴퓨터가 수행해야할 특정한 동작을 나타내는 무언가(영문판 위키피디아). 당연하다면 당연한거지만 전처리기 지시어들은 statement에 포함하지 않는다. 전처리기 지시어들은 전처리기가 해야 할 일을 나타내거니깐 ㅇㅅㅇ.

대입 : object에다가 값을 집어넣는 것. initialization이랑은 논리적으로 구분되는게 얘는 타입이나 그런거 없잖어.. 그러니까 int a = 3initialization이고 b = 3 은 그냥 대입이고 그렇겠지.

definition(정의) : declaration(선언) 이후에(초기화인 경우는 동시에) 실제로 메모리에다가 객체를 만들고 값을 때려박는 등 실질적인 일을 하는데에 필요한 정보를 제공한다. declaration(선언)은 그냥 이러한 것을 쓰겠다고 컴파일러에게 알리는 것에 불과함.

operation(연산) : operation(연산)이 그냥operation(연산)이지 뭘... 책에도 자세히는 안나오는 것 같고... 참고로 type마다 수행할 수 있는 연산이 정해져 있다.

operator(연산자) : operation(연산)을 하기 위해서 사용하는 무언가

이런 글이나 이런 글을 보면 완전 딱딱 떨어지지는 않는 것 같다...

오버로딩된 연산자를 쓰는거 아닌 다음에야 함수 호출이랑 연산자 쓰는거랑은 차이가 많이 난다는거 까진 알겠는데... 근데 정확하게 연산자를 뭐라고 정의해야할지는 잘 모르겠다. 몰라 뭐 대충 살자.

연결 : string형 자료 1 + string형 자료 2 하면은 두개가 연결된 값이 결과로 튀어나온당. +를 연산자 오버로딩한 결과물이기는 한디 솔직히 굳이 따로 정리할 이유가 있나 싶당...

initialazation(초기화) : declarationdefinition을 한방에 처리하는 것. 대입이랑은 문법만 비슷해보이고 완전 다르다.

type(타입) : (data) object에다 붙는 속성. 어떤 value(값)를 저장할 수 있는지, 그리고 어떤 연산을 수행할 것인지를 결정한다.

conversion(변환) : 한 type에서 다른 type으로 자료형을 바꾸는 것. 이제 type-safe한 프로그램이랑은 빠이빠이.

당연하다면 당연한거지만 narrow conversion은 데이터 손실의 위험이 있다 ㅇㅅㅇ. initialazation할 때 한정으로 {}(universal and uniform initialization)으로 방지 가능.

type-safe(타입 안정성) : 메우 간단하게 말하면type conversion을 안 하면 되는 것... 그러나 보통은 type-safe를 깨고 이런저런 연산을 하는 경우가 많다.

object(객체) : 데이터를 저장하는데 사용되는 메모리 상의 공간. 일단은 그러하다.

variable(변수) : 이름이 붙여진 object. 아무래도 이게 가장 깔끔한 정의인듯 ㅇㅅㅇ.

abstraction(추상화) : 간단하게 말하면, 알 필요 없는 세부 implementation(구현)을 감추고 interface에 집중하는 것. 보통은 남이 구현해 놓은거 잘 가져다 쓰기만 해도 된다.. 물론 그게 implementation을 몰라도 된다는 말은 아니다...

range-based for loop : 책에는 구간 for문으로 번역됨. 쉽고 간단하게 범위 안의 모든 원소를 순회할 수 있음 ㅇㅅㅇ.

push_back() : 이번 장에서는 std::vector 제일 뒤에다가 원소를 삽입하는 용도로 사용함. 당연히 vector에만 있는거는 아니고...

repetition(반복) : 인간이 제일 싫어하는게 뺑이치는거고 따라서 컴퓨터한테 가장 많이 떠넘기게 되는 것...

자료구조에 포함되는 element에 대해 같은 작업을 반복하는 거를 특별히 iteration이라고 한다. 역주에 따르면 자료구조의 각 데이터를 하나하나 탐색하면서 연산을 수행하는 느낌이 강하다고 한다.

계산 : 극단적으로 말하면, 컴퓨터는 입력 - 계산 - 출력만 한다. 바로 그 계산이다. 좀 고급스럽게 말하면 주어진 입력을 바탕으로 출력을 생성하는 과정 정도로 생각할 수 있다.

conditional statement : 말 그대로 조건문. 조건에 따라 특정 코드를 실행시키거나 건너뛰어서 프로그램의 흐름을 바꿀 수 있다.

rvalue : 우측값. object와 data 중 data에 해당하는 것이다.
int a = 3; 으로 a 변수를 initialize(초기화)하였다고 하자.

이 이후에 a는 object를 가르키는 용도(lvalue)로 쓰일 수도 있고, 값(여기서는 3)을 나타내는 용도(rvalue)로 쓰일 수도 있다.

즉, rvalue, lvalue는 절대적인 속성이 아니라 그때그때 상황에 따라 달라진다.

lvalue : rvalue에서 엥간한거는 다 설명해버려서 할 말이 없다. object를 특정하는 표현이면 전부 lvalue이다.

std::vector : 일단 저어는 윈소의 추가/삭제가 가능한 배열 느낌. 짱 편함... vector 많이 애용해주세요.

member function(멤버 함수) : vector.size()vector.push_back()같은 것들. 더 자세한 내용은 추후에 정리할 예정.

exception(예외) : 오류를 처리하는 방법 중에 하나. 함수 내부에서 에러를 감지하고 예외를 던지면(throw 하면) 밖에서 받아서(catch) 처리한다.

오류를 감지하는 부분과 처리하는 부분을 확실히 분리할 수 있고, 에러를 무시할 수 없도록 하는 것(catch하지 않으면 프로그램이 터진다.)이 장점이다.

성능 상 문제가 좀 있다고 하던데 뭐...정 꼬우면 c처럼 에러코드 쓰십쇼.
아니면 std::optional이나.

assertion : 불변조건 따위가 잘못되었는지 어쨌는지 감지하는 거를 assertion이라고 부른당. C에서 assert() 배웠을때는 이게 몬가 싶었는데 이제 가닥이 잡히는거 같기도 하고.... 아무튼 최종 릴리즈 말고 개발 단계에서 유용하게 써먹는다. 불변조건이 틀려먹으면 역시 로직에 문제가 있는거 아니겠음?

runtime error : 말 그대로 실행해보기 전까지는 알 수 없는 에러. 가장 때려잡기 힘든 에러이다. 배열(아니면 vector) 밖의 요소에 접근을 시도해 보면 바로 경험할 수 있다...

linker error : linker가 보고하는 에러. c/c++은 compilertranslation unit단위로 기계어로 변환(object code말이야)시킨 다음에, linker가 그것들을 결합시키고, 최종적으로 실행 파일을 만든다.

아무튼 linker error는 함수의 중복 정의/ 혹은 정의되지 않은 함수를 사용할 때 일어난다. (다른 경우는 잘 모르겠다...)

불변조건(invariant) : 말 그대로, 항상 변하지 않는(항상 참/거짓인) 조건. 이걸 읽어보면 아마도 이해가 될 거...

아무튼 이런 invariant가 달라지면 뭔가 문제가 생긴 거겠지 모... 로직을 ㅄ같이 짰던가 해서...

testing : 테스트 테스트. 프로그램을 망가뜨리려고 (버그를 찾으려고) 들쑤셔보는 것. 나는 프로그램을 조종할 수 있다. 나는 프로그램의 지배자다!

container : C++에서 데이터 집합들을 일컫는 말. std::vector 따위가 여기에 속함.

타입 오류 : type이랑 object에다가 저장하려고 드는 값이랑 다르면 타입 오류가 일어나는 거지 모... 이상한 인자를 때려넣고 함수를 실행하려고 하는거도 타입 오류임.

ㄴ 잘 생각 해보면 뭐 인자(일종의 변수)가 전달받은 값으로 초기화...한다고 생각할 수도 있는거 같음...ㅁㅅㅁ 함수라고 뭐가 특이한게 아니라 다 똑같은거 같넹

사전 조건 : 함수의 인자에 요구되는 조건. 주석 등의 형태로 사전 조건을 명시할 것 + 가능하면 사전 조건을 함수 내에서 체크 할 것.

사후 조건 : 반환 값에 대한 조건. 얘를 완벽하게 체크하는거는 무리인거 같고 뭐.. 주석으로 적당한데다가 명시해놓으면 되는 거 아닐까...

문법 : Token을 파싱하는데에 필요한 규칙. 입력 구문의 형식을 정의하는 문법. 암튼 파싱하는데 필요한 거는 마즘.

프로토타입 : 각 잡고 만들기 전에 일단 간단하게 만들어 보는 것. 좀 고급스럽게 말하면 실험 용도로 만든 초기 버전. 작게작게 만들어서 만족스러울때까지 갈아엎고 폐기하고 하면 된다.

class : 멤버 함수랑 값이랑 모아 놓은 무언가... 사용자 정의 타입을 만드는 거시에요. 취소선 그은거는 핀트가 좀 안맞는거 같아서...

class member : 클래스 안에 집어넣은 무언가. class.member1과 같이 .를 통해서 접근 가능.

인터페이스(interface) : 실제로 보이는 부분. 사용자가 이것을 사용하는 데에 꼭 필요한 정보. 참고로 추상화는 implementation은 숨기고 interface만 보이도록 하는 것이다.

public : 클래스에서 사용자에게도 공개된 부분. interface에 해당하는 부분이 여기에 들어간다...

구문 분석기(syntax analyzer), 파서(parser) : Token들을 규칙에 따라 해석하는 것..

Token : 우리가 한 단위로 생각하는 무언가.

private : class에서 사용자에게 숨기는 부분. implementation에 해당하지 않을까나.

use case : 사용 예를 미리 스케치해보는 것. 이를 통해 프로그램이 수행할 최소한의 작업을 정의해볼 수 있다.


편집 로그

  • 2020.09.21 : PPP 2nd edition 2장 내용까지 정리함.
  • 2020.09.22 : PPP 2nd edition 3장 내용까지 정리함.
  • 2020.09.23 : ppp 2nd edition 4장 내용까지 정리함.
    확실히 2회차가 되놓으니깐 빨리빨리 읽혀서 좋네
  • 2020 09.27 : 5장 내용까지 정리함..딴 일이 너무 많다.
  • 2020 10.09 : 6장 내용까지. Happy 추석이라 계획한거 완전 밀렸음...
profile
학부생 A.

0개의 댓글

관련 채용 정보