반응형

공부/기타 38

스택 오버플로우(Stack Overflow)란?

1. 스택 오버 플로우(Stack Overflow)란? 스택 오버플로우는 프로그램이 사용 가능한 것보다 더 많은 스택 메모리를 사용하려고 할 때 발생하는 일반적인 유형의 소프트웨어 오류입니다. 스택은 함수 호출 및 함수 실행과 관련된 데이터를 저장하는 프로세스의 메모리 영역입니다. 각 함수 호출은 함수의 로컬 변수, 인수 및 함수의 반환 주소를 보유하는 스택에 새 프레임을 만듭니다. 프로그램이 함수 호출과 관련된 메모리를 해제하지 않고 너무 많은 함수 호출을 수행하면 스택의 메모리가 부족하여 스택 오버플로우가 발생할 수 있습니다. 이는 함수가 너무 깊게 재귀하여 스택이 사용 가능한 것보다 더 많은 메모리를 소비할 때 발생할 수 있습니다. 단일 함수에 많은 수의 로컬 변수가 있는 경우와 같이 많은 양의 데..

공부/기타 2023.02.05

동기(Synchronous)와 비동기(Asynchronous)의 개념 및 차이점

1. 동기(Synchronous)의 개념 프로그래밍의 동기(Synchronous) 메서드는 다른 코드가 실행되도록 허용하기 전에 완료까지 실행되는 메서드입니다. 즉, 동기(Synchronous) 메서드는 실행이 완료될 때까지 다른 코드 실행을 차단합니다. 동기식(Synchronous) 접근 방식에서 호출 코드는 호출된 메서드가 실행을 완료하고 결과를 반환한 후 실행을 계속할 때까지 기다립니다. 이로 인해 여러 기능 또는 작업이 동기식(Synchronous)으로 실행될 수 있으며 각 작업은 시작하기 전에 이전 작업이 완료될 때까지 기다려야 합니다. 동기식(Synchronous) 방법은 간단하고 이해하기 쉽지만 특정 상황에서 성능과 응답성이 저하될 수도 있습니다. 예를 들어 동기(Synchronous) 메서..

공부/기타 2023.02.02

복사 생성자와 이동 생성자의 개념 및 차이점

1. 복사 생성자의 개념 복사 생성자는 객체의 새 인스턴스를 기존 인스턴스의 복사본으로 만드는 객체 지향 프로그래밍의 특수 생성자입니다. 같은 클래스의 객체를 인자로 받아 같은 속성을 가진 새로운 객체를 생성하는 생성자입니다. 복사 생성자의 목적은 기존 객체의 복사본으로 새 객체를 만드는 방법을 제공하는 것입니다. 이는 기존 객체와 동일한 데이터를 사용하지만 메모리에서 다른 참조를 사용하여 새 객체를 생성하려는 경우에 유용합니다. C#에서는 동일한 클래스의 인스턴스를 인수로 사용하는 생성자를 정의하고 해당 인스턴스의 데이터를 새 인스턴스로 복사하여 복사 생성자를 만들 수 있습니다. 다음은 C# 언어에서 복사 생성자의 예제입니다. class Point { public int X { get; set; } p..

공부/기타 2023.02.01

얕은 복사(shallow copy)와 깊은 복사(deep copy)의 개념 및 차이점

1. 얕은 복사(shallow copy) 얕은 복사(shallow copy)는 객체 자체가 아닌 객체에 대한 참조만 복사되는 개체 복사 방법입니다. 얕은 복사(shallow copy)를 통해 생성된 객체의 복사본은 새 메모리 주소로 새 객체를 생성하는 것이 아니라 원본 객체와 메모리의 동일한 객체를 가리킵니다. 즉, 복사본을 통해 개체를 변경하면 원래 개체에 영향을 미치고 그 반대도 마찬가지입니다. C++에서 얕은 복사(shallow copy)는 객체 복사의 기본 동작입니다. 할당 연산자(=)를 사용하여 객체를 다른 객체에 할당하면 객체의 단순 복사본이 만들어집니다. 복사본과 원본 객체는 동일한 데이터 멤버를 공유합니다. 즉, 객체 중 하나를 통해 데이터 멤버에 대한 모든 변경 사항이 다른 객체에 반영됩..

