반응형

공부/기타 38

맵(Map)의 Find보다 벡터(Vector)의 Find가 더 빠른 경우는 언제일까?

1. 맵의 find가 벡터의 find보다 빠른 경우 1. 요소 수가 적은 경우: 요소 수가 상대적으로 적은 경우 맵의 내부 구조(일반적으로 이진 검색 트리)를 유지하는 데 드는 오버헤드가 벡터 찾기 작업을 더 빠르게 만들 수 있습니다. 작은 데이터 집합의 경우 벡터의 선형 검색이 맵의 로그 검색보다 더 효율적일 수 있습니다. 2. 정렬되지 않은 데이터: 벡터의 데이터가 정렬되지 않은 경우 벡터 찾기 작업이 맵 찾기 작업에 비해 더 빠를 수 있습니다. 벡터에서는 요소가 연속적으로 저장되므로 효율적인 선형 검색이 가능합니다. 반면 맵은 키에 따른 요소 순서에 의존하므로 정렬되지 않은 맵에서 요소를 찾으려면 대수 검색이 필요합니다. 3. 단순 비교: 요소 비교가 계산적으로 저렴하다면 벡터 찾기 작업이 맵 찾기..

공부/기타 2023.06.12

맵(Map)과 해쉬맵(HashMap)의 차이

1. 맵과 해시 맵의 차이 일반적으로 '맵'과 '해시맵'은 모두 키-값 쌍을 저장하는 데 사용되는 데이터 구조이지만, '맵'과 '해시맵'이라는 구체적인 용어는 프로그래밍 언어나 문맥에 따라 다른 의미를 가질 수 있습니다. [Map] 맵은 키-값 쌍의 컬렉션을 나타내는 추상 데이터 유형으로, 맵 내에서 각 키는 고유합니다. 맵은 해당 키를 기반으로 값을 효율적으로 조회하고 검색할 수 있습니다. 맵은 일반적으로 키-값 쌍을 삽입, 검색, 제거하는 작업은 물론 키가 있는지 확인하고 맵의 항목을 반복하는 작업을 제공합니다. [Hash Map] 해시맵은 해시 테이블을 기반으로 하는 맵 데이터 구조의 특정 구현입니다. 해시 테이블은 해시 함수를 사용하여 키를 기본 배열의 인덱스에 매핑하므로 키-값 쌍을 효율적으로 ..

공부/기타 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

동적 라이브러리(Dynamic library)란?

1. 동적 라이브러리란? 공유 라이브러리 또는 동적 링크 라이브러리(DLL)라고도 하는 동적 라이브러리는 소프트웨어 개발에 사용되는 라이브러리 유형입니다. 이는 다른프로그램에서 사용할 수 있는 컴파일된 코드와 데이터가 포함된 파일입니다. 정적 라이브러리와 달리 동적 라이브러리는 컴파일 시점에 애플리케이션에 직접 링크되지 않습니다. 대신 애플리케이션이 실행될 때 런타임에 동적으로 로드되고 링크됩니다. 따라서 실행에 필요한 모든 코드와 데이터를 포함할 필요가 없으므로 프로그램을 더 작고 모듈화할 수 있습니다. 또한 동적 라이브러리는 이를 사용하는 프로그램을 다시 컴파일하지 않고도 업데이트할 수 있습니다. 2. 동적 라이브러리의 특징 컴파일 및 링크: 동적 라이브러리는 애플리케이션 코드와 별도로 컴파일 및 링..

공부/기타 2023.06.10

정적 라이브러리(Static Library)란?

1. 정적 라이브러리란? 정적 라이브러리는 소프트웨어 개발에 사용되는 라이브러리 유형입니다. 이는 함께 컴파일되어 하나의 실행 파일로 링크된 객체 파일 모음입니다. 즉 결과 실행 파일에는 정적 라이브러리의 모든 필요한 코드가 포함되어 있으므로 외부 종속성으로부터 독립적입니다. 2. 정적 라이브러리의 특징 컴파일 및 링크: 정적 라이브러리는 소스 코드 파일을 객체 코드(Windows의 경우 .obj 파일, Unix/Linux의 경우 .o 파일)로 컴파일하여 만듭니다. 그런 다음 아카이빙 도구를 사용하여 오브젝트 코드 파일을 라이브러리 파일(Windows의 경우 .lib, Unix/Linux의 경우 .a)로 함께 번들로 묶습니다. 컴파일 단계에서는 C 또는 C++와 같은 프로그래밍 언어로 작성된 소스 코드 ..

공부/기타 2023.06.05

C++ String과 C#의 String의 차이점

