3일차 (12/13)

2023. 12. 12. 23:47Unreal 강의

대부분의 객체지향을 포함했다고 하는 프로그래밍 언어들은 개념, 행동, 상태로 인간의 욕구를 구분한다.

  • 개념 ex) 몬스터를 만들고 싶다.
  • 행동 ex) 몬스터는 움직여야한다 => 함수
  • 상태 ex) 움직임에는 스피드가 필요하다 => 변수
변수의 규칙

같은 이름의 변수는 같은 영역 안에 두번 선언할 수 없다.

그 이유는 C++이 금지해서가 아니라 메모리 영역이 겹치기 때문에 선언할 수 없는 것이다.

 

main함수에 만들 수 있으면 다른 함수에도 만들 수 있다.

 

같은 이름의 변수가 선언되어있다.

위 경우에는 가능하다. 그 이유는 두가지가 있다.

1. 변수의 생략된 앞 이름에 대해서 이해해야한다.

위 사진의 주석처럼 함수내부의 변수는 실제로는 함수의 이름과 함꼐 해석되기 때문에 눈에 보이는 이름보다 길다고 생각해야한다.

 

2. 함수의 메모리에 대해 이해해야한다.

함수가 실행되면 스택영역에 main()의 영역을 할당한다. 이 영역은 내부의 변수+a만큼의 크기로 생성된다.

스택영역에서 생성되는 것은 항상 뒤에서부터이기 떄문에 진입점인 main이 예를들어 500번지라고 하면 MonsterMove는 무조건 500보다 앞 번지에 위치한다. main이 가장 먼저 생성되서 가장 뒷 번지이다.

 

위 그림에서는 빌딩형태로 표현했지만 사실 메모리 영역은 선형으로 이해해야한다.

실제로는 이것과 비슷하다.

 

scope, range라고 하기도 하는데, {  } 이 두개의 구문이 함수가 실행되면 스택영역에 이 함수의 메모리 영역을 만든다는 의미가 되고 마무리 중괄호 } 는 함수가 종료되면 그 메모리 영역을 삭제하라는 명령이 된다.

 

함수가 실행되면 함수는 램에 자신이 실행된 지역 메모리를 만들고 그 안에 변수를 둔다. 그래서 함수 안에 만들어진 변수를 지역변수라고 한다.

 

영역구분
  • 어떤 {}에도 속하지 않는 영역은 전역
  • 함수의 {}에 속하는 영역은 지역
  • 클래스 안에 있다면 클래스 내부 지역 

어떤 영역에 있는 변수인지따라 전역변수, 지역변수라고 부른다.

지역변수는 한계가 있다. 어떤 지역에서 만든 함수는 다른 지역에서 사용이 불가능하다.

함수는 실행된 후 파괴되기 때문에 메모리에 지역변수가 남아있지 않다.

main과 MonsterMove에 지역변수를 생성

 

그래서 메모리 처리가 다른 방식인 변수가 필요한데 전역변수는 데이터 영역에 생성되는 변수이다.

이 전역변수는 프로세스가 종료되기 전까지 파괴되지 않는다.

그리고 스택이 만들어지기도 전에 전역변수가 만들어지기 때문에 어떤 지역에서도 사용이 가능하다.

데이터 영역에 생성된 전역변수

 

함수안에서 변수를 사용할 때 이름없는 메모리 영역을 만들 수 있다. 이때 이 메모리 영역은 메인에 붙어서 할당된다.

이름없는 메모리 영역에서 만든 변수는 바깥쪽 영역에서 사용할 수 없다. 하지만 바깥쪽 영역에서 만든 변수는 이름없는 메모리 영역에서 사용할 수 있다.


연산자

변수를 사용해서 특정한 결과를 리턴하는 것을 연산자라고 한다.

연산자 == 함수 == 행동이다.

  • 단항 연산자 : 변수가 1개 필요한 연산자 ex) ! 등
  • 이항 연산자 : 변수가 2개 필요한 연산자 ex) +, - 등
  • 삼항 연산자 : 변수가 3개 필요한 연산자 ex) x == x ? x : x

변수의 사용방법은 앞에 자료형이 붙어 있으면 만들겠다가 된다.  사용할때는 자료형을 생략하고 사용하는 것이 맞다.

연산자의 종류는 다음과 같다.

  • 산술 연산자
    • = =>오른쪽의 메모리를 왼쪽으로 복사한다. => 대입 연산자
    • +, - , *, /, %
    • % => 나누어서 나누지 못한 수
    • 연산자는 무조건 같은 자료형끼리 구성되어야 한다.
  • 비교 연산자 & 관계 연산자
    • == => 왼쪽과 오른쪽이 같아? 같으면 1 다르면 0을 리턴.
      • 여기서 1(맞다), 0(틀리다)가 정수 1, 0과는 다르기 때문에 맞다 혹은 틀리다라는 개념을 표현하기 위한 자료형을 만들었다. => bool 자료형(1바이트 논리형)
      • 논리형 상수는 true와 false가 있다. ex) bool Result = true;
      • 정수(int)로 받을 수는 있지만 bool로 받는 것이 정석이다.
    • != => 왼쪽과 오른쪽이 같지 않아? 다르면 1 같으면 0을 리턴.
    • <, >, <=, >=
  • 논리 연산자
    • 논리 연산자를 이해하려면 참과 거짓에 대해서 이해해야한다.
    • 이해하려면 비트단위로 자료형을 바라볼 수 있어야 한다.
    • ex) int 4바이트 정수형 00000000 00000000 00000000 00000000
    • 참 => 모든 비트 중 단 1개라도 1이 있다. (0이 아닌 모든 수는 true다.)
    • 거짓 => 모든 비트가 0이다. == 0 (0만이 false다.)
    • 모든 값은 논리형이 될 수 있다.
    • !
      • 논리 부정 
      • 단항 연산자
      • 오른쪽 메모리가 true이면 false를 false이면 true를 리턴.
    • &&
      • 논리적 and
      • 왼쪽과 오른쪽 메모리가 전부 참이어야 참을 리턴.
    • ||
      • 논리적 or
      • 왼쪽과 오른쪽 메모리 중 1개라도 참이 있으면 참
  • 비트 연산자
    • 비트 연산자를 설명하기 위해 우선 정수의 비트표현식에 대한 것을 알아야한다. 4바이트 정수인 int는 기본적으로 32비트를 가지고 있다. 
    • 0b00000000000000000000000000000000 = 0, 0b00000000000000000000000000000010 = 2처럼 양수의 경우 2진수로 표현된다.
    • 가장 앞의 비트가 1이면 음수이다.
    • 음수를 표기할 때는 0b11111111111111111111111111111111를 -1이라하고 0인 곳의 값을 음수로 더하기로 했다. => 2의 보수법 
    • ~
      • 비트 not 
      • 1. 32번째 비트(부호비트0를 확인한다.)
      • 2. 0이다. = 그냥 양수 표현식으로 계산.
      • 3. 1이다. = 그럼 음수로 보고 모든 비트가 1일때를 -1로 본다.
        • 그리고 0인 부분의 숫자를 음수로 더한다.
      • ~는 모든 0을 1로 바꾼다. 0b00000000000000000000000000000000를 0b11111111111111111111111111111111으로 바꾸는 식이다.
    • &
      • 비트 and 
      • 비트식으로 왼쪽과 오른쪽을 비교해서 둘다 true이면 true이다.
      • 0b00000000000000000000000000000010 &
      • 0b00000000000000000000000000000011 =
      • 0b00000000000000000000000000000010 이렇게 된다.
    • |
      • 비트 or 
      • 비트식으로 왼쪽과 오른쪽을 비교해서 하나라도 true이면 true이다.
      • 0b00000000000000000000000000000010 |
      • 0b00000000000000000000000000000011 =
      • 0b00000000000000000000000000000011 이렇게 된다.
    • ^
      • 비트 xor (배타적 논리합) 
      • 비트식으로 왼쪽과 오른쪽이 같으면 false, 혹은 서로 다르면 true, 둘 다 아니면 false.
      • 0b00000000000000000000000000000010 ^
      • 0b00000000000000000000000000000011 =
      • 0b00000000000000000000000000000001 이렇게 된다.
    • <<, >>
      • 비트 시프트
      • 0b00000000000000000000000000000001 << 1
      • 0b00000000000000000000000000000010
      • 주의할 점은 어떤 값이 끝에서 사라질 방향으로는 밀지 않는 것이 좋다.
  • 복합 할당 연산자
  • 멤버와 포인터 연산자
  • 기타 연산자

