[Misc] Software License
데이터 직렬화란 직렬화의 개념을 검색해보면 보통은 메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 방식으로 변환하는 것이라고 서술한다 나에게는 선뜻 와닿지 않는 설명이다
CI/CD 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법 지속적 통합, 지속적 배포, 지속적 서비스 제공 이러한 프로세스를 CI/CD 파이프라인이라 하며, 애자일 방식의 협력을 통해 실행
개요 LLVM을 사용하여 IL을 고도로 최적화된 네이티브 코드로 변환하는 컴파일러
GC 기본사항 CLR에서 자동 메모리 관리 역할을 하기 위해 GC를 둔다 사용자는 메모리 해제 등 관리 작업을 위한 코드를 작성하지 않아도 된다 메모리 누수 및 메모리 반환, 해제된 메모리에 접근 등 문제를 해결 GC에 의해 효율적으로 메모리를 할당
Value Type 값이 바로 할당되는 타입 직접 값을 가지고 있다 int, float, char 등이 이에 해당한다 System.ValueType으로부터 상속
Virtual Table의 구조 C#에서 모든 클래스는 System.Object 클래스에서 상속되므로 VTable을 갖는다 기본적으로 ToString, Equals, GetHashCode, Finalize 메서드를 VTable에 갖는다 Base클래스가 가상 메서드가 없다면 이외의 메서드들은 VTable Slo...
추상적 자료형 ADT 자료 자체의 형태와 연산을 수학적으로만 정의한 것
Update의 비용
SpriteRenderer 어떤 hierarchy에도 배치할 수 있다 Transform으로 조정한다 transparent geometry queue를 통해서 render된다 default material을 사용하는 경우 자동으로 최적 메쉬를 생성한다 draw call을 줄이기 위해 sprite at...
Value type이면 모두 stack에 저장된다? Value type은 stack에 저장될 수 있다 항상 stack에 저장되는 것은 아니다 프로그래머는 특정 객체에 대해 stack에 저장되는지 heap에 저장되는지를 알아야할 필요가 있었다 사용자에게 노출되지 않은 상태로 메모리를 관리하는...
닷넷 프레임워크
Struct 값 타입 allocation 및 deallocation 시 참조 타입보다 소요가 적다 stack에 저장 nested struct 구조인 경우 inline member들은 private by default
string vs String
값 형식 vs. 참조 형식
Difference between Array, ArrayList, List Array
컴퓨터 프로그램을 만드는 방식 2가지
static const in C++
유니티의 Entity Component System
캐시 Cache CPU가 빠른 속도가 데이터를 주고 받을 수 있도록 도와주는 메모리 Locality of Reference 원리에 따라 메모리 저장소의 데이터를 미리 가져와 보관
CPU의 차이 레지스터의 bit 폭 차이 레지스터의 크기가 16bit이면 16bit CPU 레지스터의 크기가 64bit이면 64bit CPU
벡터의 한계 어떤 물체를 화면에 표현하려면 벡터만으로는 부족 벡터는 크기와 방향 성분만을 가짐 위치 정보가 필요 위치는 무엇으로 표현하는가? 점 point
메모리(RAM) 점유율의 상승하면? 메인 드라이브에 가상메모리 영역을 설정 해당 영역을 메모리처럼 사용 낮은 단계에 가상 메모리가 잡힐수록 엑세스 속도가 느려짐 이 같은 이유로 RAM 메모리가 많을수록 좋다는 것
크기 변환 벡터의 크기와 방향 중 크기만 변경하는 것 각 성분에 각 계수만큼의 크기를 곱해 양을 바꿈
선형 변환과 행렬 선형 변환이란 하나의 벡터 공간을 다른 벡터 공간으로 변환하는 함수 선형 변환을 정의하는 두 특성이 변환 후에도 벡터 공간의 조건을 그대로 만족하기 때문
행렬 Matrix m x n 행렬에서 m = n 이면 정방행렬 square matrix 이다 모든 요소가 0이면 영행렬 zeron matrix 이다 어떤 행렬의 행과 열을 뒤바꾸면 전치 행렬 transpose matrix라 한다 전치한 행렬이 원래 행렬과 같다면 대칭 행렬 symmetric matrix라 한다 ...
Content Delivery Network 정의 지리적으로 분산된 여러 개의 서버 컨텐츠를 사용자와 가까운 서버에서 전송해 속도면에서 이득 중앙 서버에서 개별 사용자에게 컨텐츠를 전송하려면 트래픽 과부하 및 전송 속도, 시간 문제 발생 파일 복사본을 캐싱하여 각 데이터 센터에 저장
일급 객체 모든 요소는 함수의 실제 매개변수가 될 수 있다. 모든 요소는 함수의 반환 값이 될 수 있다. 모든 요소는 할당 명령문의 대상이 될 수 있다. 모든 요소는 동일 비교의 대상이 될 수 있다.
유클리드 공간 임의의 점과 다른 한 점을 연결하는 직선은 단 하나다 임의의 선분은 양 끝으로 얼마든지 연장할 수 있다 임의의 점을 중심으로 하고 임의의 길이를 반지름으로 하는 원을 그릴 수 있다 R은 실수로 이루어진, R^2은 2차원 공간, R^3는 3차원 공간을 의미
선형변환 (Linear Transformation) 대수학 미지수와 미지수를 사용하는 수학
예시 case 1
readonly vs. const
Waterfall 워터폴
Host 네트워크에 연결된 모든 종류의 장치를 Node 노드 중 IP 주소(네트워크 주소)가 할당된 것들을 Host Host들끼리 데이터를 송수신한다 데이터의 송수신은 Host가 실행하는 Process가 수행
연결 지향 vs. 비연결 지향
프로토콜 Protocol 네트워크 환경 내 모든 기기가 서로 통신하며 데이터를 주고 받으려면, 각 기기에는 사전 협의된 통신 협약/규약이 필요 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계 신호 체계, 인증, 그리고 오류 감지 및 수정 기능을 포함 구현되는 방법은 독립적이나, 하드웨어 또는 소프트웨어 그리고...
HTTP HyperText Transfer Protocol HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜 Plain text로부터 JSON 데이터 및 XML과 같은 형태의 정보도 송수신 가능 보통은 클라이언트가 어떤 정보를 HTML 형태로 받고 싶은지, JSON 형태로 받고 싶은지 명시 ...
Precompiled Header(미리 컴파일된 헤더) 헤더를 미리 컴파일 해두는 것 자주 변경되지 않는 긴소스를 미리 컴파일하여 컴파일 결과를 별도의 파일에 저장 다시 똑같은 헤더를 컴파일할 경우 해당 파일을 처음부터 컴파일하지 않고, 미리 컴파일된 헤더 파일을 사용해 컴파일 속도를 월등히 향상
동적 형식 dynamic 변수 및 해당 멤버에 대한 참조 사용에 대한 컴파일 타임 검사를 패싱 런타임에서 확인 대부분의 상황에서 object 처럼 동작 그러나 컴파일러가 형식을 검사하지 않은 상태 컴파일 타임을 거치며 object 타입으로 변환 런타임에서 dynamic...
Gizmo 씬 뷰에서 편집이나 디버깅을 위해 오브젝트의 위치나 범위, 특정 요소를 가시화
Lua 스크립트 절차식 명령식 스크립트 언어 간단한 자료구조 : boolean, number, string, table 핵심 모듈의 크기가 120KB 이하 게임 개발에 자주 사용되는 Python에 비해 빠른 실행 속도를 가짐 오픈소스
Event 한 object에 의해 어떤 action이 발생했음을 알리는 notification .NET에서는 observer design pattern을 사용
정적 라이브러리(Static Link Library) 필요한 함수를 프로그램 코드에 붙여 컴파일 시 프로그램 자체에서 참조 (Compile-Time) lib 파일은 하나의 거대한 파일이 생성 재사용성이 떨어짐 어플리케이션 업데이트 시 새로운 버전으로 작성 다른 어플리케이션에 사용 불가 하지만 버전 ...
인코딩이란?* Encoding - 문자나 기호를 암호화하는 것 Decoding - 암호화를 해독하는 것, 복호화 인코딩과 디코딩은 정해진 기준에 따라 입력되고 해독해야 하는데, ASCII나 UNICODE와 같은 문자셋이 그것이다. Base64 인코딩은 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문...
TryGetValue vs. ContainsKey? ```csharp // key가 있는지 체크 public bool ContainsKey(TKey key) { return (this.FindEntry(key) >= 0); }
default 연산자 default 키워드는 해당 변수 타입의 기본 또는 빈 상태를 반환 참조 형식(class, delegate, …)의 default 값: null 값 형식 (struct, enum, …)의 default 값: all-zeroes value int 0, DateTime 0001-01-01 00:00:0...
Managed vs. Unmanaged Code Unmanaged code란 컴퓨터 구조, 프로세서에 특화되어 그에 의존하는 코드 C#에서는 unsafe 키워드를 이용하는 코드 프로그래머에 의해 직접 관리 Managed code란 .NET 프레임워크에서 구동하는 C# 코드 자체 ...
lock 키워드 개체에 대한 뮤텍스를 획득하고 signal과 unlock을 실행
DontDestroyOnLoad 새로운 Scene이 로드될 때, 자동으로 파괴되지 않는 target 오브젝트를 생성 새 레벨이 로드되면 Scene의 모든 오브젝트들은 파괴되고, 새 레벨의 오브젝트들이 로드된다. 레벨 스위치 중에 오브젝트를 보존하기 위해 DontDestroyOnLoad 사용 해당 오브젝트가 component이거나 gam...
sealed 키워드 클래스에 적용된 경우 다른 클래스가 해당 클래스에서 상속하는 것을 막음
C# 포인터 C# 대부분의 코드는 확인할 수 있는 안전한 코드 .Net 도구에서 코드가 안전한지 확인 가능 원시 메모리를 할당하지 않고, 포인터로 직접 메모리에 엑세스하지 않음 경우에 따라 앱의 성능을 향상 포인터가 필요한 네이티브 함수를 호출하는 경우 필수 보안 및 안전성 이슈 발생...
Job System
동기와 비동기 동기 어떤 operation을 실행시켰을 때 결과값이 도출될 때까지 프로그램은 멈춰서 기다려야 함 비동기 언제 값이 도출될 지 보장할 수 없고, 그 동안 프로그램은 다른 프로세스를 진행할 수 있음 async / await는 위 중 비동기 프로그래밍을 위해 사...
확장 메서드란 기존 제공되는 클래스/구조체/인터페이스의 구현을 직접 변경하지 않고 기능을 확장해 사용 기존 데이터 타입 (int, float 등)의 class에도 적용 가능
이미지 압축 PNG/JPG 등으로 압축했더라도 GPU 메모리에 저장할 때는 압축이 풀린 상태로 저장 GPU가 이 파일을 그대로 읽어들일 수 없기 때문 대역폭 사용량에 초점을 맞춘 파일 형식 GPU가 텍스쳐로 쓰기 위한 압축 형식이 아님 가변 비율 인코딩을 수행하기 때문 ...
Frustum Culling Camera (View) Matrix Far/Near 값으로 조정 원거리 Culling objects의 부자연스러움 감추기 위해 Fog 사용
메모리 클럭 메인보드에서 발생하는 램 동작 주기 신호(MHz) 메모리 버스 폭 메모리 입출력 라인 개수(bit) 메모리 대역폭 Memory Clock * Memory bus width 한번의 클럭 신호를 통해서 처리할 수 있는 용량 GPU가 읽을 수 있는 데...
드로우콜 // OpemGL의 DrawCall glDrawArrays(); // vertices rendering glDrawElements(); // indices rendering CPU에서 그래픽 API 호출을 통해 GPU에 렌더링을 명령하는 것
SafeArea 모바일 해상도에서 전면 카메라 영역 침범하지 않게 보장해주는 영역 노치폰에 대해 ui 배치 대응을 위해 설정
물음표 연산자 두개가 연속적으로 쓰이는 예시
Property 정보은닉을 더 간결하고 간단하게 구현하도록 허용 get / set 메서드를 대신해 가독성을 보완
partial 키워드 C#에서는 C/C++와 달리 cs 파일 하나에 클래스 선언과 정의가 작성 클래스가 커질 경우 가독성이 떨어짐 Partial 키워드를 제공함으로써 여러 파일에 하나의 클래스를 작성하도록 허용 대리자(delegate) 또는 열거형(enum) 선언을 할 때 partial 한정자를 사용할 수 없음 ```csharp /...
byte와 char의 사이즈 byte: 1바이트 숫자 자료형 char: 2바이트 문자 자료형 1바이트 아님! 대부분의 .Net 언어의 문자열은 유니코드 utf-16을 디폴트로 지원
in 키워드 in 매개변수로 전달되는 변수는 메서드로 전달되기 전 반드시 초기화 인수가 참조로 전달되지만, 수정되지 않음 오버로딩 규칙 ```csharp class InOverloads { // 오버로딩 허용 public void SampleMethod(in int i) { } public void SampleMeth...
에셋번들 유니티 프로젝트에 사용할 리소스들을 묶은 것 유니티에서 에셋 번들 생성 외부 스토리지(서버)에 저장 프로젝트의 런타임 중 번들을 다운로드 다운로드한 번들에서 개별 에셋을 로드해 사용
Canvas Unity에서 모든 UI 객체를 렌더링 하기 위한 루트 컴포넌트 기본적으로 4개의 컴포넌트를 포함 RectTransform Canvas Canvas Scaler Graphic Raycaster
var 암시적 형식 컴파일러가 compile time에 자료형을 결정 제약 조건 지역 변수에만 사용 가능 변수 선언과 함께 초기화 필수 null / 익명 메서드 / 메서드 그룹으로 초기화 불가
Dictionary의 종류 Dictionary Key와 Value의 Pair를 갖는 자료구조 Generic 해시테이블 구조를 사용
리플렉션의 개념 일반적으로는 클래스를 통해 객체를 생성 사용자(프로그래머)는 클래스의 필드와 메서드를 알고 있고, 사용하는 데 불편함이 없다
as와 is 형변환을 위한 예약어 개발자에 의해서 의도적으로 downcasting하도록 도와주는 연산자 downcasting 베이스 클래스가 파생 클래스로 캐스팅 되는 것 upcasting 파생 클래스가 베이스 클래스로 캐스팅 되는 것
9 Slicing 하나의 텍스쳐로 다양한 사이즈의 재사용 가능한 이미지로 설정하는 방법 리사이징 시, 이미지를 왜곡하지 않음
where 키워드 사용 예시
메서드에 선언된 new modifier base class의 메서드를 숨김 upcasting 하여 base class의 메서드를 사용할 수 있으나 이는 의도된 디자인에 반하는 행위이므로 위험
delegate(대리자) 키워드 delegate는 메서드를 다른 메서드에 인수로 전달하는 데 사용 형식이 일치하는 구조의 모든 메서드는 대리자에 할당할 수 있다 메서드는 정적/인스턴스일 수 있다. delegate 속성 함수 포인터와 유사하지만, 객체 지향적으로 인스턴스 및 메서드를 캡슐화한다. 메서드를 매개 변수로 전달할 수 ...
서브루틴(Subroutine) C언어 등에서 일반적으로 사용하는 함수 시작할 때 진입하는 지점이 하나 존재하고, 종료되는 지점을 설정할 수 있다. 서브루틴은 시작점과 종료점이 1개인 코루틴에 포함
Synchronization 동기화 복수 이벤트의 유연한 실행 및 조화를 위해 조정을 가하는 것 구속 조건은 아래와 같다 Serialization: 하나의 이벤트가 끝난 다음에 다른 이벤트가 발생 Mutual Exclusion: 두 개의 이벤트가 한 시점에 동시에 발생하고 있지 않음
lock-base 코드의 몇가지 문제점 lock 순서를 제대로 관리하지 않으면 데드락의 가능성 priority inversion - 낮은 우선 순위의 스레드가 진행되기 위해 높은 순위의 스레드 락을 요구하는 경우 atomic한 operation이 오래 걸리는 경우, 다른 스레드들은 기다려야 함
플래시 메모리 전기적으로 데이터를 지우고 다시 기록할 수 있는 비휘발성 메모리입니다.
반도체란? 전기적으로 도체와 부도체 사이의 성질을 띠고 있는 물질
개요 프로세스란 메모리 상에 실행되고 있는 프로그램 프로그램 - 작업을 위해 실행할 수 있는 파일
메모리 관리 프로그램을 실행하기 위해 모든(또는 일부) 실행 구문과 데이터의 전부(또는 일부)은 메모리 안에 있어야 함 CPU가 유저 작업에 반응하고 최적화하기 위해 어떤 데이터를 메모리 안에 넣을지를 정하는 작업 Activities: 어떤 메모리가 쓰이는지, 누구에 의해 사용되는 지를 트래킹 어떤 프로세스,...
스케줄링 프로세스가 실행되기 위하여 OS 스케줄러에 의해 자원을 할당받는 것 User processes System processes
OS란? 사용자와 컴퓨터 하드웨어를 매개해주는 중간 프로그램 프로그램을 실행시켜주고 사용자가 문제를 쉽게 풀도록 도와줌 컴퓨터 시스템을 편리하게 사용토록 도움 컴퓨터 하드웨어를 더 효율적으로 사용하도록 도움 Resource Allocator 모든 리소스를 관리 제어 ...
인터럽트 (Interrupt) CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능 대부분의 컴퓨터는 한 개의 CPU를 사용 한 순간에는 하나의 일 밖에 처리할 수 없음 어떤 일을 처리하는 도중에 우선 순위가 급한 일을 처리해야하는 경우 발생
컴퓨터 시스템 구조 Four Components of a Computer System
저장장치 Storage 최소 단위는 bit 8 bits = 1 byte 컴퓨터 구조상 native unit of data는 word = one or more of bytes 32 bit or 64 bit 구조 주 메...
Compiled Language CPU가 바로 이해할 수 있는 기계어로 소스코드를 변환 소스코드 처리와 분석에 많은 시간 소요 일반적으로 실행이 빠름 컴파일된 기계어는 플랫폼 의존적
개념 동기 vs 비동기 처리해야 할 작업들을 어떠한 ‘흐름’으로 처리 할 것인가에 대한 관점 블로킹 vs 논블로킹 처리되어야 하는 (하나의) 작업이, 전체적인 작업 ‘흐름’을 막느냐 안막느냐에 대한 관점
Component란? GameObject 에 부착되는(Attached) 모든 것들이 상속받는 기반 클래스. MonoBehaviour 는 Unity 의 모든 스크립트가 상속받는 클래스 사용자가 Unity 엔진의 작동 방식을 이해하지 못하더라도 코드를 작성할 수 있도록 미리 만들어 둔(built-in) Behaviour 클래스이자 스크립트 명...
interface 특정 메서드들의 조합을 고려
네트워크 Network 컴퓨터 네트워크 또는 컴퓨터망은 노드들이 자원을 공유할 수 있게 하는 디지털 전기통신망의 하나
TCP란?(Transmission Control Protocol) 인터넷을 경유해 통신하는 연결 지향성 프로토콜 에러 체킹을 지원 데이터의 완전한 전송을 보장 패킷의 전송 순서를 보장 TCP는 FLOW CONTROL을 제공함
컴포넌트란? 독립적, 교체에 용이하고, 재사용 가능한 기능들의 집합 다른 컴포넌트와 상호작용하기 위해 디자인된 소프트웨어 객체 기능을 수행하기 위한 목적이 있고 그에 맞는 인터페이스를 제공