본문 바로가기

IT78

게임 프로그래밍 패턴 5장 ~ 7장 (22. 05. 17) Chapter5. 프로토타입 💡 원형이 되는prototypical 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성합니다. 프로토타입 디자인 패턴 같은 핵앤슬래시 게임을 만든다고 해보자. 몬스터들은 영웅을 잡아먹기 위해 떼지어 다닌다. 몬스터는 ‘스포너spawner’를 통해 게임 레벨에 등장하며, 몬스터 종류마다 스포너가 따로 있다. 게임에 나오는 몬스터마다 Ghost, Demon, Sorcerer 같은 클래스를 만들어보자. class Monster { // 기타 등등.. }; class Ghost : public Monster {}; class Demon : public Monster {}; class Sorcerer : public Monster {}.. 2022. 6. 19.
게임 프로그래밍 패턴 3장, 4장 (22. 05. 09) Chapter3. 경량 어떠한 판타지 게임에서는 거대한 숲을 보여주는 장면이 있다. 이러한 숲을 그리기 위해서는 수천 그루가 넘는 나무마다 각각 수천 폴리곤의 형태로 표현해야 한다. 메모리가 충분하다해도, 이러한 숲을 그리기 위해서는 전체 데이터를 CPU에서 GPU로 버스를 통해 전달해야 한다. 나무마다 필요한 데이터는 아래와 같다. 줄기, 가지, 잎의 형태를 나타내는 폴리곤 메시 나무 껍질과 잎사귀 텍스처 숲에서의 위치와 방향 각각의 나무가 다르게 보이도록 크기와 음영 같은 값을 조절할 수 있는 매개변수 class Tree { private: Mesh mesh_; Texture bark_; Vector position_; double height_; double thickness_; Color bark.. 2022. 6. 12.
게임 프로그래밍 패턴 1장, 2장 (22. 04. 26) 지식, 정보, 처리능력 ⇒ 코드리딩 시 사용. 지식 (Long Term Memory) → 익히면 된다. 정보 (Short Term Memory) → 한계가 있다. 보통 한 번에 12개의 정보까지만 저장할 수 있다고 한다. 처리능력 → 지식과 정보를 활용한 처리 능력. 왜 구조가 필요한가? 얼마나 쉽게 변경할 수 있는가 = 구조가 좋다는 증거이다. Component Pattern (디커플링 패턴) 양쪽 코드 중 한쪽이 없으면 다른 한 쪽을 이해할 수 없을 때를 커플링된 상태라고 한다. 디커플링이 된다는 것은 이해해야하는 양, 신경써야할 양을 줄이는 것과 같다. 코드의 유연성 ≠ 최적화 단순함 = 최소한의 코드로 원하는 목표를 이룰 수 있는 것 커맨드(명령) 패턴 → 객체나 함수에 위임 메멘토 패턴 → 현재.. 2022. 5. 1.
Image Load Library (Glide vs Picasso vs Fresco) feat. Image Caching 안드로이드에서 유명한 이미지 로드 라이브러리들은 대표적으로 Google의 Glide, Square의 Picasso, Facebook의 Fresco가 있다. 일단 이 이미지 로드 라이브러리를 비교해보기에 앞서, 안드로이드의 이미지 캐싱에 대해 알아보자! 이미지 캐싱은 왜 필요한가? 특정 URL 이미지를 매번 로드하는 것은 비효율적인 일이기 때문이다. 한번 로드된 이미지를 캐싱하여 사용하게 되면 '이미지 트래픽에 대한 비용 절감'과 'UX적인 속도 향상'이 일어나게 된다. Glide Google 라이브러리. 장점 : 속도가 빠르다. 사용법이 간편하다. 캐시를 위해 적은 양의 메모리를 사용한다. gif, 애니메이션 default처리 등 다양한 부가 기능이 필요할 때 사용한다. 안드로이드 공식에서 추천하는 라이.. 2021. 11. 3.
Stateless와 Stateful 이전에 NDC2021에서 서버 아키텍쳐 뜯어먹기!에서 나온 stateful 서버와 stateless 서버에 대해 얘기해보려 한다. 간단히 쿠키런에 stateful한 서버를 구현하기 위한 방식들에 대해 설명해주셨다. Stateless 서버 서버가 유저의 상태를 저장하고 있지 않는다. 필요할 경우 매번 DB 혹은 캐시에서 불러와서 요청을 처리한다. Stateful 서버 서버가 유저의 상태를 저장하고 있는다. 유저의 요청은 서버에 저장된 상태를 바탕으로 처리된다. Stateless 서버와 Stateful 서버의 구분은 다소 모호한 부분이 있기 때문에 이때에 발표에서는 위와 같은 발표로 두 서버를 정의하고 발표가 진행되었다. Stateful이란? 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하는 것.. 2021. 8. 26.
로드밸런싱 면접 질문으로 이런 류의 질문을 꽤 들어봤을 것이다. (특히나 이커머스 계열의 회사이거나 서버 직무라면) "안정적인 인프라를 만들기 위해서는 어떻게 해야할까요?" "블랙프라이데이와 같은 많은 트래픽이 예상되는 상황에서 미리 대처할 수 있는 방법은 무엇이 있을까요?" 그냥 로드밸런서를 사용해서, 서버를 계층화하여 부하를 분산시킨다. 와 같은 심플한 대답을 하다가, 최근에 본 다대다 면접에서 어플리케이션 / 서버 파트별로 꽤 상세하게 대답한 다른 면접자를 보면서 한 번 되짚어볼 필요가 있다고 생각해서 주제를 선정하게 되었다. 기본적으로 많은 트래픽이 발생한 경우 서버에서 대처하는 방법은 크게 2가지이다. 스케일 업(Scale Up): 서버에 CPU나 RAM 등을 추가하여 서버의 하드웨어 스펙을 향상시키는 방.. 2021. 6. 10.
컴퓨터 비전 스터디 7주차 : 21.05.23 1. 에지 검출의 기초 물체의 경계에서는 명암값에 급격한 변화가 일어난다. 그에 비해 물체 내부나 배경 영역은 변화가 없거나 있어도 작은 변화만 발생한다. 이것이 바로 에지 검출edge detection의 핵심 토대이다. 에지 : 영상의 명암, 컬러, 또는 텍스처와 같은 특성이 급격히 변화하는 지점 모든 에지 검출 알고리즘은 변화를 측정하고 변화량이 큰 곳을 에지로 취하는 원리를 따른다. 1. 디지털 영상의 미분 수학에서 변화를 측정하는 기초 이론은 미분이다. 하지만 컴퓨터 비전이 다루는 디지털 영상은 연속 공간이 아닌, 이산 공간에서 정의된다. 따라서 이산 공간에서 도함수를 근사화하는 방법이 필요하다. Δx를 얼마로 할 것인지가 핵심인데, 이산 공간에서 가장 작은 단위는 1이므로 Δx = 1이라고 가정.. 2021. 5. 24.
컴퓨터 비전 스터디 6주차 : 21.05.09 Chapter 2 연습문제 1. 명암 단계가 [0, 9]이고 크기가 5 X 5인 영상 (1) 히스토그램을 구하시오. h = (1, 3, 4, 6, 5, 1, 1, 3, 1) h(l) = (0.04, 0.12, 0.16, 0.24, 0.2, 0.04, 0.04, 0.12, 0.04) (2) 히스토그램 평활화를 위한 매핑 표를 구하시오. c(l) = (0.04, 0.16, 0.32, 0.56, 0.76, 0.8, 0.84, 0.96, 1) = 누적 히스토그램 (3) 평활화된 영상을 제시하시오. out(l) = (0.36, 1.44, 2.88, 5.04, 6.84, 7.2, 7.56, 8.64, 9) 1 1 3 3 3 0 1 5 7 5 3 5 8 9 5 7 7 9 9 9 5 7 7 7 5 2. 연결요소 번호 .. 2021. 5. 22.
컴퓨터 비전 스터디 5주차 : 21.04.25 5. 다해상도 업샘플링upsampling : 해상도를 늘리는 영상 처리 연산 다운샘플링downampling : 해상도를 줄이는 영상 처리 연산 다양하게 변화된 상황(EX. 어떤 영상에서는 사람이 영상 전체에 나타나고, 다른 영상에서는 아주 작게 나타남)에 상관없이 물체를 안정적으로 찾아내고 인식하는 것은 컴퓨터 비전의 궁극적인 목표 중 하나이다. 위의 이미지는 이러한 요구에 따라 고안된 기법인 영상 피라미드image pyramid이다. 피라미드는 해상도가 다른 여러장의 영상으로 구성된다. (f0 ~ f3) 이를 다중 해상도multi-resolution 영상이라고 부른다. 이 구조는 *거침과 세밀함 처리 방식에서 강점을 제공한다. *거침과 세밀함coarse-to-fine 처리 방식 : 저 해상도의 거친 영.. 2021. 5. 2.
Reactive Programing이란? * 이 글은 전적으로 개인적으로 공부하면서 중얼거리는 글입니다... 틀린 내용이 많을 수도 있습니다.. 리액티브 프로그래밍....맨날 들을 때마다 머리가 아프다... 왜냐면 아직도 난 이것에 대해 감을 못잡았기 때문이다... 비동기적인 데이터를 처리할 때 유용하다는 건...잘..알겠다... 코딩하면서 쓰다보면 대충 그런거 같더라... 대충 그런거 같다로 넘기는 것들이 한 열댓개가 넘어가자 이해도가 미쳐돌아가기 시작했다.. 살려줘.... 심지어 RxJava, RxKotlin 같은 식으로 쓰는데 나는 Reactive Programing == Rx라고 생각했건만 그것도 아니라는데, 미쳐돌아가는 대 환장 이해도속에 공부를 시작해보도록 ... 하자.. 자칫하다간 아무도 이해못하는 웅앵웅이 될 수 있으니 아주 처음.. 2021. 4. 28.