분류 전체보기 115

[운영체제 이해하기 1] 운영체제란?

과거의 컴퓨터 컴퓨터가 개발된 초창기에는 하드웨어 자체를 관리하는 일과 실제 수행시킬 프로그램을 작성하는 일을 사용자가 다 해야했습니다. 즉 프로그램을 컴퓨터에서 수행시키려면 사용자가 시스템을 직접 시작시키고 컴퓨터에 로딩해 수행해야 했습니다. 하지만 이러한 방법이 비효율적임을 인식하고 컴퓨터가 자동적으로 일을 처리해주도록 만들 수는 없을까? 라는 고민에서 탄생한 것이 바로 운영체제입니다. 운영체제의 정의 운영체제는 영어로는 Operating System으로 컴퓨터의 하드웨어 바로 윗단에 설치되는 소프트웨어를 말합니다. 운영체제는 사용자가 하드웨어를 다루는 것이 쉽지 않으므로, 하드웨어 위에 기본적으로 탑재되어 전원을 켰을 때 사용자가 손쉽게 사용할 수 있도록 만들어줍니다. 메모리 소프트웨어가 컴퓨터 시..

운영체제 2023.05.29
[UE4] 내적(DotProduct) 와 외적(CrossProduct)에 대한 이해

게임 개발에 있어 벡터 연산은 물리엔진 쪽으로 깊게 들어가면 빼놓을 수 없는 요소다. 3D공간에서 특히 벡터는 직관적이며, 여러가지 문제를 훨씬 효율적으로 해결해준다. 그래서 속도, 바람, 충돌 등 많은 물리계산이 벡터로 표현된다. 내적(DotProduct) 임의의 벡터 A와 B를 가정해보자. 벡터의 내적은 A와 B의 크기를 곱하고 사이각의 Cos값을 곱한 값이다. 결과값은 당연히 스칼라 값이 된다. 그렇다면 내적은 어디에 사용하는 것일까? 1. 두 벡터의 사이각 구하기 두 벡터의 사이각을 내적을 통해서 구할 수 있다. 게임에서 두 벡터의 값을 구하는 건 큰 문제가 아닐 것이다. 이 두 벡터를 내적하면 사이각을 구하고 이는 여러 게임 요소에 사용될 수 있다. 2. 적이 내 앞에 있는지 뒤에 있는지 나와 ..

UE4 2023.05.15
[Unity] 코루틴이란?

코루틴이란 시간의 경과에 따라 일련의 절차적 단계를 수행시키는 로직을 구현하는 데 사용되는 객체이다. 사실 Update함수에서도 가능한 내용들이지만 초당 호출이나, 매 프레임마다 굳이 호출이 필요하지 않은 부분을 매 프레임마다 호출하는 것은 바람직한 로직이 아니다. 코루틴의 역할 코루틴은 함수를 호출한다. 함수는 한 프레임에 호출되어 완료된다. 이때 함수는 IEnumerator 형을 반환 값으로 가지는 함수를 사용하고, IEnumerator에서 사용하는 다양한 yield return 구문을 사용해 흐름을 제어한다. yield return yield return 구문에는 아래와 같이 yieldInstruction 클래스를 사용한다. yield return null : 다음 프레임에 실행을 재개한다. yie..

Unity 2023.05.13
[Unity] 열거자 인터페이스 (IEnumerator)

이게 뭔데? 유니티 개발을 하면서 한번쯤은 다들 코루틴에 대해 접해보았을 것이라 생각한다. 코루틴을 사용하기 위해 StartCoroutine 함수를 사용할 때 인자로 넘겨주는 값이 바로 이 열거자 인터페이스이다. Current, MoveNext(), Reset()을 포함하였을 때 인터페이스를 사용할 수 있다. private Coroutine shopOpen = null; // 코루틴 선언. shopOpen = StartCoroutine(ShopOpen()); //코루틴 정의. IEnumerator ShopOpen(){...}; // 열거자 인터페이스. 무슨 기능을 하는데? 유니티에서 IEnumerator은 작업을 분할하여 수행하는 함수라고 생각하면 편하다. IEnumerator GetNumberIEnum..

