전체 글
해시(hash)와 암호화(Encryption) 차이점, 사용
차이점 둘 다 암호화 기법이지만 Hash는 단방향 암호화 기법이고 Encryption은 양방향 암호화 기법이다. 쉽게 설명하면 Hash는 평문을 암호화된 문장(텍스트)으로 만들어주는 기능을 하고, Encryption은 평문을 암호화된 문장(텍스트)로 만들어주는 기능을 하고 + 암호화된 문장을 다시 평문으로 만드는 복호화 기능도 한다. 해시 (hash)는 어떻게 암호화가 이루어질까? 예시로 설명하면 평문의 비밀번호 "jeongpro1234"를 해시함수(해시 알고리즘)를 이용하여 고정된 길이의 암호화된 문자열로 바꿔 버리는 것이 해시를 이용한 암호화 기법이다. * 해시에서 알아야 할 것들 - 해시 알고리즘 및 밑에서 얘기할 암호화 알고리즘은 종류가 다양하며, 알고리즘은 모두에게(해커에게도) 공개되어있다. (..
가상 메모리와 가상 주소 공간
가상 메모리와 가상 주소 공간 서로 다른 개념이지만 혼용되서 사용된다. 가상 주소 공간은 각 프로세스 당 주어지는 논리적인 공간이다. 가상 주소 공간의 크기는 물리 메모리(RAM)의 크기와는 독립적이며, 레지스터 크기에 종속적이다. Word Size가 32비트인 컴퓨터의 경우, 일반적으로 레지스터의 크기도 32비트다, 이는 2^32 개의 주소를 나타낼 수 있음을 의미하고, 1 바이트당 주소가 주어지므로 최대 4GB의 가상 주소 공간을 갖을 수 있다. 같은 원리로 64비트 컴퓨터의 경우 2^64 바이트(16 엑사 바이트) 크기의 가상 주소 공간을 갖을 수 있게 된다. 프로세스의 주소 공간은 페이지(Page) 단위로 관리된다. 가상 주소 공간의 주소를 논리 주소라고 하는데, 모든 논리 주소가 반드시 물리적인..
에이전트의 정의
에이전트(Agent)는 인공지능 분야에 있어서 핵심 개념이 될 수 있다. 다음과 같이 정의를 내릴 수가 있다 "복잡한 동적 환경에서 목표를 달성하려 시도하는 시스템" 특징 특정 목적에 대해 사용자를 대신하여 작업을 수행하는 자율적 프로세스이다. 독자적으로 존재하지 않고 어떤 환경(운영 체제, 네트워크 등)의 일부이거나 그 안에서 동작하는 시스템이다. 지식 기반(Knowledge Base)과 추론 기능을 가지며, 자원 또는 다른 에이전트와의 정보 교환과 통신을 통해 문제를 해결한다. 스스로 환경의 변화를 인지하고 그에 대응하는 행동을 취하며, 경험을 바탕으로 학습하는 기능을 가진다. 분류 Simple Reflex Agents Condition-Action Rule을 내부에 가지고 있으며, 환경으로부터 받는..
[Unity] 모바일 빌드 방법 (IL2CPP, MONO)
IL2CPP 어셈블리 언어인 IL (Intermediate Language - 스택 기반 어셈블리 언어)를 C++ 소스 코드로 변환 C#이나 Unity 컴파일러가 작성한 IL를 C++ 코드로 바꿔서 apk나 exe 파일을 만들기 전에 C++로 어셈블리를 추가 할 수 있게 해주는 방법 (그래서 C코드로 변활할 수 있게 도와주는 NDK가 필요하다) 장단점 장점) 코드 크기를 줄일 수 있다. (사용하지 않는 유니티 모듈을 제거 할 수 있다) IOS 64 bit 빌드를 지원한다. 단점) 버그가 mono에 비해 많이 생긴다. 주로 리플렉션을 사용하는 JSON 라이브러리 빌드 시간이 mono보다 느리다 디버깅이 어렵다 Mono 빌드 SDK, JDK 필요 보통 많이 쓰는 방법 (빌드 속도가 빠름) 방법 유니티 Fil..
[LeetCode] 1 - Two Sum
class Solution { public: vector twoSum(vector& nums, int target) { unordered_map m; // 예시 2,7,11,15 / 9 for (int i = 0; i 2 : 0 * 9 - 7 = 2 > 2가 존재 * nums[i]=7 > 1, 9 * * int idx = target - nums[i]; if (m.find(idx) == m.end()) m[nums[i]] = i; else return { m[idx],i }; */ /* * 솔루션 2) 해당 값을 조합 * * 9 - 2 = 7 * m에 7이 없음 > m[2] = 0 * * 9 - 7 = ..
[LeetCode] 6 - Zigzag Conversion
class Solution { public: string convert(string s, int numRows) { string res; vector v(numRows); auto iter = s.begin(); int idx = 0; bool flag = true; // 1일 때 항상 일치함 if (numRows == 1) return s; // s의 시작점부터 실행 // 로직) 끝에 다다랐을 때 방향을 지정 while (iter != s.end()) { v[idx].push_back(*iter); idx = (flag) ? idx + 1 : idx - 1; if (idx == numRows - 1 || idx == 0) flag = !flag; iter++; } for (const auto& item..
Flow Free 3 - UI
UI Manager - 모든 UI들을 관리 / 로직 포함 캔버스에 직접 스크립트 추가하여 나머지 UI들은 자동으로 연동 딱히 다른 클래스 만들어서 이를 상속 받아 팝업 형태 할 정도로 개수가 많지 않아서 단순하게 구현 using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.SceneManagement; public class UI_Manager : SingletonLocal { [SerializeField] GameObject GameUI_Prefab; public GameUI g..
Flow Free 2 - 슬롯(그리드)과 파이프(연결선)
게임 매니저가 맨 후순위로 와야한다 슬롯 생성 맵에 존재하는 모든 그리드들이 Slot.cs 기반이 될거다, 실제로는 임의의 위치에 동그라미 생성을 해야하기 때문에 2개의 이미지를 겹쳐놨다, 추가로 Slot.cs는 선 색상, 이어서 할 수 있는 동그라미 정보 등 Grid 관련 데이터를 들고 있을거다. 아래는 옵션 Slot.cs using UnityEngine; using UnityEngine.UI; public class Slot : MonoBehaviour { RectTransform rect; public Image img; // 선 관련 정보 public Color color; public Vector3 pipePos; public int idx = 0; private void Awake() { im..
Flow Free 1 - 그리드 (맵) 생성
Grid Manager.cs 프리팹 생성 후 우클릭해서 사이즈에 맞게끔 생성 void InitGrid(int size) { gridObj = Instantiate(new GameObject(), transform); var layoutGroup = gridObj.AddComponent(); gridObj.name = $" Grid {size}x{size} "; var rect = gridObj.transform as RectTransform; rect.localPosition = mPos; rect.sizeDelta = mSlotSize; layoutGroup.padding.left = mLeftPadding; layoutGroup.spacing = new Vector2(15f, 15f); layoutG..
유니티 셰이더 기본 1 - Hello World
유니티에서 셰이더는 스크립트를 만들 때와 비슷하게, 프로젝트 뷰에서 우클릭-Create-Shader 하단에서 선택하여 제작할 수 있다. 이 중, 당분간 사용할 셰이더는 Standard Surface Shader, Unlit Shader이다. 직역하면 표준 표면 셰이더와 라이팅을 사용하지 않는 셰이더다 뭘로 만들어도 관계는 없으나, 일단은 Unlit Shader로 생성해보자. 아래는 Unlit Shader의 이름을 HelloWorld로 제작한 결과 Shader "Unlit/HelloWorld" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGR..