반응형

공부 624

나누기 연산자는 왜 다른 연산자에 비해 느릴까?

그건 그냥 나누기가 다른 연산자에 비해 복잡한 계산이 많이 필요하기 때문에 느린 것이다. 당장 컴퓨터가 아닌 손으로 여러자리 수의 숫자를 더하기/빼기/곱하기/나누기를 당장 생각해보아도 더하기/빼기/곱하기보다 나누기가 훨씬 단계도 많고 더 오래 걸린다. 이는 컴퓨터에서 똑같이 적용된다. 똑같은 일을 컴퓨터로 처리하려고 해도 마찬가지 일 뿐이다. 보다 자세한 얘기하자면 이는 기계어까지 파고들어가야 한다. 나누기 op code(idiv/div)는 명령어는 곱하기 op code(imul/mul) 명령어 보다 처리하는 데 더 많은 클럭 수를 차지하고, 이는 곧 시간을 많이 잡아먹는다는 것을 뜻한다. 출처에 가보면 댓글에 논문의 링크까지 넣어주셨다.. 😮 출처 : https://kldp.org/comment/615..

공부/기타 2022.12.22

<📃 개발자 이력서 잘 쓰는 팁>

회사에서 면접관 역할을 맡게 되면서 많은 이력서를 읽어 봤습니다. 이력서를 쓰는 사람의 입장에서 읽는 사람의 입장이 되어 보니 어떤 이력서가 더 눈에 띄는지, 어떤 이력서가 별로인지가 보이기 시작했어요. 그렇게 무수히 많은 이력서를 읽고 쓰며 터득한 이력서 작성 팁을 공유합니다! 🙆🏻‍♀️ 이력서 쓸 때 해야 할 것 이력서의 기본 원칙은 간단합니다. "읽는 사람을 생각하기." 아무리 많은 내용을 담아도, 읽는 사람을 고려하지 않은 이력서는 매력이 없습니다. 이력서를 쓸 때는 ‘이걸 읽는 채용 담당자가 면접 기회를 줄만큼 매력 있는 이력서인가’를 생각해봐야 합니다. 매력적인 이력서를 쓰기 위해 꼭 해야할 것 중 많은 개발자들이 놓치는 세 가지를 선정해 보았습니다. 1️⃣ 자신이 한 일을 비즈니스 임팩트와 ..

공부/자기계발 2022.12.22

float이 빠를까?, double이 빠를까?

결론부터 얘기하면 float 자료형과 double 자료형의 성능 비교는 하드웨어 및 소프트웨어 환경, 현재 작업 내용 등과 같은 다양한 요인에 따라 달라질 수 있어 빠름을 비교하는 것이 의미가 없다. 제일 중요한 건, 프로그램 소스코드를 짜면서 나에게 지금 필요한 것이 성능인지, 정밀도인지 생각하고 성능일 경우 float, 정밀도인지 double을 쓰면 된다. 일반적으로 float 자료형이 더 적은 메모리를 필요로 하고, 범위가 더 작기 때문에 double 자료형보다는 조금은 빠를 수 있다. 그러나, double 자료형은 정밀도가 더 높기 때문에 보다 float 자료형보다 더 넒은 값을 나타낼 수 있다. 게다가 요즘 출시되는 CPU는 정말 너무나도 뛰어나기 때문에 사칙연산을 기준으로 float : 단 정..

공부/기타 2022.12.22

내가 만나본 빠르게 성장하는 주니어 개발자들의 특징

본론에 앞서 이 글은 그동안 제가 만나본 성장이 빠르다고 느낀 주니어 개발자분들의 태도와 습관을 정리해보는 글입니다. 기술이나 학습등을 거론하며 '이런것만 배우면 당신도 빠르게 성장할 수 있습니다!' 류의 글은 아니고 그분들의 이런 태도와 습관이 성장에 영향이 있지 않았을까 정도의 글이라고 생각해주시면 되겠습니다. ✅️ 질문을 잘한다. 빠르게 성장하신 분들의 질문엔 2가지 공통점이 있었다. 1. 질문의 타이밍 대부분의 신입사원이나 주니어 개발자분들은 선배 개발자에게 질문을 하기 부담스러워 한다. 그래서 혼자 몇일을 끙끙거리다가 힘겹게 질문하거나 선배 개발자가 먼저 말을 걸어서 답을 얻는 모습을 많이 본다. 만약 알고싶던 내용이 선배 개발자가 바로 대답해줄 수 있는 것이었다면 오래 끙끙거린만큼 시간을 허비..

공부/자기계발 2022.12.22

1차원 배열과 2차원 배열의 성능 및 속도 차이

대게 일반적으로 2차원 배열보다는 1차원 배열을 사용하는 것이 더 빠릅니다. 왜냐하면, 1차원 배열의 값들은 메모리 블록들이 서로 인접한 위치에 저장되어 있어 프로세서가 보다 효율적으로 접근하여 사용할 수 있기 때문입니다. 반대로 2차원 배열의 값들은 메모리 들록들이 서로 인접한 위치에 저장되어 있지 않고, 힙 영역의 전체에 흩어져 있을 수 있으므로 프로세서가 1차원 배열보다 효율적으로 접근하기 어려울 수 있습니다. 즉, 2차원 배열보다 1차원 배열이 더 좋은 이유는 '오버헤드가 발생하지 않는다.'는 것입니다. 2차원 배열은 다차원으로 구성된 배열이므로 세로로 위치한 인자값를 읽을 때 내부적으로 메모리 포인터가 가로로 위치한 1차원 배열을 찾을 때 보다 건너뛰어야 하는 값이 더 크기 떄문입니다. 다음은 ..

공부/기타 2022.12.21

코드 작성 이전에 해놓아야 할 것

# 코드 작성 이전에 해놔야 할 것 제가 코드 작성에 앞서 꼭 하는 것은 코드로 표현할 대상(또는 목표)을 몇 줄의 문장으로 표현하는 것입니다. 꼭 큰 규모의 코드가 아니더라도 작은 함수 개발 또는 이슈를 수정하기 위한 코드를 작성하기 전에 문장으로 표현하는 것은 큰 이점이 있습니다. 첫 번째, 표현할 대상을 명확하게 만들 수 있습니다. 글로 어떤 대상을 표현한다는 것 자체가 대상을 점차 명확한 형태로 만들어가는 과정의 일부입니다. 두 번째, 자연스럽게 테스트코드로 이어질 수 있습니다. 작성한 문장을 보면 검증할 부분들이 보이게 됩니다. 검증할 포인트가 잘 정리되었으니 쉽게 테스트 코드를 작성할 수 있습니다. “소비내역 중 카페 소비내역을 뽑아내고 소비한 총 금액을 찾야겠어”라는 문장을 적고 작업한다고 ..

공부/자기계발 2022.12.21

Vector resize, reserve의 차이점

C++ 표준 템플릿 라이브러리(STL)에서 Vector 클래스는 새로운 요소들을 추가 및 제거할 때 동적으로 크기를 조절하는 시퀸스 컨테이너입니다. 이 중 벡터는 크기를 변경할 수 있는 두 가지 멤버 함수를 제공합니다. 하나는 resize()이며, 다른 하나는 reserve()입니다. 1. resize() resize()는 벡터의 사이즈(=크기, size)를 사용자가 지정한 사이즈(=크기, size)로 변경합니다. 만약 새 사이즈가 현재 크기보다 크면 새롭게 추가된 값들을 기본값으로 채우며, 새 사이즈가 현재 사이즈보다 작으면 기존 벡터에서 가지고 있던 값 중 초과된 인자값들은 제거합니다. 말로써 이해하기 어려울 경우, 다음 예제를 확인해보세요. #include #include int main() { /..

공부/C++ 2022.12.21

포인터(Pointer)와 참조자(Reference)의 차이

C++을 공부하다면 C언어도 있었던 포인터(Pointer)와 유사한 개념인 참조자(Reference)가 나타나게 된다. 언뜻 보면 둘을 사용하는 용도가 비슷한데, 해당 포스팅에서는 다음과 같이 5개를 알아볼 것이다 1. 참조자(Reference)란? 2. 포인터(Pointer)와 참조자(Reference)의 어떤 차이점이 있는가? 3. 내부적으로 어떻게 달리 동작하는가? 4. 왜 참조자(Reference)가 등장하게 되었는가? 5. 그렇다면 언제 포인터(Pointer)와 참조자(Reference)를 구분지어서 사용해야 할까? 에 대해서 알아보자. 1. 참조자(Reference)란? 이미 선언한 변수를 대신하는 또 하나의 변수입니다. 이해하기 쉽게 말하면 우리가 친구들을 이름으로 부르지 않고 '별명'으로 ..

공부/C++ 2022.12.20

코드에만 갇히지 않기

10년차가 되어도 여전히 자주 하는 실수 중 하나는, 문제를 정의하는 것부터 해결하는 흐름을 코드에서만 찾는다는 것입니다. 예를 들어, 웹사이트의 속도가 느리다는 제보가 어디선가 들어옵니다. A. 웹사이트의 속도가 느리대요! B. 어 왜 느리지? 코드 살펴볼게요. B. 코드에 불필요한 코드가 너무 많았네요. 다 제거해볼게요. B. 다 제거해서 배포했습니다. A. 그래도 속도가 여전히 느린 거 같아요! B. 오 이제 최적화할 수 있는 게 없는데...? 일단 이 대화에서 몇 가지 우리가 놓친 게 있어요. 1. 웹 사이트는 지속적으로 항상 느린가? 그 순간에만 느렸는가? 2. 속도가 느리다고 말한 사람의 환경은 어땠는가? 3. 속도 측정 도구 등을 이용해 측정할 수 있는가? 4. 속도가 빠르다 느리다에 대한 ..

공부/자기계발 2022.12.19

콜 바이 벨류(Call by Value)와 콜 바이 레퍼런스(Call by Reference)의 차이점

C#에서 함수에 인수를 전달하는 기본 방법은 "콜 바이 벨류(Call by Value)", 즉 값에 의한 호출입니다. 즉, 인자 값이 함수에 전달되고 함수 내에서 인자 값을 변경해도 함수 외부의 인자 값에는 영향을 미치지 않는다는 것입니다. 말로 설명하면 어려우니 간단한 예제를 보겠습니다. 다음 예제는 콜 바이 벨류(Call by Value), 값에 의한 호출에 대한 예제입니다. void Increment(int x) { x += 1; } int main() { int a = 1; Increment(a); Console.WriteLine(a); // Output의 값은 1이다. } 위 예시에서 a의 값은 a의 값 만큼 증가되는 함수에 전달됩니다. 이 때 함수 내에서는 x의 값이 증가하지만, 이 변경된 값..

공부/C# 2022.12.16

Vector push_back과 emplace_back의 차이

push_back은 벡터의 끝에 인자 값을 추가하는 vector 클래스의 함수입니다. 이 때 push_back은 추가할 인자 값은 현재 위치에서 값을 복사하거나 이동하여 벡터에 추가됩니다. std::vector v; int x = 1; v.push_back(x); // v 벡터에서 이제 [1]을 포함합니다 위 예에서 push_back은 인자 값 x를 복사하여 벡터의 끝에 추가합니다. 즉, 인자 값(1)의 새로운 복사본이 생성되어 벡터에 추가되고 원래 요소인 x는 변경되지 않은 상태로 유지됩니다. 반면에 emplace_back 또한 벡터에 끝에 인자 값을 추가하는 vector 클래스의 함수이지만, 기존 값들을 복사하거나 이동하는 연산을 하지 않고, 제자리에서 인자값을 구성하여 생성합니다. 이로 인해 인자 ..

공부/C++ 2022.12.16

1년차 개발자에게 요구되는 능력에는 어떤 것들이 있을까요?

