개요swift의 함수형 언어 특성인 closure를 공부했으니 이번에는 객체지향적 특성에 대해 공부해보자. swift는 객체지향 코딩을 위해서 여러가지 인터페이스를 제공한다. 사실 인터페이스라는 단어와 가장 어울리는 개념은 protocol이다.하지만 프로그래머로 하여금 코드의 각 조각들을 서로 연결시켜주는 역할을 한다는 뜻으로 사용했다. protocol가장 추상적인 인터페이스로 선언만 허용되는 인터페이스다.실제 사용하기 위해서는 상속을 받아서 구체화시켜서 사용한다. class아마 가장 많이 사용할 인터페이스일 것이다.함수(=method)와 변수(=property)를 모두 가질 수 있고, 인스턴스를 생성해서 프로그램 여기저기서 역할을 한다. struct데이터를 구조화시킬 때 많이 사용한다. class와 거..
개요클래스들을 작성할 때 맺을 수 있는 관계에 대해 알아보자.이는 기법은 아니고 관계에 대한 용어를 배우는 것으로 모른다고 하더라도 코드를 작성할 수는 있지만 용어를 많이 알아두면 다른 개발자들과 소통하기 좋다. IS A클래스를 상속할 때 맺어지는 관계이다. 일반적인 상속 구조에서 부모클래스와 자식클래스의 관계를 is a 관계라고 한다. is a 관계인 클래스는 자식 클래스가 가지고 있는 멤버를 무조건 부모 클래스가 가지고 있기 때문에 묵시적인 업캐스팅이 가능하다. class Parent { public: int a; }; class Child : public Parent { public: int b; }; void main() { Child* child = new Child(); Parent* pare..
개요메모리 생성시 주의해야 할 점에 이어서 해제시 주의해야 할 점에 대해서도 알아보자. 생성시 주의해야 할 점해제는 실제로 해제를 할 때도 주의해야 하지만 해제를 하지 않고 함수를 종료하면 메모리 누수가 발생하므로 이 점도 주의해야 한다. 해제해제는 delete 연산자를 사용한다. delete는 해당 메모리를 해제하고 다음번 new 등에 사용할 수 있도록 해준다. 하지만 delete를 잘못 사용하면 버그가 발생할 수 있으므로 주의해야 한다. 컴파일러가 판단할 수 있는 경우 컴파일 에러가 발생하기 때문에 코드 작성 중에 확인할 수 있지만 런타임 에러를 발생시키는 경우는 치명적이다. 이미 해제된 메모리를 다시 해제할 경우void main() { ClassA *a = new ClassA(); delete a;..
개요C++은 최근 나오는 언어들과 다르게 메모리를 직접 관리하는 언어이다. 따라서 동적으로 메모리를 할당하거나 해제할 때 주의하지 않으면 메모리 누수가 발생하거나 프로그램이 동작 중에 죽어버리는 현상 등을 보게된다.메모리를 생성하거나 해제할 때 할 수 있는 실수 들을 알아보고 이 때 발생하는 오류 및 예외처리에 대해 알아보자. 생성메모리를 동적으로 할당하는 것으로 표적으로 new 연산자가 있다. malloc() calloc 등도 있지만 C++언어로 한정하여 설명하기 위해 new만 언급하도록 하겠다.기본적으로 new를 실패하는 경우는 어플리케이션이 더이상 메모리를 동적으로 할당할 수 없는 경우가 있다. 이 때 옛날 C++의 경우 NULL을 반환하도록 구현되어있어서 프로그래머가 NULL 체크를 통해 생성에 ..
개요리소스를 로딩한다거나 어떤 연산을 수행하기 위해 thread를 만들어서 동작시킬 수 있다. 하지만 thread가 언제 끝날지 보장할 수 없기 때문에 이것에 대해 방어적인 코딩이 필요하다. 예를 들어 리소스를 thread로 로딩하고 로딩이 완료될 때 마다 해당 인스턴스로 callback을 하여 리소스 로딩이 완료되었음을 알려주는 구현이라고 가정하자.이 인스턴스는 자신이 요청한 thread가 완료될 때 까지 삭제하면 안되지만 thread가 언제 끝날지 보장할 수 없기 때문에 thread가 언제 끝나더라도 동작하도록 구현할 필요가 있다. c++에 추가된 shared pointer를 사용하여 이를 구현해 보자. unsafe callback with raw pointer기존 pointer를 사용해서 구현할 경..
개요언리얼 엔진 공식 홈페이지에 있는 튜토리얼을 보면, 스스로 spawn하고 spawn 해제하는 행동을 하는 컴포넌트를 작성해 보라는 숙제가 있다.영어 원문을 봐도 정확히 어떤 결과를 원하는건지 몰라서 마음대로 해석했다. Build a Component that spawns up to three children, each of which despawn on their own after a set amount of time. 런타임 중에 인스턴스를 생성해서 게임에 보여지게 했다가, 타이머가 끝나면 다시 해제하는 프로그램을 만들어 보자. 스페이스 바를 누르면 3개의 큐브를 주위에 생성하고, 생성된 큐브는 일정 시간이 지나면 사라진다. Spawner Componenet생성 및 해제 역할을 할 컴포넌트를 만든다..
개요언리얼 엔진으로 작업하면서 디버깅 하는 방법을 알아보자. Break PointVisual Studio(이하 vs) 환경에서 작업하고 있다면 break point를 찍고 디버깅을 돌릴 수 있다.일단 원하는 곳에 break point를 찍는다. 디버그 > 프로세스에 연결 에 들어가서 언리얼 에디터에 연결한다.// 영어 : Debug > Attach to Process 언리얼 에디터로 돌아가서 실행시키면 해당 코드에서 멈추는 것을 볼 수 있고, 기존 vs에서 디버깅 할 때와 동일하게 호출스택, 현재 값 등을 확인할 수 있다. 로그 출력간단한 로그를 출력해서 게임의 상태를 알 수 있다. 로그 문법UE_LOG(LogClass, Log, TEXT(“format”), …); 예를 들어 현재 위치 vector를 출..
개요c++을 사용해서 언리얼 엔진을 작업하기 위해서 언리얼 엔진이 정의하는 메크로 및 코딩 방식을 익혀야 한다.기본적으로 생성되는 코드를 하나씩 보면서 어떤 의미인지 알아보고 넘어갈 필요가 있을 것 같다. Actor 생성가장 기본 클래스라고 할 수 있는 Actor클래스를 생성하면, 기본 코드가 어느정도 작성되어 있는 것을 볼 수 있다. 앞에 A가 붙는 이유는 언리얼 코드 작성 규약에 의해 Actor클래스를 상속받는 클래스는 A를 접두어로 붙히기 때문이다. 먼저 헤더를 보자. include들CoreMinimal.h기본적인 기능을 사용하기 위한 헤더 파일들을 추가한다. 실제로 저 헤더를 열어보면 수십개의 헤더를 include하는 코드를 볼 수 있다. GameFramework/Actor.hActor클래스를 생..
- Total
- Today
- Yesterday
- game
- mongoDB
- DesignPattern
- scala
- 드라마
- 수학
- SHADER
- Spring
- swift
- ue4
- Git
- winsock
- machine learing
- Cocos2d-x
- ios
- rxswift
- C
- Java
- OS
- 데이터베이스
- 자료구조
- C/C++
- SOCKET
- database
- 국내여행
- 운영체제
- JSP
- SwiftUI
- C++
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |