그 외/클래식 4

C#, C++ 1,000,000번 연산 속도는 왜 다를까

앞선 포스팅에서 난 C#과 C++의 의 연산 속도가 다른 이유를 궁금해했다. 그 이유를 본 포스팅에서 한 번 탐구해볼 건데... 음... 뭐부터 시작하지? 무튼 내 생각을 여과없이 증명없이 나열할태니 같이 탐구해보자구요? 역사 C는 1972년에 개발되었다. 켄 톰슨과 데니스 리치는 분명 C가 이렇게 널리 쓰일 줄은 예상하지 못했을 거다.  이러한 C를 업그레이드한 C++가 1985년에 발표되었다.    C#은 .NET 프로젝트와 함께 2000년에 발표되었다. C#은 본래 C-like Object Oriented Language라는 이름을 가지고 있었고, 이름에서 유추할 순 있는데 java와 같은 객체지향 프로그래밍 언어를 C언어스럽게 독자적으로 개발한 것이 C#이란다.  만들어진 목적을 생각해보면... ..

그 외/클래식 2024.08.22

60FPS를 만들기 위한 조건

저녁에 친구가 60FPS를 만들기 위한 조건에 대한 얘기를 해줬다. FPS는 Frame Per Second의 약자로 1초당 보여지는 프레임 수를 의미한다. 60FPS는 1초당 60프레임이 보여짐을 의미하며, 반대로 얘기하면 60프레임을 연산하는데 1초가 걸려야 한다는 이야기이다.  # 60F/S -> 1F/0.016S 즉, 1 프레임을 연산하는데는 1/60second 약 0.016second의  시간이 최대치이다. 1프레임당 이 이상의 연산 시간이 소요되면 60FPS를 보장할 수 없다.  참고로 0.016s는 16ms와 같다.  따라서 개발자는 16ms라는 제한된 시간을 각 연산에 적절히 분배해야 한다.  필요한 연산에는 여러가지 있는데, 만약 리스트에 1,000,000개의 int형 변수를 추가한다면 얼..

그 외/클래식 2024.08.21

시간복잡도

개발자들끼리 알고리즘의 유용성을 논하는데 여러 가지 방법이 있는데, 가장 클래식한 것이 시간복잡도이다. 시간복잡도의 개념을 알아보자면, 이름만 봤을 땐 '알고리즘 수행에 걸리는 시간' 정도로 해석될 수 있겠다만 핵심은 '시간'이 아니라 '데이터 변화'에 있다. 정확히 말하자면 '알고리즘에 사용되는 데이터 수'가 변화함에 따라 연산 횟수가 어떻게 변화하는지가 중요하다. 때문에 시간복잡도는 기본적으로 데이터 수 변화에 따라 달라지지 않는 O(1) 데이터 수 변화에 따라 달라지는 O(N) & O(logN) 로 표현된다. 시간복잡도를 공부하는데 꼭 같이 딸려오는 알고리즘들이 있는데 바로 '정렬 알고리즘' 되시겠다.

그 외/클래식 2024.03.02

헝가리안 표기법

헝가리안 표기법에선 변수 타입을 변수 명에 prefix로 명시한다. 이는 변수 타입이 존재하지 않았던 BCPL(Before C Programming Language) 시절에 코딩 컨벤션으로 사용되기 시작했다. 그 시기가 1981년으로 무려 63년 전의 일이다.  시간이 흐르고 C, C#, C++ 등 변수 타입을 확실히 해주는 언어들이 등장했다. 발전된 컴파일러들은 잘못된 변수 타입에서 비롯하는 error 및 warning을 귀신같이 잡아주기 시작했고 강력한 IDE(Integrated Development Enviroment)들은 변수 타입을 팝업으로 표기해주는 등의 편의성을 제공한다.  본래 헝가리언 표기법이 사용되기 시작한 이유인 변수 타입의 부재와 그로 인한 공동 개발의 혼잡함이, 발전된 Coding..

그 외/클래식 2024.02.14