공부/기타 2023.01.31

디자인 패턴(Design pattern)이란?

디자인 패턴이란? 디자인 패턴은 소프트웨어 개발에서 발생하는 일반적인 디자인 문제에 대한 솔루션입니다. 개발자가 반복되는 문제를 일관되고 효율적인 방식으로 해결할 수 있는 방법을 제공합니다. 디자인 패턴에는 다양한 패턴들이 존재합니다. 여기서는 크게 생성 패턴, 구조 패턴, 동작 패턴 등에 대해서만 알아보겠습니다. 1. 생성 패턴 이 패턴은 개체 및 클래스 생성에 중점을 둡니다. 생성 패턴의 예로는 생성될 객체의 정확한 클래스를 지정하지 않고 객체를 생성하는 방법을 제공하는 팩터리 패턴과 클래스에 인스턴스가 하나만 있음을 보장하는 싱글톤 패턴이 있습니다. 2. 구조 패턴 이 패턴은 객체와 클래스의 구성에 중점을 둡니다. 구조적 패턴의 예로는 호환되지 않는 인터페이스가 있는 클래스가 함께 작동하도록 허용하..

공부/기타 2023.01.15

헤더(.h) 파일은 하나의 cpp파일만 가질 수 있을까?

아닙니다. 대게 게임 회사는 많은 양의 코드를 보유하는 것이 일반적이며, 이를 더 작고 관리하기 쉬운 조각으로 나누는 것이 도움이 될 수 있습니다. 이를 수행하는 한 가지 방법은 헤더 파일을 사용하여 함수, 변수 및 클래스를 선언한 다음 별도의 cpp 파일에서 구현하는 것입니다. 이렇게 하면 가독성이 향상되고 코드를 더 쉽게 이해하고 유지 관리할 수 있습니다. 또한 헤더 파일당 하나의 cpp 파일만 가질 필요는 없습니다. 한 프로젝트에 cpp 파일이 여러 개 있는 것이 일반적이며, 하나의 헤더 파일에 해당하는 cpp 파일이 여러 개 있을 수도 있습니다. 핵심은 이해하고 유지 관리하기 쉬운 방식으로 코드를 구성하는 것입니다.

공부/기타 2023.01.14

삽입, 삭제가 계속 일어난다고 했을 때 Vector가 느릴까? List가 느릴까?

특정 상황과 데이터 크기에 따라 다르겠지만, 일반적으로 데이터가 작을 경우, 요소를 삽입하거나 삭제할 때는 리스트가 더 빠르며 데이터가 클 경우, 중간에 요소를 삽입하거나 삭제할 때는 벡터가 더 빠릅니다. 이는 벡터가 연속 메모리에 요소를 저장하기 때문에 벡터 중간에 요소를 삽입하거나 삭제하려면 삽입 또는 삭제 지점 이후의 모든 요소를 이동해야 하지만 리스트은 단순히 요소를 삽입하거나 삭제하기 위해 포인터를 조정할 수 있습니다. 그러나 벡터는 리스트에 비해 메모리를 덜 사용하기 때문에 메모리 효율성도 더 높습니다.

공부/기타 2023.01.13

데이터 내부에 값이 1만개 이하일 경우 Vector가 빠를까? List가 빠를까?

만약 특정한 데이터를 찾을 경우 벡터가 리스트보다 빠르다. 왜냐하면 벡터가 연속된 메모리를 사용하고, 또 operator[]를 사용하여 일정한 시간에 액세스할 수 있기 때문이다. 반면에 리스트는 노드들이 일련의 연결로 구성되어 있으며 특정 요소에 액세스하려면 리스트 전체의 처음부터 끝까지 확인해야 하기 때문입니다. 그렇지만, 컨테이너 중간에 요소를 삽입하거나 삭제해야 하는 경우 리스트가 일반적으로 벡터보다 빠릅니다. 이렇게 하면 반복자와 참조가 무효화되지 않습니다. 반면에 벡터를 사용하면 메모리를 재할당하고 메모리를 재할당해야 할 수 있습니다. 이럴 경우 모든 요소를 새 메모리 위치에 복사합니다. 이로 인해 리스트가 벡터보다 작업을 빠르게 진행할 수 있습니다. 그렇지만, 리스트의 각 요소는 별도의 노드로..

공부/기타 2023.01.11

정렬 알고리즘 중 가장 빠른 알고리즘은 무엇일까?

가장 빠른 정렬 알고리즘은 해결하려는 문제의 특정 상황에 따라 다르지만, 아마 퀵 정렬이 일반적으로 가장 빠릅니다. 세상에는 정말 다양한 정렬 알고리즘이 있으며 각각 고유한 강점과 약점이 있습니다. 그렇지만 가장 일반적으로 사용되는 정렬 알고리즘은 다음과 같습니다. 퀵 정렬 : 퀵 정렬은 실제로 널리 사용되는 빠르고 효율적인 정렬 알고리즘입니다. 평균 케이스 시간 복잡도는 O(n log n)이고 최악의 경우 시간 복잡도는 O(n^2)입니다. 퀵 정렬은 분할 정복을 사용하여 요소를 제자리에서 정렬하기 때문에 효율적입니다. 즉, 정렬을 수행하는 데 추가 메모리가 필요하지 않습니다. 병합 정렬 : 병합 정렬은 시간 복잡도가 O(n log n)인 또 다른 효율적인 정렬 알고리즘입니다. 입력을 더 작은 청크로 나..

공부/기타 2022.12.29

온라인 게임에서 유저들을 관리하기 위해 효율적인 정렬 알고리즘과 그 이유는?

2021년 11월에는 삽입 정렬이 가장 좋다고 생각했다. 왜냐하면 예를 들어 설명해보겠다. 유저들은 사이트 혹은 게임에에 회원 가입을 할 때 오프라인 은행처럼 번호표를 뽑아 정해진 순서에 따라 가입하는 것이 아니다. 각자 스마트폰 혹은 피시를 이용해 사이트 혹은 게임에 접속하여 가입하는데, 이 때 사이트던, 게임이던 회원 가입한 사용자들에게 사용자번호를 부여하여 관리하면 1번부터 차례대로 사용자 수에 따라 관리할 수 있기 때문에 편리하기 때문이다. 혹여나 만약 N번째 유저가 탈퇴를 한다고 해도 그 사용자 번호를 부여한 자리에 지금 막 가입한 사람을 다시 집어넣기만 하면 문제도 없다. 그렇지만 22년 12월 현재 글을 작성하는 기준으로는 가장 좋은건 해시테이블과 DBMS이지 않을까 싶다. 위에 서술한 예시..

공부/기타 2022.12.26

상속할 때 public 상속과 protected 상속의 차이

객체 지향 프로그래밍에서 상속을 통해 클래스는 부모(상위) 클래스와 자식(하위) 클래스로 정의될 수 있습니다. 자식(하위) 클래스는 부모(상위) 클래스에서 속성과 동작을 상속하며 필요에 따라 이러한 속성과 동작을 재정의하거나 확장할 수 있습니다. 하위(자식) 클래스를 정의할 때 사용할 수 있는 두 가지 접근 제어 지시자가 있습니다(public 및 protected) 이러한 접근 제어 지시자는 부모(상위) 클래스의 상속된 멤버의 가시성과 액세스 가능성을 제어합니다. 다음은 공개(public) 상속과 보호(protected) 상속의 차이점입니다. 공개(public) 상속: 하위(자식) 클래스가 상위(부모) 클래스에서 공개적으로 상속되면 상위(부모) 클래스의 public 및 protected 멤버가 하위 클래..

공부/기타 2022.12.26

업 캐스팅과 다운 캐스팅의 개념 및 차이

