C++ 19

C++의 캐스팅 - static_cast

저번 포스팅에서는 C 스타일 캐스팅과 C 스타일 캐스팅의 문제점을 알아보았습니다.이번 포스팅에서는 C++의 캐스팅에 대해 알아보겠습니다. 구성은 다음과 같습니다. static_castdynamic_castreinterpret_castconst_cast 1) static_cast란?static_cast는 가장 간단한 형태의 캐스팅입니다.일반적으로 우리가 합당하다! 라고 생각하는 캐스팅 관계일 때 사용하게 됩니다.그리고 static_cast는 컴파일 시점에서 이루어지게 됩니다.거두절미하고 한번 보겠습니다. 2) 변수의 자료형 -> 변수의 자료형  위와 같이 static_cast는 캐스팅을 하되, 캐스팅의 관계가 애매모호한 경우에는 에러를 띄우는 것을 볼 수 있습니다. 2) 포인터의 자료형 -> 포인터의 자료..

C++ 2024.04.08

캐스팅 - C언어의 캐스팅

이번 포스팅에서는 캐스팅이 무엇이고, 어떻게 이뤄지는 지 알아보고자 합니다.중점적으로 설명할 부분은 C++의 캐스팅이 되겠지만, C++의 부모격인 C언어의 캐스팅에 대해 알아보고C언어의 캐스팅이 갖는 문제점이 뭔지 배워보도록 하겠습니다. 1) 캐스팅이란?https://en.wikipedia.org/wiki/Type_conversion캐스팅은 데이터의 타입을 다른 타입으로 바꿔주는 것입니다.이를 통해 프로그래머는 데이터를 상황에 맞게 유동적으로사용할 수 있게 됩니다. 2) C언어의 캐스팅C언어의 캐스팅은 변환하고자 하는 데이터 앞에 (변환하는자료형) 을 수식함으로써 이루어집니다.  위와 같이 캐스팅이 이루어지는 것을 확인할 수 있습니다. 뿐만 아니라, 단순히 변수의 캐스팅이 아닌 참조 타입의 변환도 이루어..

C++ 2024.04.07

virtual , override 키워드

C++은 효율 우선주의 언어입니다.특별한 경우가 없다면, 컴파일 시에 비용이 더 높은 게 있다면 비용이 더  높은 걸 사용합니다. 이 특징은 장점일 수도 있고, 단점일 수도 있는 말 그대로 양날의 검인 특징입니다.처리철차가 간단하고 처리속도 역시 빠르겠지만, 또 그만큼 상황을 제한해버립니다. 그렇지만 우리에게는 virtual 과 override라는 2개의 무기로 이 단점을 능숙하게 조련할 수 있습니다.  한번 보겠습니다.  Children은 Parent클래스로부터 상속받은 자식 클래스 입니다.따라서 Parent타입 포인터에 객체 kids의 주소를 넣었다면 우리는 "자식입니다"라는 출력화면을 보았어야 합니다.하지만, 출력은 "엄마, 아빠입니다" 가 되어버렸습니다.이러한 결과가 발생한 이유는 C++의 효율 ..

C++ 2024.03.18

람다

저번 포스팅에서 우리는 함수 객체에 대해 알아보았습니다.함수 객체는 함수의 동작과 상태를 다룰 수 있다는 점에서 매우 유용하다는 것 역시 알 수 있었습니다. 그러나 필요할 때마다 함수 객체를 선언하고 사용하는 것은 매우 불편한 일입니다.그러한 부분에서 오늘 배월 볼 람다는 일시적으로 사용될 함수 객체를 다루는데에 매우 유용합니다. 거두절미하고 한번 알아보겠습니다. 구성은 다음과 같습니다. 람다의 구성람다의 기능람다의 사용람다의 위험성 1)  람다의 구성람다는 크게 3개의 부분으로 나뉘어 있습니다.캡처부매개변수부구현부또한 각각의 부분은 다음의 기호로 사용됩니다.[  ](대괄호)( )(소괄호){ }(중괄호) 2)  람다의 기능람다는 함수 객체를 단발성으로 사용하고자 할 때 사용가능합니다.그러므로 상태를 포함..

C++ 2024.03.18

함수 객체

