반응형

공부 624

전방선언(Forward Declaration)이란?

1. 전방선언이란? 프로그래밍에서 전방 선언은 식별자(예: 클래스, 함수 또는 변수)의 전체 정의를 제공하기 전에 그 존재를 선언하는 문입니다. 이를 통해 프로그램은 식별자가 완전히 정의되거나 구현되기 전에 식별자를 참조할 수 있습니다. 전방 선언은 주로 식별자를 사용하기 전에 선언해야 하는 C 및 C++에서 사용됩니다. 전방 선언의 주요 목적은 프로그램의 여러 부분 간의 종속성을 해결하거나 순환 종속성을 끊는 것입니다. 또한 전방 선언을 제공하면 컴파일러가 식별자의 존재와 기본 세부 정보를 알 수 있으므로 전체 정의가 제공되기 전에 특정 컨텍스트에서 프로그램을 사용할 수 있습니다. 이를 통해 코드를 유연하게 구성할 수 있으며 두 개 이상의 엔티티가 서로 참조하는 상황을 극복하는 데 도움이 됩니다. 2...

공부/C++ 2023.06.12

Nan(Not A Number)란?

1. Nan이란? '숫자가 아님'의 약자인 NaN은 컴퓨팅 및 프로그래밍에서 정의되지 않았거나 표현할 수 없는 숫자 연산 결과를 나타내기 위해 사용되는 특수 값입니다. NaN 값은 부동 소수점 산술이나 오류, 유효하지 않은 결과를 나타내는 데 사용됩니다. NaN은 수학적으로 연산이나 계산에서 정의되지 않았거나 수치로 표현할 수 없는 결과가 나올 때 이를 나타내는 데 사용됩니다. 이는 결과가 의미가 없거나 유효하지 않다는 신호로 사용됩니다. 예를 들어, 0을 0으로 나누거나 음수의 제곱근을 구하면 이러한 연산에는 잘 정의된 수치 결과가 없기 때문에 NaN이 생성됩니다. 2. Nan의 발생 원인 잘못된 산술 연산: 0으로 나누기, 음수의 제곱근 구하기, 양수가 아닌 숫자의 로그를 구하면 모두 NaN이 될 수..

공부/C++ 2023.06.12

부동 소수점 에러란?

1. 부동 소수점 에러란? 부동 소수점 오류는 부동 소수점 산술계산의 한계로 인해 부동 소수점 계산의 수학적 결과와 실제 저장된 결과의 표현 사이의 불일치를 나타냅니다. 즉, 부동 소수점 숫자를 저장할 때 항상 약간의 반올림 오류가 발생합니다. 2. 부동 소수점 에러의 원인 반올림 오류: 부동 소수점 숫자는 유효 자릿수가 제한되어 있어 계산을 수행할 때 표현이 수용할 수 있는 숫자보다 더 많은 자릿수가 필요할 수 있습니다. 이러한 경우 사용 가능한 정밀도에 맞게 결과가 반올림됩니다. 반올림 오차는 연속적인 계산을 통해 누적되어 정밀도가 떨어지고 정확한 수학적 결과와 편차가 발생할 수 있습니다. 표현 오류: 부동 소수점 숫자는 정밀도가 유한하기 때문에 실수의 하위 집합만 나타낼 수 있습니다. 즉, 일부 값..

공부/CS 2023.06.12

노멀 맵(Normal Map)이란?

1. 노멀 맵이란? 노멀 맵은 컴퓨터 그래픽에서 폴리곤 수를 늘리지 않고 표면의 시각적 디테일을 향상시키는 데 사용되는 기술입니다. 노멀 맵을 사용하면 3D 모델의 표면 노멀을 조작하여 범프, 틈새 또는 미세한 디테일과 같은 복잡한 표면 텍스처를 시뮬레이션할 수 있습니다. 기존 렌더링에서는 메시의 버텍스 노멀을 기반으로 조명 계산이 수행됩니다. 이러한 버텍스 노멀은 빛이 표면과 상호 작용하는 방식을 결정하여 음영과 모양에 영향을 줍니다. 하지만 버텍스 노멀만으로는 복잡한 표면 디테일을 정확하게 표현할 수 없습니다. 이러한 문제는 노멀 맵이라는 텍스처를 도입하여 이러한 한계를 해결합니다. 노멀 맵은 픽셀별 노멀 정보를 저장하여 원래 정점 노멀과의 편차를 나타냅니다. 노멀 맵의 각 픽셀은 특정 지점의 표면 ..

공부/그래픽스 2023.06.12

더블 버퍼링(Double Buffering)이란?

1. 더블 버퍼링이란? 더블 버퍼링은 컴퓨터 그래픽 및 사용자 인터페이스 디자인에서 화면을 업데이트하거나 애니메이션을 표시할 때 깜박임을 없애고 시각적 성능을 개선하는 데 사용되는 기술입니다. 기존의 렌더링 또는 화면 업데이트에서는 화면의 변경 사항이 발생하면 사용자에게 직접 표시됩니다. 특히 여러 요소가 동시에 업데이트되는 경우 화면이 깜박거리거나 시각적 아티팩트가 발생할 수 있습니다. 이를 극복하기 위해 더블 버퍼링이 사용됩니다. 더블 버퍼링에서는 두 개의 버퍼 또는 메모리 영역이 그래픽 데이터를 저장하는 데 사용됩니다. 전면 버퍼라고 하는 하나의 버퍼는 현재 화면에 표시되는 이미지 또는 프레임을 나타내고, 후면 버퍼라고 하는 다른 버퍼는 표시를 준비 중인 업데이트된 이미지 또는 새 이미지를 보유합니..

공부/그래픽스 2023.06.12

죽음의 다이아몬드(the Deadly Diamond of Death)란?

1. 죽음의 다이아몬드란? 죽음의 다이아몬드는 다중 상속을 지원하는 프로그래밍 언어, 특히 여러 클래스가 서로 상속할 때 일어나는 상속 계층 구조에서 발생할 수 있는 문제를 설명하는 데 사용되는 용어입니다. 이 문제는 C++ 및 Java 언어와 가장 일반적으로 연관되어 있습니다. 이는 재사용 가능한 코드를 만드는 데 유용할 수 있지만 클래스가 순환 방식으로 상속되는 경우 죽음의 다이아몬드로 이어질 수도 있습니다. 2. 죽음의 다이아몬드 예제 죽음의 다이아몬드를 이해하기 위해 클래스 A가 기본 클래스이고 클래스 B와 C가 모두 A로부터 상속을 받는 시나리오를 고려해 보겠습니다. 이제 또 다른 클래스 D가 B와 C로부터 상속을 받아 다이아몬드 모양의 상속 구조를 형성하는 시나리오를 살펴봅시다. A / \ B..

공부/기타 2023.06.11

트랜잭션(transaction)이란?

1. 트랜잭션이란? 데이터베이스와 컴퓨터 시스템의 맥락에서 트랜잭션은 분할할 수 없는 단일 작업으로 수행되는 논리적 작업 단위를 의미합니다. 이는 전체적으로 함께 실행되어야 하는 하나 이상의 데이터베이스 작업(예: 읽기, 쓰기 또는 수정)의 시퀀스를 나타냅니다. 트랜잭션의 개념은 데이터베이스 작업이 안정적이고 일관성 있게 무결성 있게 수행되도록 보장합니다. 트랜잭션의 작업 중 하나라도 실패하면 전체 트랜잭션이 롤백되고 데이터는 이전 상태로 복원됩니다. 2. 트랜잭션의 속성 트랜잭션은 다음과 같은 ACID 속성을 충족하도록 설계되었습니다: 원자성: 원자성은 트랜잭션이 분할할 수 없는 단일 작업 단위로 취급되도록 보장합니다. 즉, 트랜잭션 내의 모든 작업이 성공적으로 완료되거나 완료되지 않을 수 있습니다. ..

공부/기타 2023.06.11

동적 메모리 할당이란?

1. 동적 메모리 할당이란? 동적 메모리 할당은 프로그램이 런타임에 동적으로 메모리를 할당할 수 있도록 하는 프로그래밍 개념입니다. 이를 통해 프로그램은 컴파일 시 정의된 고정 크기 메모리 구조에만 의존하지 않고 필요에 따라 메모리를 요청하고 사용할 수 있습니다. 동적 메모리 할당은 프로그램의 메모리 요구 사항을 미리 결정할 수 없거나 프로그램 실행 중에 메모리를 할당하고 할당 해제해야 할 때 특히 유용합니다. 2. 동적 메모리 할당 작동법 메모리 할당: 프로그램은 메모리 할당 함수 중 하나를 사용하여 운영 체제에 메모리를 요청합니다. 요청된 메모리 양은 일반적으로 바이트 단위로 지정됩니다. 운영 체제는 동적 메모리 할당에 사용되는 메모리 영역인 힙에서 적절한 메모리 블록을 찾습니다. 메모리 사용량: 메..

