게임개발 수업 (20) 썸네일형 리스트형 가상함수 c++ 은 기본적으로 정적 바인딩을 한다. 바인딩이란? 프로그램 소스에 쓰인 각종 내부 요소, 이름 식별자들에 대해 값 또는 속성을 확정한 과정을 바인딩이라고 한다. 정적 바인딩이란? 컴파일 시점에 바인딩 하는 것을 정적 바인딩이라 하며, 컴파일 후 변경이 불가능하다. 정적 바인딩으로는 oop의 다형성을 구현하기 어렵다. 다형성이란? 한 클래스로부터 파생된 클래스가 다양한 형태를 가질 수 있다는 의미이다. 고양이와 강아지가 있다고 가정해보자. 이들은 동물이라는 클래스로 묶을 수 있다. cat is a animal, dog is a animal 같은 동물이지만 울음소리가 다르다. class animal{ virtural void cry() = 0; } class cat : public animal{ voi.. 클래스 생성자와 소멸자 생성자란 클래스를 생성(인스턴스화)할 때 자동으로 호출하는 함수를 말한다. 생성자는 오버로딩이 가능하고, 내가 생성자를 생략해도 컴파일러가 자동으로 만들어서 실행한다. 생성자는 클래스의 맴버변수를 초기화 해주는 역할을 한다. 초기화 해주는 방법은 생성자가 없어도 다양한 방법으로 할 수 있다. 그렇다면 왜 생성자가 필요한 것일까? 여기서 부터는 나의 추론이다. 일단 컴퓨터는 초기화를 굉장히 중요시 여긴다. 전역변수가 저장되는 공간인 데이터 영역도 초기화 되지 않은 공간인 bss영역을 따로 잡는다. 굳이 bss를 따로 잡는 이유는 초기화 되지 않은 변수는 공간을 할당하지 않게 되고 결과적으로 메모리를 아낄 수 있기 때문이다. 이는 하드웨어가 제한적인 프로그래밍(임베디드 같은)에서는 의미가 있지만, 우리가 하.. static 키워드 static이란 정적지역변수를 말한다. 뜻을 하나하나 풀어서 보면 이해하기 쉽다. 정적 - 지역 - 변수 변수 - 변수는 스택에 저장된다. ( 동적할당은 다른 이야기이다. 아래에서 보면 변수는 a,*b이다. 10과 new int(10)은 값이다. 즉 변수 a,*b는 스택에 저장이 된 것이고, 10은 상수값 new int(10)은 힙에 상수로 저장되어 있고 *b가 그 주소값을 가진다는 이야기이다. ) int a = 10; int *b = new int(10); 지역변수 - 지역변수는 스코프 내에서만 유효하다. int main(){ a = 10;(x) } void func(){ int a; } 지역변수 a는 func()함수내의 스코프에서만 유효하므로 main에서 접근할 수 없다. 정적지역변수 - 정적이란 정.. OOP의 특징 oop란 Object Oriented Programming 의 줄임말로 영어 해석 그대로 객체를 지향하는 프로그래밍이라는 뜻이다. oop를 왜 사용하는 것일까? - 프로그램의 유지 보수를 쉽게 하기 위해서 이다. 개발을 하다 보면 새로운 기능을 추가하기 위해, 혹은 버그를 수정하기 위해 등등 수없이 코드를 다시 수정해야 하는 일이 생긴다. oop는 이러한 과정을 좀 더 쉽게 하게 해준다. ex) 강아지가 우는 프로그램을 만든다고 가정해보자 절차지향 객체지향 class Dog { public: string name; int age; }; void cry(Dog dog) { cout STL vector vector란 stl에서 제공하는 컨테이너 중 하나로 가변배열이다. 여러 함수를 제공하고, 잘 사용하면 굉장히 편하다. 다른 stl 컨테이너를 보면 알겠지만, 다른 컨테이너들도 대부분 똑같은 함수를 가지고 있고, 동작도 같다. 즉 하나의 컨테이너만 쓸줄 안다면, 다른것을 사용하는 것도 굉장히 쉽다. 그렇다면 왜 여러가지의 컨테이너가 존재하는 것일까? 컨테이너는 각각의 특징을 가진 ADT(Abstract Data Type)를 DA(Data Structure)로 구현한 것이다. 그래서 컨테이너의 특징을 알아야 한다. vector는 array를 사용해서 구현한 것이다. 때문에 array의 특징을 그대로 가진다. array의 장점 : 인덱스에 임의접근이 가능하다. array의 단점 : 요소를 삽입 삭제하면 비용.. STL 구성요소 stl 이란 Standard Template Library 의 줄임말이다. 표준 템플릿 모음이란 뜻이다. 그렇다면 템플릿이란 무엇인가? 템플릿이란 어떠한 것을 정해놓은 틀, 규격 같은 것을 말한다. 프로그래밍 언어에서 쓰이는 의미는 코드를 컴파일러가 컴파일 시점에 생성하게 하는 것을 말한다. ex)int sum(int a,int b) return a+b; 라는 함수가 있다고 하면, 이것은 int형 데이터타입만 처리 가능하다. 만약에 다른 데이터 타입을 처리하고 싶다면, 따로 오버로딩이 필요하다. double sum(double a,double b) return a+b; 하지만 이것을 템플릿으로 만든다면 template T sum(T a,T b) return a+b; 라 할 수있고, 저 T라는 것은 데이터.. 스택 프레임, 메모리 누수, 가비지 컬렉션, 메모리 단편화 1. 스택 프레임 스택 프레임이란? 스택 영역에 함수를 구분하기 위해 생성되는 공간 이다. 각 함수별로 스택프레임이 생성되어 저장된다. 그렇다면 왜 함수별로 구분해야 하는 것일까? 가장 중요한 이유는 검색을 해도 나오지 않는다. 이유를 아는 것이 스택 프레임을 이해하는 핵심이다. 동작 원리를 보면 esp, ebp 등의 용어와 어려운 과정이 나오지만, 이것은 중요하지 않다. 컴퓨터가 프로그램을 실행할 때, 코드영역에서 코드를 읽으며 필요한 데이터를 데이터,힙,스택영역에서 레지스터로 가져온다. cpu는 레지스터 값을 가지고 연산을 하고, 결과물을 다시 저장영역에 돌려준다. 데이터를 가져올 때 필요한 것이 스택이다. 데이터영역은 전역변수나 상수만 저장되기 때문에 한번 읽으면 끝이다. 나머지 변수는 코드를 실행.. 메모리 구조 메모리 구조 코드 영역 - 작성한 코드가 저장 (함수, 제어문, 상수) 데이터 영역 - 전역변수와 static 변수, 프로그램이 종료되어야 소멸 힙 영역 - 동적으로 할당한 변수가 생성 ,런타임중 생성 스택 영역 - 함수 호출시 생성되는 지역변수와 매개변수 저장 / 스택구조로 저장 https://lxxyeon.tistory.com/70 [OS] 메모리 구조 (Memory Structure) - code, data, stack, heap 컴퓨터의 메모리 구조에 대해 알아보자. 먼저, 아래 그림은 프로그램의 정보를 읽어 메모리에 로드되는 과정으로 프로그램이 실행하게 되면 OS는 메모리(RAM)에 공간을 할당해줍니다. 이 메모리 lxxyeon.tistory.com 2022-10-11 자료형, 연산자 우선 순위 자료형 옷이나 신발등 대부분의 물건이 사이즈가 다르듯이, 컴퓨터에서도 여러개의 규격화된 사이즈로 저장공간을 할당한다. 그리고 이것들은 각각 표현할 수 있는 데이터 값이 다르다. https://melonicedlatte.com/algorithm/2018/03/04/022437.html C/C++ 에 존재하는 모든 자료형 개념 총 정리 - Easy is Perfect 알고리즘 문제 풀이 시에, 모르는 게 많이 생기게 됩니다. 특히 자료형에 대한 게 많이 헷갈리는 경우가 존재합니다. 어떤 문제는 long long 자료형을 써야할 때가 있고 (int 형의 범위를 초과해서) melonicedlatte.com 연산자 우선 순위 수학에서 수식을 계산하는 것과 비슷하다. 여러 연산자가 있고, 컴퓨터가 어느것을 먼저 처.. 2022-10-07 컴파일 과정 컴퓨터와 사람은 사용하는 언어가 다르다. 컴퓨터는 0과1만 인지할 수 있다. 저장공간을 가장 작은 단위로 나누면 bit가 나온다. bit는 쉽게 이야기 하면 전기를 담는 수조이다. 한칸한칸이 bit이다. 0 1 0 1 0 1 0 1 1 0 5v의 전압이 들어가면 1 없으면 0 이렇게 저장한다. 이렇게 무수히 많은 수조에 0과 1을 저장한다. 0과 1로 저장된 것에 의미를 부여하면 데이터가 된다. ex) '01010 = a 라고 하겠다. ' 라고 사람들이 의미를 부여하면 데이터가 되는 것이다. 우리가 실행하는 코드는 복잡한 일을 수행하는 것 같지만, 컴퓨터는 복잡한 일은 모른다. 컴퓨터가 알고 싶어하는 것은 어디부터 어디까지의 수조에 0과 1을 넣고, 어디부터 어디까지의 수조가 0과 1로 되어있나 확인하는.. 이전 1 2 다음