Q. 저는 현재 프론트엔드 쪽에서 개발을 하고 있습니다. 입사한 지는 약 8-9개월 정도 되었구요! 팀 특성상 동기가 없기도 하고, 저와 비슷한 연차의 개발자분들이 안 계셔서 질문을 올리게 되었습니다. 현재는 기존 서비스의 오류를 해결하거나 가끔 새로운 서비스를 개발하기도 하면서 업무를 보고 있는데, 1년 정도 되어가는 신입 개발자는 어느 정도의 업무를 커버할 수 있는 스킬이 필요할까요??? A. 최근에 비슷한 질문을 받아서 그 분께 답변을 드렸던 내용과 비슷하게 답변을 드려보겠습니다. 1. 회사에 배울 점이 있는 동료, 선배와 친해지세요! 기술적인 내용도 이야기 하고, 꼭 딱딱한 이야기가 아니더라도 서로 친밀한 관계를 유지하면 정말 나중에 큰 도움을 받습니다. 경험상 주니어때는 본인이 능력이 부족해서라..

공부/자기계발 2022.12.16

게임 개발 지망생이 빠지는 함정 甲.JPG

"게임을 만들 때는 만들어야할 게 많습니다. 음악, 아트, 게임 디자인, 스토리, 코딩 등... 이 요소는 다 동등한 것으로 보이지만 실제로는 아닙니다." "많은 경우에 게임 디자인은 그들과 동등하지 않고 오히려 그들을 지탱하는 기반으로 기능합니다. 그래서 게임 디자인이 무너지면 다른 것도 다 무너집니다." 유튜브 채널 GMTK를 운영하는 마크 브라운이 소개한 자신의 유년시절 일화는 이러하다. 1. 게임의 스토리 컨셉과 아이디어가 떠오름. 2. 바로 포토샵을 켜서 도트를 찍고 캐릭터도 만들고 컷신도 만들고 메뉴도 다 만듦. 3. 근데 중요한 걸 깨달음 4. 게임이 노잼임 5. 그만둠. 6. "마크, 이 멍청아." 많은 개발 지망생들이 아직 만들어지지도 않은 자신의 게임의 완성된 모습이나 눈에 보이는 아트..

공부/자기계발 2022.12.15

구조체(Struct)와 클래스(Class)의 개념과 차이

구조체(Struct) 어떤 객체를 표현할 때 1가지의 변수만으로 해당 객체를 표현하기 힘든 경우가 있다. 예를 들어 사람이라는 객체를 표현하려고 할 경우 이름, 나이, 성별, 키, 몸무게 등 다양한 정보에 대한 변수가 필요하게 된다. // 이름, 나이, 성별, 키, 몸무게 string name; int age; string sex; int height; int weight; 사람이 1명뿐이라면 이렇게 5개의 변수를 하나하나씩 선언하여 사용해도 상관없지만, 사람이 10명, 혹은 100명이 되어 더 많아진다면 사람이 추가될 때 마다 새로운 변수를 5개 씩 만들어줘야한다. 이러한 점을 해결하기 위해 C++에서는 여러 개별 변수(이름, 나이, 성별 키, 몸무게)를 하나로 그룹화하여 데이터 유형으로 생성할 수 있..

공부/C++ 2022.12.14

열거형(enum)과 열거형 클래스(enum class)의 개념, 사용법, 차이점

열거형이란? 컴퓨터 프로그래밍에서 열거형(enumerated type, enumeration), 이넘(enum)은 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다. 출처 : 위키백과 '열거형' 이렇게 설명을 보니 쉽게 이해가 되지 않는다. 보다 쉽게 설명하자면 사용자가 자신이 필요한 정보를 열거(=선언, 정의)하여 사용하는 집합 자료형이다. 이 때 사용자가 명명한 상수 집합은 모든 값이 정수 상수 값을 가지며, 이 때 특정 자료에 사용자가 원하는 정수 값을 할당 할 수도 있다. 열거형은 enum 키워드를 통해 사용할 수 있다. 예를 들어 열거형을 사용하여 다음과 같은 색상 집합을 정의할 수 있다. // 'Color'라는 새로..

공부/C++ 2022.12.14

렌더링 파이프라인 핵심 정리 및 hwp, pdf 파일

