본문 바로가기
728x90

[프로그래밍 공부]44

[C++] 레퍼런스 사용 시 주의 사항 C++에서 레퍼런스(Reference, 참조)란 변수에 대한 앨리언스(Alias, 별명)이다. 변수에 대한 별명이기 때문에 일반적인 자료형 뿐 아니라 포인터 자료형에 대해서도 사용이 가능하다. 레퍼런스 변수의 값을 변경하는 경우 해당 레퍼런스가 가리키는 원본의 값이 변경된다. int x = 10; int& xRef = x; xRef = 15;// x 는 15로 변경되었다. 레퍼런스는 변수의 주소를 가져오거나 변수에 대한 역참조 연산을 자동으로 수행하는 특수 포인터로 볼 수 있다. xRef 변수를 사용하는 것은 x를 사용하는 것과 동일하다. 즉, &xRef 연산으로 xRef의 주소를 찾는 경우 x의 주소 값인 &x가 반환된다. 다르게 말하면 &xRef == &x가 true가 된다. 이러한 레퍼런스를 사용할.. [프로그래밍 공부]/C&C++ 2023. 1. 27.
[Git/SourceTree] GitHub 레포지토리 SourceTree에 연동하기 깃허브를 사용하다보면 항상 cmd를 열어 명령어로 푸시, 풀 등을 진행하거나 깃허브 홈페이지에 접속해서 현재 로그 등을 확인할 수 있다. 근데 이런 일이 눈에 잘 안들어오기 때문에 Gui를 사용한 지원 프로그램들이 여럿 있다. 그 중에서 SourceTree를 사용하여 깃허브 레포지토리의 클론을 생성하고 커밋, 풀, 푸시 등을 해본다. 먼저 소스트리 홈페이지에서 소스트리 프로그램을 다운받아 설치한다. 윈도우와 맥 모두 사용 가능하기 때문에 유용하다. Sourcetree | Free Git GUI for Mac and Windows A Git GUI that offers a visual representation of your repositories. Sourcetree is a free Git client.. [프로그래밍 공부]/Git 2023. 1. 24.
[Git] 유니티 프로젝트를 위한 깃허브(GitHub) 레포지토리 생성하기 깃허브(GitHub, 이하 깃)은 버전 관리를 위해 가장 많이 사용되는 서비스이다. SVN과 같은 형상관리 시스템도 존재하지만 개인적으로는 git이 조금 더 편리하다고 생각한다. 소스를 되돌리거나 브랜치 관리, 머지 충돌 시 처리 등 더 편하다는 것이 주관적인 의견이다. 이러한 깃을 사용하기 위해 서로운 레포지토리를 생성하고 유니티 프로젝트를 겟에 올려본다. GitHub 홈페이지에 로그인하고 새로운 Your Repositiory에 들어간다. 아이디가 없다면 새로 생성하자. GitHub: Let’s build from here GitHub is where over 94 million developers shape the future of software, together. Contribute to the .. [프로그래밍 공부]/기타 2023. 1. 24.
[C++] 함수 오버라이딩의 특수 케이스 함수 오버라이딩을 하다보면 의도하지 않은 동작을 할 때가 있다. 부모 클래스와 자식 클래스가 static 함수를 같은 이름으로 둘 다 들고 있다거나, 오버로딩 된 함수의 일부만 오버라이딩 한다거나 하는 등의 일들이 발생한다. 이러한 예외적인 상황에 대해 알아본다. 동일한 이름의 static 함수 처리 부모 클래스의 오버로딩한 함수 중 일부만 오버라이딩 하는 경우 Public이 아닌 함수의 오버라이딩 부모 클래스 함수에 디폴트 매개변수가 있는 경우 오버라이딩 함수의 접근 지시자가 다른 경우 [동일한 이름의 static 함수 처리] 기본적으로 C++에서는 static 함수를 오버라이드 할 수 없다. 애초에 virtual 과 static 을 동시에 사용할 수가 없기 때문에 컴파일 자체가 불가능하다. 그러나 같.. [프로그래밍 공부]/C&C++ 2023. 1. 9.
[STL] 컨테이너의 분류와 종류(순차 컨테이너, 연관 컨테이너, 비정렬 컨테이너) 컨테이너의 종류는 크게 3가지로 나눌 수 있다. 순차 컨테이너, 연관 컨테이너, 비정렬 컨테이너로 볼 수 있는데 이 안에 포함되는 STL 컨테이너들도 간단히 소개한다. 순차 컨테이너 ( Sequence Container ) 모든 요소를 저장한 순서대로 저장하는 컨테이너이다. 원소를 선형적 순차열(Linear Sequence)에 저장하게 되는데 이로 인해 정렬되지 않는다. 이 위치는 삽입한 시점과 위치에 따라 달라지며 요소의 값과는 독립적이다. 자동적으로 정렬되지 않기 때문에 정렬 알고리즘을 사용하여 수동으로 정렬해야 한다. STL에 선정의된 순서 컨테이너는 배열(array), 벡터(vector), 데크(deque), 양방향 리스트(list), 단방향 리스트(forward_list) 가 있다. Array .. [프로그래밍 공부]/Data Structure 2023. 1. 2.
[STL] 벡터(Vector)와 리스트(List)의 장단점과 차이점 벡터(vector) 벡터는 동적배열을 만드는 연산을 수행한다. 따라서 연속적인 메모리를 확보한다. 자신의 요소를 내부의 동적 배열 ( dynamic array )로 복사한다. 임의 접근 연산자를 제공([])하기 때문에 어떠한 값에 접근하든 상수시간이 소요된다 동적 배열이기 때문에 배열의 중간에 새로 추가하거나 삭제하면 많은 값이 이동해야하기 때문에 오랜 시간이 걸린다 중간에 추가하는 것이 오버헤드가 크기 때문에 보통 뒷부분에 추가한다 ( push_back ) 동적 배열이기 때문에 크기의 확장과 축소가 자유롭지만 재할당 비용은 크다. 장점 임의접근을 상수시간에 가능하다. 따라서 읽기에 매우 강하다. 단점 중간에 값을 추가/제거하는 비용이 크다 재할당 비용이 크다 리스트(list) 리스트는 요소들을 양방향 .. [프로그래밍 공부]/Data Structure 2022. 12. 31.
[C/C++]댕글링 포인터 정리 댕글링 포인터란? 댕글링 포인터(Dangling Pointer)란 이미 해제된 메모리 영역를 계속해서 가리키고 있는 포인터를 말하는 것으로 유효하지 않은 메모리를 가리키고 있기 때문에 Segmentation fault 가 발생할 수 있다. int *pData = (int*)malloc(sizeof(int)); free(pData); *pData = 10;// 댕글링 포인터 위의 상황에서 free(pData); 이후 pData는 댕글링 포인터가 되었으며 *pData를 통해 10을 넣으려고 함과 동시에 Segmentation fault가 발생한다. 상황에 따라서 오류가 아닌 채 동작할 수 있으나 정상동작이 아니므로 버그의 원인이 된다. int *pData1, *pData2; pData1 = (int*)mal.. [프로그래밍 공부]/C&C++ 2022. 5. 19.
[C++] decltype 이란? decltype은 주어진 이름이나 표현식의 형식을 알려주는 역할을 한다. ( decltype에 대한 정보 https://msdn.microsoft.com/ko-kr/library/dd537655.aspx ) decltype은 대부분 예상한 자료형을 알려주지만 가끔 생각지도 못한 결과를 제공하는 경우가 있다. 그렇기에 decltype의 작동 방식을 공부해보자. decltype은 템플릿이나 auto와 다르게 주어진 이름이나 표현식의 구체적인 자료형을 그대로 말해준다. 다음 예를 보자. 위 예에서 사용된 코드들은 우리가 생각할 수 있는 그대로가 decltype을 통해 표현된다. 대체로 자료형 T의 객체들을 담은 컨테이너(vector, deque 등)에 대한 operator[] 연산은 T&를 반환한다. 그러나 .. [프로그래밍 공부]/C&C++ 2022. 1. 22.
728x90