Reading7 힙(Heap) 힙은 크게 두가지로 나뉩니다. 메모리 할당에서의 힙: 컴퓨터 프로그래밍에서 "힙"은 동적으로 할당된 메모리 영역을 의미합니다. 이 메모리 영역은 정적인 스택과 대조되며, 필요에 따라 프로그램에서 동적으로 할당 및 해제됩니다. 힙은 주로 동적으로 크기가 변하는 데이터 구조를 저장하기 위해 사용됩니다. 예를 들어, 배열, 연결 리스트, 트리 등의 자료구조는 힙에 저장될 수 있습니다. 우선순위 큐에서의 힙: 힙은 이진 트리로 구현되는 자료구조로, 우선순위 큐를 구현하는 데 사용됩니다. 이진 힙은 보통 "최소 힙(Min Heap)" 또는 "최대 힙(Max Heap)"으로 분류됩니다. 최소 힙은 부모 노드가 자식 노드보다 작거나 같은 값을 갖는 완전 이진 트리이며, 최대 힙은 반대입니다. 이러한 속성은 우선순위 .. 2024. 4. 9. Array, LinkedList 특징, 차이점, 장단점 Array(배열) #특징 - 원소를 순서대로 저장합니다. - 인덱스를 사용하여 각 원소에 접근할 수 있습니다. - 크기를 미리 지정해야 하며, 크기를 변경하기 어렵습니다. #장점 - 원하는 위치의 데이터를 빠르게 검색하거나 변경할 수 있습니다. - 메모리 상에 연속적으로 저장되어 있기 때문에 캐시 효율이 좋습니다. #단점 - 크기를 변경하기 어렵습니다. 크기를 변경할 때마다 새로운 배열을 할당하고 이전 데이터를 복사해야 합니다. - 삽입, 삭제 작업이 비효율적입니다. 중간에 원소를 추가하거나 삭제할 경우 해당 위치 이후의 모든 원소를 이동해야 합니다. LinkedList(연결 리스트) #특징 - 각 원소는 데이터와 다음 노드를 가리키는 포인터로 이루어져 있습니다. - 크기를 미리 지정할 필요가 없으며, .. 2024. 4. 3. 프로시저(Procedure) 프로시저란? : 일련의 SQL 문을 하나로 묶어서 실행할 수 있는 저장된 프로그램 유형입니다. MySQL에서 프로시저를 생성하는 방법은 다음과 같습니다. 아래 예제는 MySQL에서 "Customers" 테이블의 데이터를 반환하는 간단한 프로시저를 생성하는 방법을 보여줍니다. DELIMITER // CREATE PROCEDURE GetCustomerDetails() BEGIN SELECT * FROM Customers; END // DELIMITER ; 위의 코드에서 DELIMITER는 문장 종결자를 변경하는 데 사용됩니다. MySQL에서 기본적으로 세미콜론(;)이 문장의 종료를 나타내지만, 프로시저의 경우 복잡한 내부 블록을 포함할 수 있으므로 DELIMITER를 사용하여 이를 변경합니다. 여기서는 //.. 2024. 4. 2. [DB] 인덱스(Index) 인덱스란? : 데이터베이스에서 검색 속도를 향상시키기 위해 사용되는 데이터 구조로, 테이블의 특정 열에 대한 빠른 검색 및 정렬을 가능하게 합니다. B-트리 : 자료구조로, 루트 노드, 리프 노드, 그리고 사이에 있는 브랜치 노드로 나뉩니다. 이런식으로 구성되어 테이블 탐색시 전부를 탐색하는게 아닌 "있을 법한" 노드를 탐색해 검색속도를 높힙니다. 인덱스 최적화 기법 인덱스는 비용이다. : 인덱스는 두 번 탐색하도록 강요하기 때문에 관련 읽기 비용이 듭니다. 또한 컬렉션 수정시 인덱스도 수정되어야하는 비용이 발생합니다. 항상 테스팅하라. : 인덱스 최적화 기법은 서비스 특징에 따라 달라지기 때문에 항상 테스팅하는 것 이 중요합니다. 복합 인덱스는 같음,정렬,다중 값, 카디널리티 순이다. : 여러 필드를 .. 2024. 3. 27. 스레드 스레드란? : 프로세스의 실행 가능한 가장 작은 단위. 프로세스의 특정한 수행 경로이자 프로세스 내에서 실행되는 여러 흐름의 단위이다. 멀티스레딩 : 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법 한 스레드가 중단(blocked)되어도 다른 스레드는 실행(running)상태일 수 있어서 빠른처리가 가능합니다. 동시성에도 큰 장점이 있습니다. 하지만 한스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 프로세스에 영향을 줄 수 있습니다. #동시성이란? : 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것 공유 자원 : 여러 스레드가 동시에 접근할 수 있는 데이터 또는 리소스 예를 들어, 한 프로그램에서 여러 스레드가 동시에 파일을 읽거나 쓰는 경우를 생각해보.. 2024. 3. 26. 2. 프로그래밍 패러다임 프로그래밍 패러다임이란? 말그대로 프로그래밍의 패러다임 형태입니다. 프로그래머에게 프로그래밍의 관점을 갖게 도와주는 개발 방법론입니다. 크게 선언형의 함수형, 명령형의 객체지향형과 절차지향형으로 나뉩니다. 각각 살펴봅시다. 1) 선언형과 함수형 프로그래밍 선언형 프로그래밍은 프로그램이 어떤(무엇을) 동작을 하는지에 중점을 두고 풀어내는지에 집중하는 패러다임이고 그 일종에 함수형 프로그래밍이 있습니다. 함수형 프로그래밍은 입력에 의해서만 출력이 결정되고 외부요인에 영향을 받지않게 순수 함수들로만 쌓아 로직을 구현하는 패러다임입니다. 또한 함수를 함수에서 반환이 가능하고, 변수나 메소드에도 할당 될 수 있는 일급 객체로 취급하는 고차함수를 활용해서 재사용성을 높이는 프로그래밍 방법입니다. 일급 함수(Firs.. 2024. 3. 17. 1.디자인 패턴(Design Pattern) 디자인 패턴이란? : 프로그램을 설계할 때 나타나는 문제들을 해결하기 위해 일반적인 '규약'의 형태로 만들어 놓은 것을 의미합니다. 어떤 문제가 발생했을 때 이런식으로 해결하자! 라고 정해진 약속이라 라이브러리와는 다르게 추상적인 느낌이 있습니다. 디자인패턴을 이용해 라이브러리, API, 프레임워크 등을 만든다고 생각하면 되겠습니다. 예시를 통해 이해해보겠습니다. 1) 싱글톤 패턴(Singleton Pattern) 싱글톤 패턴이란 "생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다." (위키백과 발췌)라고 하는데 무슨말일까요? Java를 사용하셨거나 공부해보셨다면 한번쯤 들어봤을 패턴입니다. 먼저 코드를 보시죠. cl.. 2024. 3. 17. 이전 1 다음