공부/CS 2023.06.11

개발자 생활 첫 10년, 이 세 가지가 중요합니다

필자는 스타크래프트에 한글 지원 기능을 제작한 박종천 개발자이며, 30년 개발 경력의 경험을 글로 풀어보았다 합니다. 본문이 개발자 여러분께 도움이 되길 희망합니다. “30년 혹은 그 이상을 개발자로 살고 싶은 분들께 조금이나마 도움이 되었으면 하는 마음으로 제 경험을 3회차의 연재 글로 풀어볼 겁니다. 80억 인구가 80억 가지 인생을 살게 되므로 제 이야기가 여러분께, 혹은 지금 시기에 딱 맞지 않을 수도 있습니다. 그럼에도 가능하면 시간이 지나도 살아있는 콘텐츠가 될 수 있도록 핵심에 집중했습니다.” -필자 더 읽어보기 : 요즘 IT https://yozm.wishket.com/magazine/detail/2025/?utm_source=stibee&utm_medium=email&utm_campaig..

공부/자기계발 2023.06.11

빅오 표기법(big-O natation)이란?

1. 빅오 표기법이란? 빅 O 표기법이라고도 하는 점근 표기법은 컴퓨터 과학과 수학에서 알고리즘의 효율성과 성능 특성을 설명하기 위해 사용되는 수학적 표기법입니다. 입력 크기가 증가함에 따라 알고리즘의 실행 시간 또는 공간 요구 사항이 어떻게 증가하는지 간결하게 분석할 수 있는 방법을 제공합니다. 점근 표기법의 주요 목적은 입력 크기와 관련하여 함수의 성장률을 표현하는 것입니다. 2. 빅오 표기법의 종류 가장 일반적인 점근 표기법은 빅오 표기법, 리틀오 표기법, 세타 표기법입니다. 1. Big-O 표기법은 함수의 성장률의 상한을 나타냅니다. 예를 들어 함수 f(n) = n^2 + n은 O(n^2)의 큰-O를 가지며, 이는 n^2에 상수를 더한 비율로 증가한다는 의미입니다. 2. 리틀오 표기법은 함수 성장..

공부/알고리즘 2023.06.11

-10배 엔지니어가 되는 방법

+10배의 엔지니어는 신화적인 인물일지 몰라도 -10배의 엔지니어는 존재합니다. -10배의 엔지니어가 되려면 주당 400시간의 엔지니어링 시간을 신나게 낭비하면 됩니다. 본문을 통해 -10배 엔지니어가 되는 20가지 전략들을 공유합니다. 더 읽어보기 : 요즘 IT https://yozm.wishket.com/magazine/detail/2012/?utm_source=stibee&utm_medium=email&utm_campaign=newsletter_yozm&utm_content=contents -10배 엔지니어가 되는 방법 | 요즘IT 이 글은 10x 엔지니어가 아닌 -10배의 엔지니어가 되는 법에 대해 작가의 개인적인 견해를 담은 글입니다. +10배의 엔지니어는 신화적인 인물일지 몰라도 -10배의 엔..

공부/자기계발 2023.06.11

L-Value와 R-Vaule란?

1. L-Value와 R-Value C++에서 L-Value는 객체를 지정하는 표현식이며 할당 연산자의 왼쪽에 사용할 수 있습니다. R-Value는 객체를 지정하지 않는 표현식으로, 할당 연산자의 왼쪽에 사용할 수 없습니다. L-Value: L-Value은 컴퓨터 메모리에서 특정 주소를 가진 메모리 위치 또는 객체를 나타내는 표현식을 말합니다. 값이 변수 또는 메모리 위치에 할당되는 할당 표현식의 왼쪽을 나타냅니다. L-Value은 변수, 객체 또는 역참조된 포인터일 수 있습니다. L-Value은 지정된 메모리 위치에 저장된 값을 읽거나 쓰는 데 사용할 수 있습니다. R-Value: R-Value은 임시 값 또는 특정 메모리 위치가 없는 값을 나타내는 표현식을 말합니다. 이는 할당 표현식의 오른쪽을 의미..

공부/C++ 2023.06.11

주니어 개발자를 위한 TCP/IP 주요 프로토콜 알아보기

이전 글 ‘주니어 개발자를 위한 엄청 쉬운 TCP/IP 4계층 이야기’에서, 컴퓨터와 컴퓨터의 통신이 올바르게 이루어지기 위해 데이터가 각각 어떤 계층에서 캡슐화되어야 하는지 알아보았습니다. 또한 데이터가 목적지에 정확히 전달되기 위해 계층별로 어떠한 프로토콜(약속)로 구성되어 있는지도 간단히 알아보았습니다. “응용, 전송, 인터넷, 네트워크 액세스 순으로 캡슐화”라는 큰 개념만 알아보았다면, 이번 시간에는 앞서 언급한 각 계층의 대표적인 프로토콜들에 대해 좀 더 알아보고, 각 프로토콜이 네트워크에서 어떻게 이용되는지 확인해 보겠습니다. 더 읽어보기 : https://yozm.wishket.com/magazine/detail/2005/?utm_source=stibee&utm_medium=email&utm..

공부/자기계발 2023.06.10

미드레벨 SW 엔지니어가 갖춰야 할 7가지 역량

소프트웨어 엔지니어로 2-3년 정도 경력이 쌓이면 이제 주니어 레벨에서 벗어날 준비가 필요하다. 회사에서도 한 단계 높은 미드레벨 개발자의 역량을 요구하기 때문이다. 평균적인 수치로 경력을 2-3년이라고 했지만 이는 사람마다 다를 수 있다. 빠르면 1년 이내 미드레벨에 도달할 수도 있고, 길면 4-5년 차 또는 그 이상이 될 수도 있다. 이번 글에서는 주니어 개발자가 미드레벨에 도달하기 위해, 어떤 역량이 필요한지 필자의 경험을 토대로 살펴보고자 한다. 더 읽어보기 : https://yozm.wishket.com/magazine/detail/1993/?utm_source=stibee&utm_medium=email&utm_campaign=newsletter_yozm&utm_content=contents 미..

공부/자기계발 2023.06.10

코드 리뷰 어떤 식으로 하는지 궁금합니다.

요약 1. 로직을 이해하기 쉽도록 구현했는지를 위주로 코드리뷰합니다. 2. 코드 작성자는 확신이 없는 부분에 대해서 사전에 설명하는 코멘트를 남겨두면 좋습니다. 3. 코드 리뷰어는 자신의 코멘트가 필수적으로 반영되어야 하는지, 선택적으로 반영하면 좋은 것인지 명시하면 좋습니다. 4. 구글 등 다른 코드리뷰 문화도 참고하시면 좋습니다. 경험상 사람마다 코드리뷰에서 주로 보는 부분이 다르겠지만, 저는 로직을 주로 봅니다. 구현하고자 하는 것에 비해서 복잡하게 되어있지는 않은지, 맥락을 알아야지만 이해할 수 있도록 구현되어 있지는 않은지 점검하는 편이에요. 그래서 사실 코드를 읽다가 이해하기 어렵다 싶으면 그때부터 로직에 개선점이 있는지 주의 깊게 봅니다. 코드 스타일 등 린터나 포매터로 자동화할 수 있는 부..

공부/자기계발 2023.06.10

리플렉션(Reflection)이란?

1. 리플렉션이란? C#에서 리플렉션은 런타임에 프로그램이 자체 구조를 검사하고 조작할 수 있는 강력한 기능입니다. 리플렉션은 어셈블리의 유형, 클래스, 메서드, 속성 및 기타 멤버에 대한 메타데이터를 얻고 해당 메타데이터를 기반으로 동적 작업을 수행할 수 있는 방법을 제공합니다. 2. 리플렉션의 특징 메타데이터 액세스: 리플렉션을 사용하면 런타임에 프로그램의 유형 및 멤버에 대한 메타데이터 정보에 액세스할 수 있습니다. 메타데이터에는 클래스 이름, 메서드 서명, 속성 이름, 속성 정보 등과 같은 세부 정보가 포함됩니다. 유형 검색: 리플렉션을 사용하면 어셈블리 내에서 유형을 동적으로 검색하고 분석할 수 있습니다. 클래스, 인터페이스, 구조체, 열거형 및 해당 멤버(메서드, 속성, 필드, 이벤트 등)에 ..

공부/C# 2023.06.10

좋은 주석을 적는 방법