Unity 2023.05.13
[C#] 프로퍼티란 무엇인가?

C++과 언리얼에 익숙해져 있던 나에게 프로퍼티는 말그대로 일종의 속성같은 것이었다. 오랜만에 C#으로 돌아와 문법을 되새기려니 프로퍼티의 개념이 조금 다르다는 것이 생각났다. 우리는 객체 지향언어의 특성 중 하나인 정보 은닉화를 염두에 두고 코드를 작성하여야 한다. 그러다보니 어떠한 변수를 private으로 선언하고 상황에 따라 get, set 함수를 정의해서 변수에 직접 접근하는것을 제한한다. 하지만 매번 return을 써가며 함수를 정의하는 것은 누구에겐 귀찮은 일이 아닐 수 없다. 그래서 C#에는 프로퍼티라는 것을 제공한다. 프로퍼티는 선언한 변수의 값을 외부에서 접근할 수 있도록 하면서 캡슐화를 지원하는 언어의 한 요소이다. / 자동 구현 프로퍼티 class PropertyTest{ privat..

Unity 2023.05.13
싱글톤(Singleton) 패턴이란?

싱글톤 패턴이란? 애플리케이션이 시작될 때, 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴. 간단히 말하면 하나의 인스턴스만 생성하여 사용하는 디자인 패턴이다. 인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용하는 것이다. 구현 방법 생성자가 설령 여러번 호출되더라도, 실제로 생성되는 객체는 하나이며 최초로 생성된 이후에 호출된 생성자들은 이미 생성한 최초의 객체를 반환시키도록 만들어야 한다. (보통 생성자를 private으로 선언해 다른 곳에서 생성하지 못하도록 만들고, public으로 get()함수를 만들어 이를 통해 최초의 객체를 받아 사용하도록 구현한다.) 쓰는 이유는? 객체는 생성할 때마다 메모리 영역을 할당받아야..

디자인패턴 2023.05.13
객체 지향이란?

우선 객체란 프로그램 동작의 주체가 되는 요소를 의미합니다. 모든 객체에는 상태와 동작이 존재하는데 보통 상태를 멤버 변수, 동작을 함수와 연결지어 이야기합니다. 객체 지향은 말 그대로 객체를 지향하는 즉, 객체를 통해 코드를 구성하는 방법론이라고 정의할 수 있습니다. 객체 지향은 왜 사용할까? 일단 절차지향 방식과 비교했을 때 객체지향은 생산성과 유지보수 용이성이 좋아서 개발자가 개발을 비교적 쉽고 빠르게 수행할 수 있기 때문이라고 생각합니다. 어떠한 면에서? 모듈화된 객체를 기반으로 코드가 작성되기 때문에 코드 재사용이 편리하고, 만약 객체를 수정할 경우 해당 객체를 사용하는 곳에 모두 일괄적으로 적용되니 유지보수가 간편합니다. 그리고 업무 분담이 쉬워 큰 큐모의 프로그래밍에 유리합니다. 단점은? 절..

C++ 2023.05.13
클래스, 객체, 인스턴스란 무엇일까?

1. 클래스 클래스는 객체의 설계도이다. 2. 인스턴스 프로그램이 실행되면 내가 설계한 클래스에 대한 정보가 메모리에 로드된다. new라는 키워드를 사용하면 독립된 데이터 공간(변수)를 실제 메모리상에 가지는 실체화가 되는데 이것을 인스턴스라고 한다. 한마디로 인스턴스는 클래스(설계도)를 실제로 구현한 것이다. 3. 객체 인스턴스와 같은 맥락에서 종종 사용된다. 동일한 인스턴스 여러개가 맵에 생성되어 있다고 가정할 때 이것들을 보통 객체라고 부른다. 한마디로 정리하면 "객체는 소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도가 클래스이며, 이 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스이다. 인스턴스는 객체에 포함되는 개념이라고 볼 수 있다.

C++ 2023.05.13
[인공지능 응용] loss값을 동적으로 조절하기

테스트 코드 #Pretrained NN이 항상 1이 나오도록 학습시킨다. #Gound Truth를 1로 넣어주고 학습 시킨 후 모델 저장, 이후 test 해보면 1에 가까운 값이 나온다. #하지만 1을 넘기는 값이 나오는 문제가 발생. import torch import torch.nn as nn import torchvision.models as models from torch.autograd import Variable from torchsummary import summary from tensorboardX import SummaryWriter #cuda로 보낸다 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') print(..

수업내용 정리 2023.05.12
[인공지능 응용] Tensorboard로 그래프 출력하기

테스트 코드 import torch import torch.nn as nn import torchvision.models as models from torch.autograd import Variable from torchsummary import summary import matplotlib.pyplot as plt import numpy as np from tensorboardX import SummaryWriter #1) 텐서보드 생성 tf_summary = SummaryWriter() #tf_summary = SummaryWriter("./") #특정 폴더 #cuda로 보낸다 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu'..

수업내용 정리 2023.05.12