[C++] Template의 사용법
·
C++/문법 정리
개요동일한 기능이지만 매개변수의 타입이 호환되지 않아서 중복 코드를 작성하는 경우가 있을 것이다. 오버로딩이라고 하는데 예를 들어, (정수) + (정수)로 함수를 구현했다가 (실수) + (실수)를 해야하는 경우에는 매개변수의 타입만 실수로 바꿔서 추가로 작성해야한다.C++에서는 이런 중복코드 작성을 방지하기위해 템플릿이라는 기능을 제공한다. 오늘은 템플릿이 무엇인지, 장단점은 무엇인지 알아보자 !1. 템플릿이란더보기더보기앞서 설명했듯, 중복코드 작성을 방지하기위해 C++에서 제공하는 기능이다. 템플릿으로 함수를 구현하면 컴파일러가 다양한 타입에 맞게 함수를 만들어준다고 한다. 때문에 템플릿을 활용하여 계산기를 구현하면, 매개변수로 정수를 넘겨주든, 실수를 넘겨주든 버그가 나지 않고 정상적으로 작동한다.사..
[C++] Dangling Pointer 대신 Smart Pointer 로
·
C++/문법 정리
개요댕글링 포인터 .. 이름 참 역동적이라 까먹진 못 할 것 같다. C++에서 포인터를 활용하여 구현을 하다보면 동적할당에 대한 개념을 접할 것이다. 동적할당을 통해 값을 참조하고, 그 값을 다른 포인터에서도 참조하는 구조라고 가정해보자. 둘 중 하나의 포인터를 delete한 상태에서 다른 포인터를 통해 참조하는 데이터에 접근을 해보면 -249218232 머시기 이상한 값을 얻게 될 것이다. 이런 상황을 Dangling Pointer라고 지칭하고, 이런 댕글링 포인터의 문제는 Smart Pointer로 해결할 수있다고 한다. 어떻게 해결할 수 있는 것인지 한 번 알아보자.1. Dangling Pointer더보기#include using namespace std;void func5() { int* p..
[운영체제] 메모리구조와 할당방식
·
컴퓨터 과학/운영체제
개요 C++을 공부하면서 정적 메모리 할당과 동적 메모리 할당의 개념을 접하게 되었다. 일반적으로 **변수는 스택(Stack)**에 저장되고, **동적으로 할당한 값은 힙(Heap)**에 저장된다고 한다. 하지만 이 부분이 명확하게 이해되지 않아, 스택과 힙으로 나뉘는 메모리 구조를 정리해 보기로 했다. 1. 메모리 구조더보기출처 : https://velog.io/@shindoyeon 컴퓨터의 메모리(RAM)는 크게 4가지로 코드, 데이터, 힙, 스택 영역으로 나누어져있다.코드 영역 프로그램의 실행 코드를 저장하는 영역이다. CPU가 실행할 명령어들이 저장된다.함수, 라이브러리 코드등이 저장된다.ex) main( ), 사용자 정의 함수, printf( ), scanf( )데이터 영역 프로그램의 전역 변수..
[C++] 오버로딩 vs 오버라이딩
·
C++/문법 정리
개요오버로딩과 오버라이딩의 구분없이 같은 의미를 가진 용어인줄 알았다. 은연중에 오버로딩과 오버라이딩이 다르다는 것을 깨닫고 어떤 차이점이 있는지 알아보게 되었다. 오늘은 오버로딩과 오버라이딩의 차이점을 알아보자 !1. 오버로딩더보기더보기동일한 이름의 함수를 여러 개 정의하지만, 매개변수의 타입이나 개수를 다르게 설정하여 다양한 방식으로 호출할 수 있게 만드는 기능이다.오버로딩의 특징1. 함수의 이름이 동일하다2. 같은 클래스 내에서 사용된다3. 매개변수의 타입, 개수, 순서가 다르다4. 컴파일 시간에 결정된다 (동적 바인딩)#include using namespace std;class Calculator {public: int add(int a, int b) { return a + b..
[C++] Class의 개념
·
C++/문법 정리
개요C++은 객체지향언어로서 데이터를 추상화하여 객체로 만들어 코드의 재사용성을 높이는데에 특화된 언어이다. 여기에는 Class라는 개념이 불가피한데 Class가 어떻게 쓰이는지 한 번 알아보자1. Class의 정의더보기더보기Class는 데이터와 이 데이터를 처리하는 함수를 하나로 묶은 사용자 정의 데이터 형식이다. 객체를 생성하기위한 틀로 사용된다.Class의 구성요소1. 멤버 변수2. 멤버 함수3. 생성자4. Getter, Setterclass Car {private: string brand; int speed; public: Car(string b, int s) { brand = b; speed = s; } void accelerate() {..
[운영체제] 32비트 vs 64비트
·
컴퓨터 과학/운영체제
개요 새로운 SSD 설치 과정에서 컴퓨터를 포맷하고 운영체제를 새로 설치하게 되었다. 운영체제에는 32비트와 64비트 버전이 있는데, 이 둘의 차이점이 궁금해졌다. 오늘은 운영체제에서 자주 접하는 32비트와 64비트의 차이에 대해 알아보자 !1. 레지스터 크기더보기컴퓨터의 CPU는 데이터를 처리하고 메모리를 참조할 때 워드라는 단위를 사용한다.32비트 시스템에서는 워드의 크기가 32비트, 64비트 시스템에서는 워드의 크기가 64비트라는 의미이다.워드의 크기에 따라 한 번에 처리하거나 참조할 수 있는 데이터의 크기가 제한된다.직관적으로 봤을 때에도 64비트 시스템이 32비트 시스템보다 많은 데이터를 처리할 수 있다는 것을 알 수 있다.2. 메모리 주소 공간더보기CPU는 메모리의 각 위치를 고유한 주소로 식..
[C++] 참조와 포인터의 차이
·
C++/문법 정리
개요C언어를 공부하다보면 참조와 포인터에 대해 들어보게될텐데, 이 둘의 차이점이 명확히 구분이 가지 않을 것이다.친구가 나에게 "참조와 포인터의 차이가 뭐야 ?"라고 질문을 했을 때 나 또한 명확하고 시원하게 답변을 해주지 못 했다. 때문에 오늘은 참조와 포인터의 차이점에 대해 알아보고자 한다.1. 참조더보기참조는 C++에서 "변수에 대한 별칭"을 제공하는 기능이다.참조를 통해 기존 변수에 간접적으로 접근할 수 있으며, 참조자는 실제로 변수의 값을 저장하지 않고, 기존 변수의 메모리 주소를 사용하여 작업한다.참조의 특징1. 초기화 시 참조할 변수와 연결2. 별칭처럼 동작3. 다른 변수로 변경 불가4. NULL을 직접적으로 가리킬 수 없음1. 참조는 반드시 선언과 동시에 초기화되어야한다. 선언만 할 경우에..
[유니티] TextAsset으로 엑셀파일 불러오기
·
유니티
개요기획자와 원활한 협업을 위해, 그리고 유지보수성과 확장성을 높이기 위해 데이터 수치들을 엑셀 파일로 관리한다.이러한 이유로 게임 엔진에서 엑셀 파일을 불러오는 기능은 필수적으로 구현할 줄 알아야 한다.여러 게임 엔진 중에서 오늘은 유니티에서 엑셀 파일을 불러오는 방법을 알아보자. 1. 엑셀 파일 변환더보기 대사 데이터테이블을 예로 들고자 한다. 우선 유니티의 TextAsset이라는 변수 기능을 활용할건데 이를 위해 엑셀파일을 txt 확장자로 변경해주어야 한다.다른 이름으로 저장을 선택하면 파일형식 탭에서 여러 확장자로 변경할 수 있을텐데 이 중에 텍스트 문서(탭으로 구분)을 선택해서 저장한다. 저장된 텍스트 파일을 열어보면 이런 형식으로 저장이 되어있을텐데 우측 하단을 보면 인코딩 형식이 ANSI로 ..