[렌더링 파이프 라인] 🤯 해당 포스팅은 21년 9월에 정리한 자료이므로, 현재 최신 정보와 상이한 정보가 있을 수 있습니다. 문제가 되는 부분 혹은 현재와 상이한 정보가 있을 시, 댓글 남겨주시면 확인 후 수정하겠습니다 :) 그래픽스 파이프라인이란? 3D 컴퓨터 그래픽스에서 그래픽스 파이프라인(Graphics Pipeline)이란 3차원의 도형 혹은 이미지를 2차원 래스터* 이미지로 표현을 하기 위한 단계적 방법을 의미한다. 여기서 래스터(raster)란? 컴퓨터에서 어떠한 도형 혹은 이미지를 픽셀로 구성하고, 이 점들의 모습을 조합, 일정한 간격의 픽셀들을 나열하여 하나의 화면을 표현하는 것을 의미한다. OpenGL과 Direct3D가 3차원 그래픽 표준이며, 비슷한 그래픽스 파이프라인을 가지고 있다..

공부/그래픽스 2022.11.30

6. 회전에 대한 수학 2 – 사원수

회전에 대한 수학 2 – 사원수 🐱‍💻 이번 영상에서는 사원수에 대해 이야기하겠습니다. 앞서 3차원 회전을 표현하는 데 있어서 축-각 방식과 오일러 방식 두 가지가 있다고 말씀드렸습니다. 각각은 장단점이 있다고 설명했습니다. 축-각 방식은 행렬로 변환하기 어려워서 렌더링 파이프라인의 중간에 있는 파이프라인 흐름이 끊기게 된다고 했습니다. 오일러 각 방식은 축에 대해 부드럽게 움직이는 회전을 계산하기가 어렵고 짐벌락 현상이 발생한다고 했습니다. 이 두 가지의 중간 포지션에서 문제점을 해결해줄 수 있는 솔루션이 있습니다. 그것이 바로 사원수입니다. 이번 영상에서는 사원수를 사용해 3차원 회전을 어떻게 안정적으로 구현하는지 그 구조와 원리에 대해 설명하겠습니다. 사원수란? 네 개의 원소로 구성된 수 실수 : ..

5. 회전에 대한 수학 1 – 삼각함수와 회전변환

회전에 대한 수학 1 – 삼각함수와 회전변환 😚 이번 영상에서는 회전에 관해 이야기해 보겠습니다. 회전이란 무엇일까요? 앞선 영상에서 트랜스폼이란 크기, 회전, 이동이라는 3가지 변환을 순서대로 변환해주는 합성 변환이라고 했습니다. 이 중에서 회전은 별도로 주제를 빼서 설명해 드릴 만큼 독특한 변환입니다. 우리가 현실 세계에서 회전한다면 중심축을 설정하고 물체를 돌리면 됩니다. 하지만 앞선 영상에서도 게임에서는 가상세계의 변환이라는 것은 공간이 돌아간다는 개념이라고 했습니다. 따라서 가상세계에서 회전을 구현하기 위해서는 물체가 돌아가기보단 공간이 돌아가야 합니다. 그렇다면 이 무한대로 뻗어있는 벡터 공간을 어떤 방식으로 돌릴 수 있을까요? 지난 시간에서는 표준 기저 벡터에 관해 설명했습니다. 예를 들어 ..

4. 물체의 수학 3 – 벡터의 내적과 외적

물체의 수학 3 – 벡터의 내적과 외적 🤠 안녕하세요. 이번 시간에는 물체에 대한 수학 중 벡터에 대한 수학에 관해 얘기하겠습니다. 수학에 관해 얘기하기 전에 게임 콘텐츠가 어떤 식으로 만들어지는 그 과정을 한번 정리해보겠습니다. 1. 로컬 공간 : 개별 물체의 공간 2. 월드 공간 3. 카메라 공간 4. 최종 렌더링 진행 게임을 만들기에서는 먼저 각 물체를 기획하고 개별 물체를 표현하기 위해 로컬 공간을 설정하고, 로컬 공간 안에서 3D 맥스 등 제작 툴을 이용하여 물체를 모델링 합니다. 이렇게 물체를 모델링 한 결과물을 메시 데이터로 변환하여 유니티, 언리얼과 같은 게임 엔진에 넣어줍니다. 모델링 된 데이터가 게임 엔진으로 들어오게 되면 메시 데이터는 모든 면은 삼각형 단위로 쪼개지고 각 삼각형은 세..

반응형