1. 차이점 C++ 문자열과 C# 문자열은 모두 해당 프로그래밍 언어에서 사용되는 문자열 데이터 유형이지만 몇 가지 주목할 만한 차이점이 있습니다. 다음은 C++ 문자열과 C# 문자열의 간략한 차이점을 요약한 표입니다: 기능 C++ C# 스토리지 힙 스택 메모리 관리 수동 자동 연산자 +, +=, ==, != 등 +, == 메소드 length(), substring(), find() 등 length(), substring(), find() 등 보다 자세한 차이점은 다음과 같습니다. 메모리 관리: C++에서 문자열은 널로 끝나는 문자 배열(char[]) 또는 std::string 클래스의 객체와 같은 다양한 데이터 구조를 사용하여 표현할 수 있습니다. C++ 문자열은 수동 메모리 관리가 필요하므로 문자 배..

공부/기타 2023.06.04

스택(Stack)과 큐(Queue)의 대한 차이점

스택과 큐는 모두 요소 모음을 저장하고 조작하는 데 사용되는 기본적인 데이터 구조이지만 몇 가지 주요한 면에서 차이가 있습니다. 1. 차이점 액세스 순서: 스택과 큐의 주요 차이점은 요소에 액세스하는 순서입니다. 스택은 선입선출(LIFO) 순서를 따르므로 스택에 마지막으로 추가된 요소가 가장 먼저 제거됩니다. 반면에 큐는 선입선출(FIFO) 순서를 따르는데, 이는 큐에 처음 추가된 요소가 가장 먼저 제거되는 것을 의미합니다. 삽입 및 삭제: 스택과 대기열 모두 요소의 삽입 및 삭제를 지원하지만 프로세스는 각각 다르게 작동합니다. 스택에서 요소는 스택의 맨 위에서 추가되거나 제거됩니다. 요소가 추가되면 해당 요소가 스택의 새 맨 위에 추가되고, 요소가 제거되면 스택 맨 위에 있는 요소가 제거됩니다. 대기열..

공부/기타 2023.04.04

리스트(List)와 배열(Array)의 차이점

데이터 구조에서 리스트(List)와 배열(Array)은 요소 모음을 저장하고 조작하는 데 사용되는 두 가지 기본 데이터 유형입니다. 언뜻 보기에는 비슷해 보이지만 리스트(List)와 배열(Array)에는 다양한 유형의 애플리케이션에 적합한 몇 가지 주요 차이점이 있습니다. 1. 차이점 동적 크기와 정적 크기: 리스트(List)와 배열(Array)의 가장 큰 차이점 중 하나는 배열(Array)은 고정된 정적 크기인 반면, 리스트(List)은 요소를 추가하거나 제거할 때 동적으로 커지거나 작아질 수 있다는 점입니다. 즉, 배열(Array)은 컬렉션의 크기를 미리 알고 있고 변경될 가능성이 거의 없는 상황에 가장 적합한 반면, 리스트(List)은 컬렉션의 크기를 동적으로 조정해야 하는 상황에 더 적합합니다. ..

공부/기타 2023.04.03

벡터의 내적, 외적

벡터의 내적과 벡터의 외적은이라는 용어는 일반적으로 선형 대수학 및 벡터 수학의 맥락에서 사용됩니다. 1. 벡터의 내적 벡터의 내적 곱 또는 도트 곱이라고도 하는 내적 벡터는 두 개의 벡터를 취하여 스칼라 값을 반환하는 수학적 연산입니다. 이는 두 벡터의 해당 구성 요소의 곱의 합으로 정의됩니다. 즉, 두 벡터가 a와 b로 표현되는 경우, a와 b의 내적은 다음과 같이 표현됩니다: a ⋅ b = A1B1 + A2B2 + ... + anbn 여기서 A1, A2, ..., an 및 B1, B2, ..., bn은 각각 벡터 a와 b의 구성 요소입니다. 내적의 결과는 두 벡터 사이의 각도의 코사인을 나타내는 스칼라 값입니다. 벡터의 길이 또는 크기를 계산하거나 두 벡터 사이의 각도를 결정하는 데 자주 사용됩니다..

공부/기타 2023.03.29

메모리 풀(Memory Pool)이란?

1. 메모리 풀이란? 메모리 풀은 컴퓨터 프로그래밍에서 성능을 개선하고 메모리 조각화를 줄이기 위해 사용되는 기술입니다. 메모리 풀은 미리 할당된 메모리 덩어리로, 필요에 따라 할당 및 할당 해제할 수 있는 작은 고정 크기 블록으로 나뉩니다. 메모리 풀의 블록은 일반적으로 모두 동일한 크기이므로 메모리를 쉽게 관리할 수 있고 조각화 위험이 줄어듭니다. 메모리 풀은 일반적으로 특정 크기의 개체를 자주 생성하고 삭제하는 상황에서 사용됩니다. 예를 들어 실행 중에 작은 객체를 많이 생성하고 소멸하는 프로그램은 메모리 풀을 사용하면 이점을 얻을 수 있습니다. 큰 메모리 블록을 미리 할당하고 이를 고정 크기 블록으로 나누면 프로그램이 운영 체제에서 메모리를 반복적으로 요청하고 해제하는 오버헤드를 피할 수 있습니다..