https://luinbarr.tistory.com/5

 

4일차 (12/14)

 

luinbarr.tistory.com

나머지 연산자는 다음 강의때 이어서 하신다고 하셨다.

중단점

코드를 보는 도중 중간단계 확인이나 현재까지 진행한 단계와 그 상태에서의 값을 확인하고 싶을때가 있다. 그때 자신이 확인하고 싶은 코드 라인 1줄 아래에 F9를 누르면 중단점이 걸린다. 중단점이 생기면 왼쪽에 빨간 점이 생긴다. 

  • 코드를 실행시키고 실행을 확인할 때 진행을 위한 단축키들이 있다.
    • F5 => 중단점이 있을 때까지만 진행
    • F10 => 코드를 한줄씩 진행하지만 다른 함수의 스택으로 들어가지 않는다.
    • F11 => 코드를 한줄씩 진행하지만 다른 함수의 스택까지 들어간다.
    • F10, F11을 누를때 노란색 화살표는 실행되고 있는 라인을 말한다.
  • 프로세스의 최초 실행지를 확인할 수 있다.

 

C++의 버전

Visual Studio의 C++ 컴파일러는 표준 C++과 약간 다를때가 있다.

현재 14, 17, 20 중 고를 수 있다.


코딩스탠다드

표기법 및 구문법을 각 회사나 프로젝트 상황에 맞춰서 규칙을 정한 것으로 어기면 안된다.

프로그래밍 시에 주의할 점에 해당 강의의 코딩스탠다드 내용(구글, 언리얼 등의 코딩 스타일들)도 섞일 것이다.

프로그래밍 시에 주의할 점
  • 함수는 사용하고 올리는게 좋다.
  • 생략하지 않는다. fullname이 명시적으로 존재한다면 웬만하면 그것으로 변수를 만든다. (코딩스탠다드)
  • 전역변수와 지역변수들의 이름을 절대 겹치게하지 않는다. (코딩스탠다드)
  • 코드 읽기 규칙
    • 기본적으로는 위에서부터 아래로 읽는다.
    • 오른쪽에서 왼쪽으로 읽습니다. 예외는 ()가 있을때 
  • 변수의 값을 확인하는 것은 기본이다. 다른 누군가에 묻기 전에 항상 변수의 값을 확인하거나 그러지 않았다면 확인하고 온다.
  • 변수의 초기값은 항상 넣는다. (초기화를 위해 리터럴 값을 넣는다.)

단축키
  • F9 => 중단점 생성
  • F5 => 중단점이 있을 때까지만 진행
  • F10 => 코드를 한줄씩 진행하지만 다른 함수의 스택으로 들어가지 않는다.
  • F11 => 코드를 한줄씩 진행하지만 다른 함수의 스택까지 들어간다.
    • 노란색 화살표는 실행 대기하고 있는 코드의 라인을 말한다.

하드 디스크 파티션 할당
  1. 제어판 - 하드 디스크 파티션 만들기 및 포맷에 들어간다.
  2. 할당되지 않은 디스크 왼쪽 위에 커서를 올리고 확인 후 포맷이 안되어 있으면 포맷
  3. 할당되지 않은 디스크 오른쪽 위에 커서를 올리고 새 볼륨 생성

'Unreal 강의' 카테고리의 다른 글

4일차 과제  (0) 2023.12.14
4일차 (12/14)  (0) 2023.12.14
3일차 과제  (0) 2023.12.14
2일차 (12/12)  (0) 2023.12.12
1일차 (12/11)  (0) 2023.12.12