갬장장이
'lang' 카테고리의 글 목록 (4 Page)

lang

lang/js, ts

[PHP] include, require 및 경로 설정 관련

__DIR__ -> 현재 이 php파일의 디렉토리. (절대 경로) $_SERVER["DOCUMENT_ROOT"] -> 웹서버 루트 디렉토리. (절대 경로) ../ -> 상위 디렉토리 (상대 경로) 사용 예제:

lang/js, ts

[HTML, PHP] GET vs POST

html에서 사용자로부터 정보를 받을 때 태그를 사용해서 받을 수 있다. 이떄 method를 무엇을 지정하느냐에 따라 정보 전달 방식이 달라진다. Input: Input2: 위 코드는 POST 방식을 통해 정보를 전달하는 방식이다. 이걸 GET방식으로 바꿔줄려면 POST를 GET으로 바꾸기만 하면 된다. 이렇게 받을 수 있다. 마찬가지로 GET으로 바꾸려면 POST만 GET으로 바꾸면 된다. 그렇다면 POST와 GET의 차이는 무엇일까? 용도를 놓고 보았을 때, GET은 값을 가져와서 보여줄 때 사용되고 POST는 값을 변경해야 할 떄 사용된다. 보안이 중요한 정보들을 전송할 때에는 거의 항상 POST가 사용된다. 그 외 다른 차이점들을 살펴보자면 1. GET은 보낼 수 있는 정보량(글자수)에 제한이 있..

lang

ARC(Automatic Reference Counting) vs GC (Garbage Collection)

본 포스트는 개인 학습 기록용으로 작성되었습니다, 오류가 있을 수 있습니다 ARC와 GC는 모두 메모리를 자동으로 제어해주는 수단이다. 그러나 이 두가지 방식에는 약간의 차이가 있다. *ARC를 GC의 한 방식이라고 보는 시점도 있지만, 본 포스트에서는 둘을 구분해서 작성했습니다. ARC(Automatic Reference Counting) ARC는 컴파일 과정에서 코드를 분석해 각 객체들의 참조 횟수(레퍼런스 카운트)를 기록하고 참조 횟수가 0이 되면 해당 객체가 메모리 상에서 해제되도록 추가적인 코드를 삽입하는 방식이다. 객체가 다른 곳에서 참조된다면 참조 횟수를 증가시키고, 한 번 참조된 객체가 다시 사용되지 않을 때에는 참조횟수를 감소시킨다. 이때 만약 어떤 객체의 참조 횟수가 0이 된다면, 해당..

lang/python

GIL(Global Interpreter Lock)이란?

GIL을 이해하기 전에 알아야 할 개념들: 쓰레드(Thread)와 프로세스(Process), 멀티 스레딩 ARC(Automatic Reference Counting) GIL이란? 파이썬은 하나의 프로세스에서 한번에 딱 하나의 스레드만이 실행되도록 제한을 걸어둔다. 이를 GIL(Global Interpreter Lock)이라고 부른다. 주의해야 할 점은, GIL은 여러 스레드의 생성 자체를 막는 게 아니라는 점이다. GIL은 어디까지나 여러 스레드가 동시에(Parallel) 실행되는 것을 방지하는 것 뿐이기 때문에, I/O 가 존재하는 프로그램에서는 설사 파이썬으로 작성되었다고 하더라도 여전히 스레딩을 통한 성능 향상을 기대할 수 있다. 왜 GIL이 존재하는가? GIL의 존재이유는 여러가지가 있지만, 가장..

lang/c++

동적 바인딩 혹은 늦은 바인딩이란(Dynamic binding)

동적 바인딩(늦은 바인딩)이란? 컴파일 단계에서 변수/함수의 메모리 주소가 결정되는 것을 이른 바인딩(Early binding)이라고 한다. 이와 반대로 컴파일 이후 프로그램 실행 도중에 변수/함수의 메모리 주소가 결정되는 것을 동적 바인딩(Dynamic binding)이라고 한다. #include using namespace std; void TestFunc() { cout

lang/c++

Virtual 키워드의 세부적인 작동 원리 - 함수 포인터와 Vtable

함수 포인터란? 말 그대로 함수를 가리키는 포인터이다. 코드를 통해 사용방법을 설명하겠다. void PrintNumber(int n) { std::cout Vtable 값에는 Apple::Hello()를 가리키는 함수 포인터가 저장된다. 그리고 *apple->__vfptr은 기존에 가리키던 Vtable 대신 새로 생긴 Vtable을 가리킨다. 이러한 과정을 거친 후 apple->Hello()를 실행하면 Vtable에 저장된 데이터를 통해 우리가 실행해야 하는 함수가 Apple::Hello()라는 것을 알 수 있고, 덕분에 virtual 키워드가 정상적으로 작동하게 되는 것이다.

lang/c++

STL Set의 메모리 구조

1,2,3,4,5를 저장한 STL Set은 메모리에 다음과 같은 형태로 저장되어있다. 이처럼 STL Set은 BST(Binary Search Tree)를 이용해 정보를 저장한다. 여기서 중요한 점은 다음과 같다. 1) find, insert, delete의 경우 모두 O(log n)의 time complexity를 갖는다. (이때 insert와 delete의 경우 트리 자체를 새로 생성해야 하는 상황이 발생할 수도 있다.) 2) Set은 데이터를 정렬된 형태로 출력할 수 있는데, 이는 트리 구조를 가지는 Set의 특성 상 데이터 출력시 트리 순회를 통해서 순서를 정렬해서 출력할 수 있기 때문이다.