📔 오늘 공부한 내용

오늘은 프로그래머스 데브코스 인지과정 6기를 처음 시작하는 날로, 과정에 대한 OT와 과정을 위한 기초적인 지식인 Git과 C++에 대한 학습을 위주로 진행하였다.

Git과 GitHub

Git은 형상 관리와 버전을 관리하기 위한 Tool로 사용자의 PC(Local Repository)에 분산 저장되는 시스템이다. GitHub는 Git을 사용한 도구로 호스팅이 가능하며, 서버에 저장하는 중앙 집중식 시스템이다.

Git 동작들

  • init: Git 저장소를 초기화 하는 명령어
  • add: 파일 커밋을 위한 대상 파일을 선택하는 명령어
  • commit: 커밋을 진행(Staging Area -> Local Repository)
  • push: Local Repository의 파일을 Github에 전송(Local Repository -> Remote Repository)
  • clone / fetch: GitHub의 저장된 파일을 로컬로 불러오는 명령어(Remote Repository -> Local Repository)
  • merge: 코드 병합을 위한 명령어(Local Repository -> Workspace)
  • pull: GitHub에 있는 파일을 워크스페이스에 바로 적용(Remote Repository -> Workspace)
  • branch: Repository 내부의 구분으로 독립적으로 작업을 진행하기 위한 개념

C++ 개요

C++은 가장 많이 사용되는 프로그래밍 언어 중 하나로, C++은 변수를 생성할 때 자료가 결전되며, 소멸할 때까지 자료가 바뀌지 않는 특성을 갖고 있다. 이를 Type Safe라고 하며, C++에는 여러 가지의 내장 자료형을 갖고 있다.

  • 리터럴: 소스코드 상에 수 또는 문자열 등으로 하드 코딩된 값
const int max_num = 987654321;

C++ 기본 자료형

C++에는 다음과 같은 다양한 종류의 데이터 타입(자료형)을 갖고 있다.

  • char: Character의 약자로, 부호가 있는 1 byte 크기의 정수(27-2^7 ~ 2712^{7-1}). ASCII 범위에 따른 문자의 출력이 가능하다.
  • int: Integer의 약자로, 부호가 있는 정수. 컴파일러에 따라 크기가 다르며, 보통 4 byte의 정수 (231-2^31 ~ 23112^{31-1}) 표현 가능하다.
  • long long: int보다 터 큰 범위를 나타내는 타입으로 일반적으로 8 byte의 정수(263-2^63 ~ 26312^{63-1}). 정수 뒤에 ll 또는 LL 접미사를 통해 리터럴 표현이 가능하다.
  • float: 단정도(비교적 낮은 정밀도) 부동소수점 표현 방식으로 n개의 지수 비트와 m개의 가수비트를 통해 표현한다.(IEEE754: 8개의 지수 비트 + 23개의 가수 비트)
  • double: 배정도 부동소수점 표현 방식으로 float보다 더 큰 비트를 사용한다.(IEEE754: 11개의 지수 비트 + 52개의 가수 비트)
  • bool: 논리 타입으로 1 byte를 사용하며, true 또는 false 값을 가진다.
char a = 'B';
char a = 120;

int a = 10;

long long a = 987654321234567890;
long long b = 123ll;

float f = 1.2f;
double a = 3.4;

bool isTrue = false;

# auto 타입을 사용하면, 초기값에 따라 타입을 추론하여 사용한다.
auto x = 123;
auto x = 'A';
auto x = ture;
...

자료형을 사용할 때에는 Overflow가 발생할 수 있음을 주의해야 한다. 보통 산술 연산 과정에 있어서 Overflow 현상이 자주 발생할 수 있다. 실수의 경우 지수 비트와 가수 비트를 활용하여 데이터를 표현하므로, 일부 오차가 발생할 수 있다. 따라서, equal(=)을 이용한 직접적인 비교보다는 x < 1e-10과 같이 오차를 기반으로 비교하는 것이 바람직하다. 1e-10과 같은 기준 오차를 '입실론 상수'라고 한다.

참조

변수를 대입하거나 함수의 인자 등으로 사용할 때, 데이터의 복사가 발생한다. 메모리의 주소만 복사하는 경우에는 참조 전달, 값을 통째로 복사하는 경우에는 값 전달이라 말한다. 기본 자료형은 값 전달로 전달되지만, & 라는 참조 전달자를 통해 참조 전달이 가능하다. 참조를 위한 변수는 &를 사용해 변수를 생성해 주어야 한다.이 때 값은 반드시 Left Value가 되어야 한다. C++ 11부터는 Right Value를 받을 수 있는 참조자 &&가 추가로 제공된다.

  • Dangling Pointer: 바람직하지 않은 메모리 영역을 가르키는 경우(메모리가 해제된 변수, 지역변수를 참조로 리턴하는 경우 등)
int x;					// 실제 메모리를 할당받은 변수 x(Left Value)
int& rx = x;			// rx와 x 모두 같은 메모리 주소를 가르킨다.

int& func() { ... }    	// 지역변수를 리턴하는 경우, 함수의 끝과 함께 변수가 소멸되므로 Dangling Pointer가 됨

# 축약형 산술 연산을 사용하는 경우에는, 유용하게 사용할 수 있음(const를 사용)
struct Matrix{
	Matrix& operator+=(const Matrix& rhs){ ... }
}

📝 TIL을 정리하며

🤕 어려웠던 점

Git과 C++에 대한 내용은 학부 때 수업으로 들었던 내용이기에 어려움이 없었다. 학교에서도 되게 빡센 교수님한테 수업을 들었었기에 아직도 많이 기억에 남아있었다.

🤔 궁금한 점

아직은 궁금한 점은 없었다.

😁 느낀 점

처음 수업을 진행하는 날이기에 기대 반 걱정 반으로 수업에 참여했다. 매니저님들과 멘토분들이 너무 친절하고 설명을 잘해주셔서 따라가기 좋았다.
생각보다 더 빡센 과정으로 예상되고, 하루를 놓치고 밀리기 시작하면 너무 힘들어질 것 같다. 5개월이란 긴 시간동안 잘 따라갈 수 있도록 열심히 해야겠다!


📌 프로그래머스 데브코스 6기 자율주행 인지과정(Perception) 수강 내용을 바탕으로 정리한 TIL 입니다.
📅 Today: 2023. 9.18.

profile
그냥 끄적여보는 블로그

0개의 댓글