공부/기타 2023.03.26

그 많은 OTT 콘텐츠는 어떻게 웹에서 재생될 수 있을까?

OTT 콘텐츠 많이들 보시나요? 지금 당장 생각나는 것만 해도 넷플릭스, 유튜브, 웨이브, 티빙, 왓챠 같은 많은 OTT 서비스들이 떠오르네요. 이러한 OTT 서비스를 통해 영화부터 시작해서 예능, 드라마, 애니메이션, 온라인 강의, 라이브 방송에 이르는 다양한 콘텐츠를 즐길 수 있습니다. OTT 콘텐츠는 보통 저작권에 의해 보호됩니다. 그래서 콘텐츠를 재생하려면 직접 비디오를 결제하거나 구독 서비스를 이용해야 하죠. 그러고 나서야 스마트폰 앱이나 스마트 TV, 웹 브라우저 등에서 이렇게 유료 OTT 콘텐츠들을 재생할 수 있습니다. 출처 및 더 읽어 보기 : 요즘 IT '재그지그의 개발 블로그'님 https://yozm.wishket.com/magazine/detail/1934/?utm_source=st..

공부/기타 2023.03.24

C# 언어와 C++ 언어의 차이점

C++와 C#은 모두 프로그래밍 언어이지만 구문, 메모리 관리, 유형 안전, 플랫폼 지원 등 몇 가지 주요 영역에서 차이가 있습니다. 구문: C++와 C#은 서로 다른 구문을 사용합니다. C++는 C와 유사한 구문을 사용하는 저수준 언어이고, C#은 Java와 유사한 구문을 사용하는 고수준 언어입니다. C++는 개발자가 직접 메모리로 작업할 수 있는 반면, C#은 가비지 컬렉션 시스템을 통해 메모리 관리를 추상화합니다. 또한 C#에는 문자열 조작 및 파일 I/O와 같은 일반적인 작업을 간소화하는 풍부한 라이브러리와 프레임워크가 포함되어 있습니다. 메모리 관리: C++는 포인터를 사용하여 메모리 할당 및 할당을 직접 제어하는 반면, C#은 가비지 콜렉터를 사용하여 메모리를 자동으로 관리합니다. 가비지 컬렉..

공부/기타 2023.03.24

디더링(Dithering)이란 무엇인가?

디더링(Dithering)은 디지털 이미지 처리에서 낮은 비트 심도의 이미지 또는 디스플레이에서 색상 밴딩 또는 기타 시각적 아티팩트의 모양을 줄이기 위해 사용되는 기술입니다. 이미지에 소량의 노이즈나 패턴을 추가하여 추가적인 색상이나 음영이 있는 것처럼 보이게 하는 방식으로 이루어집니다. 일반적인 디지털 이미지에서 각 픽셀은 고정된 수의 비트로 표현되며, 이는 표시할 수 있는 색상 또는 음영의 범위를 결정합니다. 예를 들어 8비트 이미지에는 256가지 색상 또는 회색 음영을 표시할 수 있습니다. 제한된 수의 색상 또는 음영을 가진 이미지를 더 높은 비트 심도 또는 색 영역을 가진 장치에 표시하면 결과 이미지에 인접한 픽셀 간에 눈에 띄는 밴딩 또는 갑작스러운 전환이 나타날 수 있습니다. 디더링은 인접한..

공부/기타 2023.03.24

행렬은 왜 4X4 연산을 할까?

매트릭스는 3D 모델링, 렌더링, 게임 개발 등 많은 컴퓨터 그래픽 애플리케이션에서 4x4 연산을 사용합니다. 4x4 행렬은 이동, 회전, 크기 조정, 전단 등 3차원 공간에서의 변환을 편리하게 표현할 수 있는 방법을 제공하기 때문입니다. 4x4 행렬의 각 요소는 이동의 X, Y, Z 좌표 또는 X, Y, Z 축을 중심으로 한 회전 각도와 같은 특정 변환 파라미터에 해당합니다. 정점(점 또는 벡터)에 4x4 변환 행렬을 곱하면 해당 정점에 해당 변환을 적용할 수 있습니다. 또한 많은 컴퓨터 아키텍처가 4x4 행렬 연산에 최적화되어 있으므로 4x4 행렬을 사용하면 보다 효율적인 계산이 가능합니다. 또한 4x4 행렬을 서로 연결하여 회전 및 이동 시퀀스와 같은 더 복잡한 변환을 만들 수도 있습니다. 전반적으..