업 캐스팅은 이전에 설명한 가상 함수, 가상 함수 테이블이랑 연관되어 있습니다. 업 캐스팅은 파생된 클래스 개체를 기본 클래스 개체로 변환하는 프로세스입니다. 파생 클래스가 기본 클래스의 보다 특수화된 버전으로 간주되고 변환이 개체를 상속 계층 구조에서 "위"로 이동하기 때문에 이를 "업 캐스팅"이라고 합니다. 기본 클래스(Animal) 참고하는 방향 파생 클래스(Cat) ↑ 업 캐스팅은 일반적으로 객체 지향 프로그래밍의 코드 재사용 및 다형성 기능을 활용하는 데 사용됩니다. 파생 클래스 개체를 기본 클래스 개체로 업 캐스팅하면 기본 클래스 및 파생된 다른 기본 클래스의 멤버와 함수에 액세스할 수 있습니다. 이를 통해 동일한 기본 클래스에서 파생되는 한 다른 유형의 개체에서 작동할 수 있는 코드를 작성할..

공부/기타 2022.12.22

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

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

공부/기타 2022.12.22

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

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

공부/기타 2022.12.22

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

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

공부/기타 2022.12.21

32비트 시스템과 64비트 시스템의 차이

결론부터 말하면 아래와 같다. 메모리 주소 공간 크기의 차이(Memory addressing space size) 32비트와 64비트 시스템은 먼저 기본처리 단위가 다르다보니 프로세서의 레지스터의 크기부터 차이가 납니다. 32비트 프로세서의 범용 레지스터의 크기는 32비트 즉 4바이트이고, 64비트 프로세서의 범용 레지스터의 크기는 64비트, 즉 8바이트입니다. 이렇다 보니, 프로그램 카운터(Program Counter)의 크기로 각각 4바이트 8바이트가 되는데요. 메모리의 주소 모드(address mode)는 기본적으로 바이트당 주소를 하나 할당하는 방식(byte oriented addressing)이므로, 32비트 머신은 최대 32bit의 메모리 어드레싱이 가능하게 됩니다. 2^3 2byte의 메모리..

공부/기타 2022.09.30

HCI와 UX

* 영상 내용 요약 1. 사용자들에게 최적의 경험(Flow)을 제공, 이는 곧 HCI의 궁극적인 목표. - 최적의 경험은 행복을 연구하는데서 비롯됨 2. HCI의 3대 요소 - 유용성 : 목적 및 기능을 발휘 - 편리성 : 목적 및 기능 달성하기 위해, 즉 수월하게 달성하냐에 관한 - 사용성 Or 감성 : 정서, 감성이 제대로 전달되는가? 3. HCI의 중요성이 증대 - 개별학문화, 독립화 4. 과거와 현대 HCI 차이점 - 중요성이 증대해졌으며 소형화 모바일형화 되었음 - 과거, 즉 초기에는 사람과 컴퓨터였으면 현대에는 사람(개인, 집단, 사회) ↔ 컴퓨터 (서비스, 컨텐츠)가 되었음. 1장 HCI와 UX - HCI 궁극적인 목적인 최적의 사용자경홤과 이 목적 달성을 위해 갖추어야 할 필수조건인 유용성..

공부/기타 2018.09.27

1. Python

1. 파이선(Python)이란, 90년도 귀도 반 로섬이 개발한 프로그래밍 언어이다. 우리나라에서 아직 대중적으로는 사용되고 있지 않지만, 외국에서는 교육 및 실무에서도 많이 사용한다. 대표적으로 구글, 드롭박스, 장고등이 있다. 이러한 추세로 인해 국내에서도 많은 사용자 층을 확보하고 파이선을 이용해 프로그램을 개발하는 기업 또한 늘어나고 있다. 2. 파이선의 특징 - 간결함 - 무료 - 문법이 쉬워 배우기 용이 - 인간다운 언어 - 개발속도가 빠름 - 프로그래밍이 즐겁다. 3. 파이선의 작업 3. 1 가능한 작업 - 시스템 유틸리티 제작 - GUI 프로그래밍 - C / C++ 결합 - 웹 프로그래밍 - 수치 연산 프로그래밍 - 데이터베이스 프로그래밍 - 데이터 분석, 사물 인터넷 3. 2 불가능한 작..

공부/기타 2018.01.11
반응형