전체 글 266

iterator(반복자)

이번 포스팅에서는 iterator, 한국말로 반복자라고 불리는 개념에 대해서 알아보겠습니다. 1) iterator란?iterator는 Wrapper Class의 일종입니다.이때 Wrapper Class란,int, float, long과 같은 기본자료타입(primitive type)을 인스턴스로 다루기 위해 사용하는 클래스를 의미합니다.iterator는 C++외에도 java와 같은 다른 프로그래밍 언어에도 존재합니다. C++에서 iterator는 일반화된 포인터의 형태를 갖고 있지만, 완전히 동일하지는 않습니다.그러나 iterator를 통해 값에 접근하기 위해서는 참조 연산자(*)를 사용하는 등의 접근 방법이 필요합니다. 또한 iterator는 클래스이므로, 이와 관련된 메서드들이 다수 존재합니다.이와 관..

C++ 2024.04.29

오른값 참조

이번 포스팅에서는 오른값 참조에 대해서 알아보겠습니다.오른값 참조는 비교적 최근인 C++11에 등장한 개념으로, 이로 인해 C++의 처리속도가 매우 빨라졌습니다. 그러나 오른값 참조에 대해 배우기 전에, 먼저 확실하게 알고 넘어가야 하는 부분이 있습니다.바로, 왼값(l-value)과 오른값(r-value)이라는 개념입니다. 1) l-value VS r-value우선, l-value는 단일식을 넘어서 계속되는 개체를 의미합니다.그리고 r-value는 l-value가 아닌 나머지로 얘기할 수 있겠습니다. 예시를 들자면,int a = 3;이라는 코드가 있다고 해보겠습니다. 이때, a는 언제든지 값이 변할 수 있습니다.가령, a = 10과 같은 형태로 값을 변하게 하는 것이 가능합니다. 따라서 a는 l-valu..

C++ 2024.04.22

얕은 복사 VS 깊은 복사

본격적인 내용에 들어가기에 앞서 '복사'란 무엇일까요? 게임을 만들 때, 같은 몬스터들을 하나하나 새로 만드는 것보다는하나의 몬스터를 만들고 그 몬스터를 복사하는 것이 훨씬 더 효율적일 것입니다. 복사도 이와 같은 개념으로 적용됩니다.복사도 마찬가지로 같은 타입의 인스턴스를 일일이 새로 만들기 보다는 복사하는 것이 효율적입니다. 그렇다면 복사는 복사인데 얕은 복사와 깊은 복사는 왜 구분되는 것이고, 또 차이는 무엇일까요?한번 알아보도록 하겠습니다. 1) 얕은 복사   위와 같이 구성된 코드를 실행시키면,  위와 같은 실행결과를 확인할 수 있습니다.그런데 결과가 조금 이상합니다.우리는 어찌 되었든, 두 개의 Knight 인스턴스를 만들었고 결과적으로 2개의 Pet 인스턴스가 동적할당되어야 합니다.그러나 생..

C++ 2024.04.21

C++의 캐스팅 - const_cast

C++ 캐스팅의 마지막 파트인 const_cast입니다.구성은 다음과 같습니다. static_castdynamic_castreinterpret_castconst_cast1) const_cast란?const_cast에 대해 알기 이전에 const 키워드가 무슨 역할을 수행하는지 알아야 합니다.https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/const const 키워드 - C# 참조 - C#const 키워드 - C# 참조learn.microsoft.com 설계자들은 상수 필드나 지역 상수를 만들기 위해 const 키워드를 사용합니다.상수를 만들기 위해서는 define을 사용해 매크로를 만들 수도 있고,enum 구조체나 e..

C++ 2024.04.15

C++의 캐스팅 - reinterpret_cast

이번 포스팅에서는 C++의 캐스팅 중에서 reinterpret_cast에 대해 알아보도록 하겠습니다. 구성은 다음과 같습니다. static_castdynamic_castreinterpret_castconst_cast1)  reinterpret_cast란?https://learn.microsoft.com/ko-kr/cpp/cpp/reinterpret-cast-operator?view=msvc-170 reinterpret_cast 연산자자세한 정보: reinterpret_cast 연산자learn.microsoft.com 위의 공식문서의 설명과 같이, retinterpret_cast는 포인터가 다른 포인터 형식으로 변환될 수 있게 합니다.또한 포인터를 전혀 관련없는 타입으로 변환할 수 있게 해줍니다. 2) r..

C++ 2024.04.14

C++의 캐스팅 - dynamic_cast

이번 포스트에서는 저번의 static_cast에 이어 dynamic_cast에 대해 알아보겠습니다.구성은 다음과 같습니다. static_castdynamic_castreinterpret_castconst_cast 1) dynamic_cast란?저번에 알아본 바로는 static_cast는 상속관계를 고려하지 못하고,컴파일러가 판단하기에 문제가 없다면 그대로 캐스팅해버리는 치명적인 문제가 있었습니다. 이러한 문제는 포인터를 사용할 때 잘못된 메모리 주소의 데이터를 덮어씌워 버리는 메모리 오염의 주 원인이 됩니다. 그리고 dynamic_cast는 이러한 상속관계를 고려하여 안전한 변화를 만들어 줍니다. 2) dynamic_cast의 작동원리dynamic_cast는 다형성이 만족되어야 사용가능합니다.그리고 여기..

C++ 2024.04.14

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

객체지향의 프로그래밍의 3요소 - 다형성

은닉성:https://monstrosite.tistory.com/18 객체지향의 프로그래밍의 3요소 - 은닉성상속성 : https://monstrosite.tistory.com/17 객체지향 프로그래밍의 3요소 - 상속성 객체지향 프로그래밍(Object Oriented Programming) 줄여서 OOP의 3가지 요소에 대해 알아보고자 합니다. 첫 번째 시작으로, 상monstrosite.tistory.com 저번 포스팅에서는 객체지향 프로그래밍의 3대 요소 중 하나인 은닉성에 대해 배워보았습니다.이번 포스팅에서는 마지막 요소인 다형성에 대해 알아보겠습니다. 1) 다형성이란?마이크로소프트 공식문서에서는 다형성에 관해 2가지 측면의 설명을 제시합니다.https://learn.microsoft.com/ko-..

컴퓨터 구조 2024.03.30

객체지향의 프로그래밍의 3요소 - 은닉성

상속성 : https://monstrosite.tistory.com/17 객체지향 프로그래밍의 3요소 - 상속성객체지향 프로그래밍(Object Oriented Programming) 줄여서 OOP의 3가지 요소에 대해 알아보고자 합니다. 첫 번째 시작으로, 상속성에 대해 알아보겠습니다. 위의 코드에서 Knight 클래스는 아주 간단하게monstrosite.tistory.com 저번 포스팅에서는 객체지향 프로그래밍의 3요소 중 하나인 상속성에 대해 배워보았습니다.이번 포스팅에서는 상속성에 이어 은닉성에 대해 배워보겠습니다.  1) 은닉성이란? 자동차를 구매했다고 생각해봅시다. 자동차를 운전하기 위해서는 기본적으로 핸들, 페달, 기어 등을 알아야 합니다.그런데 사실 자동차라는 것을 구성하는 것은 위에서 언급..

컴퓨터 구조 2024.03.30