공부/기타 2023.03.22

AOS에서 사용되는 기본 텍스쳐 포맷

Android의 기본 텍스처 형식은 RGBA_8888이라는 OpenGL ES 2.0의 표준 형식입니다. 이 형식은 텍스처의 빨강, 녹색, 파랑 및 알파 색상 구성 요소 각각에 8비트(또는 1바이트)를 사용하므로 픽셀당 총 32비트(또는 4바이트)가 사용됩니다. RGBA_8888 형식은 높은 색상 정확도와 투명도를 지원하므로 이미지, 그래픽, 텍스트 등 대부분의 텍스처 유형에 적합합니다. 또한 대부분의 Android 기기에서 널리 지원되며 2D 및 3D 그래픽 렌더링에 모두 사용할 수 있습니다. RGBA_8888 포맷은 높은 품질과 호환성을 제공하지만, 각 픽셀이 4바이트의 메모리를 차지하므로 메모리 집약적일 수 있습니다. 큰 텍스처의 경우 빠르게 합산되어 상당한 양의 메모리를 소비하여 성능 문제를 일으킬..

공부/기타 2023.03.20

iOS에서 사용되는 기본 텍스쳐 포맷

iOS 기기에서 사용하는 기본 텍스처 형식은 PVRTC(PowerVR 텍스처 압축)입니다. PVRTC는 손실 텍스처 압축 포맷으로, 많은 iOS 디바이스에서 사용되는 PowerVR 그래픽 처리 장치(GPU)와 함께 사용하기 위해 Imagination Technologies에서 특별히 개발했습니다. PVRTC는 메모리 공간을 적게 차지하면서 고품질 압축을 제공하도록 설계되어 메모리와 저장 용량이 제한된 모바일 디바이스에 이상적입니다. PVRTC 텍스처는 픽셀당 2비트 또는 픽셀당 4비트로 압축할 수 있으며, 불투명하거나 투명할 수 있습니다. iOS 디바이스에서는 Android 디바이스에서 일반적으로 사용되는 ETC2(Ericsson 텍스처 압축), 광범위한 비트 전송률로 고품질 압축을 제공하는 최신 포맷으..

공부/기타 2023.03.19

배열과 벡터의 차이점

배열과 벡터는 모두 요소 모음을 저장하는 데 사용되는 데이터 구조입니다. 그러나 크기, 성능, 구문 등 다양한 곳에서 몇 가지 주요 차이점이 있습니다. 1. 크기 배열의 크기는 고정되어 있습니다. 즉, 배열이 생성되면 크기를 변경할 수 없습니다. 반면에 벡터는 동적 크기를 가지므로 런타임 중에 크기가 변경될 수 있습니다. 2. 메모리 할당 배열은 인접한 메모리 블록에 저장되며 생성 시 크기를 알아야 합니다. 벡터는 동적 메모리에 저장되며 런타임 중에 크기를 변경할 수 있으므로 필요에 따라 더 많은 메모리를 할당할 수 있습니다. 3. 성능 배열의 경우 요소가 인접한 메모리 블록에 저장되므로 임의 액세스와 같이 인덱스로 요소에 액세스하는 것과 관련된 작업에 대해 더 나은 성능을 제공합니다. 벡터는 더 많은 ..

공부/기타 2023.02.07

맵과 해시맵의 시간 복잡도와 해시맵이 더 빠른 이유

1. 맵과 해시맵의 시간 복잡도 맵의 시간 복잡도는 O(logN)의 탐색 속도를 가지며, 해시 맵의 시간 복잡도는 O(1)의 탐색 속도를 가집니다. 대부분의 경우 맵과 해시맵은 기본 데이터 구조를 해시 테이블을 사용하므로, 특정 값을 찾는 데 걸리는 시간 복잡도는 평균 O(1)입니다. 그렇지만, 시간 복잡도는 컨테이너 및 기본 데이터 구조의 구현에 따라 다릅니다. 그러나 만약 해시 테이블이 충돌하는 경우와 같은 특수 경우 특정 값을 찾는 시간 복잡도는 O(n)일 수 있습니다. 여기서 n은 컨테이너의 요소 수입니다. 이 경우 값을 찾는 데에 시간이 보다 더 걸릴 수 있으며, 이는 컨테이너의 크기가 커질수록 더 오래 걸립니다. 요약하면 맵 혹은 해시 맵 컨테이너 내에서 특정 값을 찾는 시간 복잡도는 스토리지..

공부/기타 2023.02.06
반응형