전체 글(91)
-
[Computer science]컨텍스트 스위칭(Context switching, 문맥 교환)이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 간혹 그런 일이 있지 않나요? 무언가 일을 하고 있었는데 다른 일이 치고 들어오는 경우요. 이때 치고 들어온 일을 처리하고 이전에 하던 일을 다시 하려고 하면, 무슨 일을 했었는지 어디까지 했는지 잘 기억이 안나는 경우가 있습니다. 이럴 때 내가 무슨 일을 했는지, 어디까지 했는지, 다음은 무얼 하면 되는지 등을 메모라도 해놨다면 참 좋았을 텐데 하고 후회하기도 합니다. 멀티 프로세스 환경의 CPU 또한 마찬가지입니다. CPU가 어떤 프로세스를 실행하고 있는 상태에서 인터럽트가 왔을 때, 우선순위가 높은은 프로세스라면 지금 수행하고 있는 작업을 중단하고 요청 온 프로세스를 수행해야 합니다. 이때 아무런 메모도 없이 수행한다면? 저처럼 아무것도..
2022.04.09 -
[C/C++]네임 맹글링(Name mangling)
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 직역하면 "이름 짓이기기". 음... 이게 뭐길래 어감이 영 좋지 않습니다. 오늘은 제가 외부 라이브러리나 브리지 작업을 할 때 주로 겪었던 Name mangling에 관하여 글을 써보려 합니다. Name Mangling Name Mangling은 컴파일러가 자기 마음대로 변수나 함수의 이름을 변경하는 것을 의미합니다. 함수 오버 로딩을 알고 있나요? 함수 이름이 같고 리턴 값 타입이나 매계 인자가 다른 경우에도 하나의 이름으로 사용할 수 있게 해 주는 C++의 기능입니다. 여담으로 Name Decoration이라고 부르기도 합니다. 예를 들어 보겠습니다. 아래는 매계인자로 받은 값을 + 해주는 함수를 작성한 코드입니다. int Add(int..
2022.04.09 -
[C/C++]포인터
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 이번 글에서는 포인터에 관한 개인적인 고찰에 대해서 적어보려 합니다. 포인터는 자료형이다 정수형 자료형 int, 문자형 자료형 char… 프로그래밍을 하면서 참 많이 보는 것들입니다. 이런 것들을 자료형이라고 한다. 자료의 형태라는 것인데… 포인터도 자료형일까요? 개인적인 생각으로는 자료형이라고 생각합니다. 단지 int가 정수를 값으로 사용하고 char가 문자를 값으로 사용하는 것처럼 포인터 자료형은 주소 를 값으로 사용하고 있죠. 즉, 주소 값을 저장하기 위한 메모리 공간일 뿐이라는 것입니다. 참고로, 모든 포인터타입은 4byte(32bit 컴퓨터 기준, 64bit는 8byte 크기)입니다. 포인터는 왜쓰지? 옛날에 프로그래밍을 처음 공부하..
2022.04.09 -
[C/C++]C++의 키워드 몇 가지
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 C++을 공부하면서 사용해본 혹은 찾아본 예약어를 몇 가지 적어보고자 합니다. 이것도 은근히 기술면접 질문으로 많이 나온다고 합니다. 무의식적으로 아 그런 기능인가 보다 하고 사용하다가, 어? 이런 거야?라고 깨닫게 되는 순간들이 문득 있었던 추억이 있습니다. 익숙한 게 무섭다는 게 이런 걸까요? const / constexpr 상수 객체를 만들 때 많이 사용했던 키워드들입니다. 두 가지가 있는데 둘 모두, 객체를 상수화 시킵니다. 그런데 굳이 두 가지가 따로 있다는 건, 차이가 있다는 것이겠죠. 어떤 차이가 있을까요? const 컴파일 타임, 런타임에 초기화될 수 있음 비 정적 멤버 함수에만 쓸 수 있다 => 이 경우 const 멤버 함수는..
2022.04.09 -
[C/C++] 캐스팅연산자
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 코딩을 하다가 실수형 변수를 정수형으로 변환하기 위하여 (int)라는 것을 한 적이 있나요? 이와 같은걸 캐스팅, 한국말로는 형 변환이라고 합니다. 사실 (int)와 같은 일반적인 명시적 형 변환은 좀 위험합니다. 강제로 형태를 변환시키니… 하지만 캐스팅이 필요한 경우가 확실히 있습니다. C++에서는 캐스팅을 조금이라도 더 안전하게 하려고 몇 가지 등장한 캐스팅 연산자들이 있습니다. 이번 글에서는 캐스팅 연산자들에 관하여 특징만 간단히 다뤄보려 합니다. 살펴볼 캐스팅 연사자들은 다음과 같습니다. static_cast dynamic_cast const_cast reinterpret_cast 캐스팅 연산자들은 의 타입으로 캐스팅을 해줍니다. ex..
2022.04.08 -
[OOP] 가상 함수(Virtual function or Virtual method)이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 객체지향 프로그래밍의 대표적인 개념들이 있습니다. 추상화, 캡슐화, 상속성, 다형성, 동적 바인딩 이와 관련된 내용은 추후 다뤄보도록 하고 이번 글에서는 '다형성'에 중점을 둔 가상 함수에 관하여 알아보려 합니다. 왜냐하면 가상 함수는 객체지향 언어의 '다형성'을 가능하게 해 주기 때문이죠. 가상 함수(Virtual function or Virtual method) 가상 함수란 상속하는 클래스 내에서 같은 형태의 함수를 오버 라이딩(overriding) 할 수 있도록, 임시로 선언해놓은 함수를 말합니다. 즉, '일단 이런 함수가 있으니 상속하는 클래스에서 재정의 해서 써라'라는 것이죠. 단어 그대로 가상의 함수인 것입니다. 예를 들어, 아래와..
2022.04.08