이전 포스팅에서 함수 포인터에 관하여 작성하였습니다.이번 포스팅에서는 함수 객체(functor)에 대해 작성해보도록 하겠습니다. 다시 한번 함수 포인터의 단점을 설명드리자면,시그니처가 안 맞으면 사용할 수 없다함수 안에서 데이터를 바인딩해버려 상태를 가질 수가 없다라는 단점이 있습니다. 함수 객체는 위의 단점을 극복하기 위해 객체를 함수처럼 사용하는 것을 말합니다.클래스나 구조체를 만들고 이들의 객체를 함수의 기능으로써 동작하게 하는 것이 바로 함수 객체입니다.   위의 구조체 즉, 함수객체 안에서 내부 데이터가 필요하다면 우리는 언제든지 접근하여 데이터를 뽑아올 수 있습니다.정리하자면, 함수 포인터는 동작만이 존재하고함수 객체는 동작과 데이터가 둘 다 존재하는 것입니다. 필요에 따라 사용할 때 함수 포..

C++ 2024.03.11

함수 포인터

포인터는 C/C++을 배우는 분들에게 있어서 가장 큰 장애물이 아닐까 싶습니다.메모리의 주소를 가리킨다는 점에서 다른 언어와 가장 큰 차이점이 되고, 또 그 개념의 이해가 쉽지 않습니다.그런데 이러한 포인터가 변수뿐만이 아닌 함수를 참조할 수 있다는 점을 알고 계셨나요? 이 포스팅에서는 함수 포인터의 개념과 간단한 사용법을 알려드리고자 합니다.들어가기에 앞서 우리는 포인터를 왜 사용하는 지는 어느정도 알고 있습니다.포인터에 관해 알아보던 중 아주 유쾌하면서도 명쾌한 답안이 있어 한번 가져와 보았습니다. 위의 사진처럼, 포인터는 주소를 사용함으로써 복사비용을 줄일 수 있다는 이점이 있습니다.함수 포인터에도 마찬가지로, 이점이 존재합니다.행동 자체를 인자로 넘길 수 있다(콜백 함수)함수의 주소를 넘길 수 있..

C++ 2024.03.11

멀티바이트와 유니코드

컴퓨터에서 인간이 사용하는 문자를 표현하는 수단은 여러가지가 있습니다.이 포스팅에서는 그 중에서 몇 가지를 알려드리고자 합니다. (1) ASCII첫 번째로 ASCII입니다.가장 큰 특징으로는 영어만 고려한다는 점입니다.이 특징으로 인해 7bit만 사용하게 되는데, 이는 0~127까지의 경우만 표현됩니다. (2) ANSI두 번째는 ANSI입니다.가장 큰 특징으로는  ASCII + ANSI값 입니다.ASCII코드의 한계인 영어만 표현한다는 점을 극복하고자 고유값인 ANSI값을 더하여 표현의 범위를 늘릴 수 있습니다.예를 들어, 한국어는 CP949의 ANSI값을 갖습니다.그러나 ANSI의 가장 큰 문제점은 똑같은 ANSI값이 똑같은 문자가 아닐 확률이 존재한다는 것입니다.만일 한국->중국으로 '안녕'을 송신하..

C++ 2024.02.26

C스타일 문자열과 C++스타일 문자열

C스타일 문자열C스타일 문자열은 문자열의 맨 마지막에 끝을 의미하는 \0(null 문자)가 들어가게 됩니다.따라서 실질적으로 사이즈에 + 1이 되어버립니다. C스타일로 문자열을 다루는 방법은 2가지가 존재하는데, 다음과 같습니다. 그리고 위 두 방식은 메모리 공간을 점유하는 방식에서 차이가 나타나게 됩니다. C스타일 문자열 - 포인터 실행 결과는  '같다'가 출력됩니다. 그 이유는 포인터를 통한 문자열은 메모리 공간에서 데이터 영역에 저장되어서로 같은 주소값을 갖기 때문입니다. C스타일 문자열 - 버퍼 실행 결과는 '다르다'가 출력됩니다. 이는 버퍼 형식의 문자열은 메모리 공간 중 스택 영역에 저장되어 서로 다른 주소값을 갖게 되기 때문입니다. 이처럼 C스타일의 문자열은 매우 복잡하고 다루기 어렵다는 문..

C++ 2024.02.26

algorithm 헤더 파일

이 포스팅에서는 algorithm헤더 파일을 사용하는 방법을 알아보겠습니다.구성은 다음과 같습니다.std::findstd::find_ifstd::count_ifstd::all_ofstd::any_ofstd::none_ofstd::for_eachstd::removestd::remove_if먼저 사용하기 위해서는 반드시 코드의 전처리기에 #include 을 포함해야 합니다. algorithm헤더 파일에 대한 더 자세한 설명은 https://learn.microsoft.com/ko-kr/cpp/standard-library/algorithm?view=msvc-170" data-og-description="자세한 정보:" data-og-host="learn.microsoft.com" data-og-source-..

C++ 2024.02.26