1. 코드 내용을 그대로 반복하는 (추가 정보가 없는) 주석은 적지 말라. 2. 좋은 주석은 불명확한 코드를 변명하지 않는다. - 주석으로 코드를 설명하지 말고 코드를 다시 써라. 3. 명확한 주석을 적을 수 없다면 코드에 문제가 있을 수 있다. - 코드가 어렵다고 주석으로 경고하지 말고 코드를 다시 써라. 4. 주석은 혼란을 야기하는 것이 아니라 해소해야 한다. - 주석을 보고 더 헷갈린다면 그 주석은 지워라. 5. 관용적이지 않은(unidiomatic) 코드는 주석으로 설명하라. - 불필요하거나 중복된다고 생각할 수 있는 코드, 이로 인해 다른 누군가가 "단순화"할 수도 있다고 생각되는 코드에는 주석을 달아 설명하는 것이 좋다. 6. 복사한 코드라면 원본 출처 링크를 주석에 포함하라. - 향후 코드를..

공부/자기계발 2023.06.10

람다식(Lambda)이란?

1. 람다식이란? C#에서 람다 표현식은 별도의 명명된 메서드를 명시적으로 정의하지 않고 인라인으로 델리게이트 또는 표현식을 생성하는 데 사용할 수 있는 익명 함수입니다. 람다 표현식은 작고 독립적인 코드 블록을 정의하고 사용하기 위한 간결한 구문을 제공합니다. 람다 표현식은 주로 LINQ 쿼리, 이벤트 핸들러 및 익명 메서드에서 자주 사용됩니다. 2. 람다식의 특징 익명 함수: 람다 표현식은 이름이 연결되어 있지 않으므로 익명 함수입니다. 이를 통해 별도의 메서드 선언 없이도 코드 블록을 인라인으로 정의할 수 있습니다. 구문: 람다 식의 구문은 람다 연산자(=>)와 입력 매개변수 목록(있는 경우), 식 또는 문 블록으로 구성됩니다. 한 줄 표현식의 경우 구문은 다음과 같습니다: (입력 매개변수) => ..

공부/C# 2023.06.10

소프트웨어 엔지니어의 성장: 완벽 추구✊

거의 모든 개발자는 성장의 여정에서 필연적으로 많은 장애물을 넘게 됩니다. 기술과 사람의 문제로 넘어지기도 하지만 이 경우는 일반적인 장애물은 아닙니다. 가장 일반적인 유형이자 제가 유독 많이 느끼기도 했던 개발자의 성장을 방해하는 장애물과 장애물을 넘는 방법을 하나씩 정리해보려고 합니다. ⚠️ 완벽 추구 개발자로서 어떤 시도를 하려고 할 때 완벽하게 준비가 됐을 때 행동하려는 마음이 생기곤 합니다. “난 더 연습해야 해. 아직 시도할 준비가 되지 않았어.” “조금 더 배워야 해” “코드와 기능을 조금 더 개선 후에 출시해야 해” “조금 더 공부하고 더 나은 회사에 지원해야 해” 이렇게 완벽을 추구하려는 노력은 사실은 누구나 가진 실패에 대한 자연스러움 불안함, 두려움입니다. “완벽 추구”는 불안, 불편..

공부/자기계발 2023.06.10

[完] 2023 정보처리기사 실기 스터디 52일차 4/19

1. 오늘 공부한거 인증용 간단한 사진 * 실기 책: 11-89 ~ 12-27 ​ 2. 공부하면서 개인적으로 중요하다고 생각하는 용어 * 개발 환경 인프라 구성 방식 [두음 - 온클하]의 각 개념 * 개발 환경 인프라 구성 장비 中 스토리지 시스템 [두음 - 다나스]의 각 개념 * RAID의 개념 및 레벨의 따른 종류 * 클라우드 기반 개발 인프라 구축 中 인프라 제공 범위 ​ * 릴리즈 노트 작성 항목 [두음 - 해개목이 재수사소 노면연]의 각 개념 * 저작권과 DRM의 개념 * DRM의 구성요소 * 패키징 도구 구성 세부 기술 * 백업의 유형 [두음 - 전차증]의 각 개념 ​ * 제품 소프트웨어 매뉴얼, 제품 소프트웨어 설치 매뉴얼, 제품 소프트웨어 사용자 매뉴얼, 제품 소프트웨어 배포본의 개념 ​ ..

반응형