CS

    Stack과 Heap

    Stack과 Heap

    메모리 구조 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 한다. 또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다. 따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하는데 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 4가지가 있다. 코드(code) 영역 데이터(data) 영역 스택(stack) 영역 힙(heap) 영역 코드(code) 영역 메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부른다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다. 데이터(data) 영역 메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수..

    라이브러리 vs 프레임워크

    라이브러리 vs 프레임워크

    라이브러리 라이브러리란 필요한 기능들이 모여있는 코드의 묶음이다. 자주 사용되는 기능들을 라이브러리(객체나 함수등의 형태)로 만들어두면, 필요할 때마다 직접 호출하여 사용할 수 있다. 물론 남들이 만들어둔 외부 라이브러리도 가져다 사용할 수 있다. 1) Browser환경에서 script src 로 불러들이는 js파일(JQuery 등) 2) node.js 환경에서 npm으로 설치한 모듈 3) Python 환경에서 pip로 설치한 패키지/모듈 4) Java 환경에서 설치한 jar 프레임워크 프레임워크는 작업(work)의 구조(frame)가 정해져 있는 라이브러리라고 볼 수 있다. 단, '프레임워크가 원하는 방식'대로 다양한 기능을 제공한다. 앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은..

    API

    API

    API는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 인터페이스는 어떤 기계간의 장치끼리 정보를 교환하기 위한 수단이나, 방법을 의미한다. 예를 들어서 집에서 TV를 켜기 위해서 리모콘을 들고 TV에 리모콘 전원 버튼을 누름으로써 TV가 켜지게된다. 즉, 사전에 TV와 통신을 하기 위해서 리모콘에서는 TV에 정의된 규격에 의해 어떤 신호를 보낼 수 있도록 만들어진 장치이며, 이러한 신호를 서로 주고 받기 위한 방법을 인터페이스라고 하는한다. API는 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고, 주문(명령)을 받으면 요리사(응용프로그램)와 상호작용하여 요청된 메뉴(명령에 대한 값)를 전달한다. 쉽게 말해,..

    정적 웹페이지와 동적 웹페이지

    정적 웹페이지와 동적 웹페이지

    인터넷을 이용하면서 접속하게 되는 웹 페이지는 크게 두 가지로 나뉜다. 마치 컴퓨터에 저장된 메모장 파일을 열어보듯이 그대로 보는 정적 웹 페이지, 다른 변수들에 의해서 변경되어 보이는 동적인 웹 페이지. 사실 사용자 입장에서는 서버에서 처리된 HTML로 이루어진 웹 페이지만 전달받기 때문에, 굳이 웹 페이지를 정적인 웹 페이지와, 동적인 웹 페이지를 구분 지을 필요는 없다. 그러나, 소셜 미디어 플랫폼이 다양해지면서, 인터넷을 이용하는 사람이라면 개인 sns계정부터 블로그, 쇼핑몰까지 굳이 사업을 하지 않더라도 커뮤니케이션의 일환으로 크고 작든 자신만의 웹 페이지를 운영하고 있다. 정적 웹 페이지 웹 서버에 이미 저장된 html 문서를 클라이언트에게 전송하는 웹 페이지 사용자는 서버에 저장된 데이터가 ..

    [알고리즘] 탐색알고리즘3 - 해쉬탐색(Hash Search)

    해시 탐색법 (Hash Search) 앞에서 살펴본 선형 탐새개이나 이진 탐새개법의 전체 조건은 어떤 데이터가 어떤 요소에 들어 있는지 전혀 모르는 상태에서 검색을 시작한다는 것입니다. 그러나 해시 탐색법은 데이터의 내용과 저장한 곳의 요소를 미리 연계해 둠으로써 극히 짧은 시간 안에 탐색할 수 있도록 고안된 알고리즘입니다. 해시 탐색법은 데이터를 데이터와 같은 첨자의 요소에 넣어 두면 한 번에 찾을 수 있지 않을까?라는 아이디어에서 출발합니다. 예를 들어보면 36인 데이터는 첨자 36의 요소에, 48인 데이터는 첨자 48의 요소에 두는 식입니다. 하지만 이렇게 2개의 데이터만 저장해도 49개의 요소를 가진 배열이 있어야 합니다. 공간적으로 굉장히 낭비가 심해집니다. 좀 더 효율적으로 배열을 사용하기 위..

    [알고리즘] 탐색알고리즘2 - 이진탐색(Binary Search)

    [알고리즘] 탐색알고리즘2 - 이진탐색(Binary Search)

    이진 탐색법 (Binary Search) 이진 탐색법은 탐색의 대상인 데이터가 오름차순으로 정렬되어 있는 경우에 데이터를 이분화하면서 특정 값을 탐색하는 알고리즘이다. 가운데에 있는 요소를 먼저 탐색한다. 조건이 가운데 요소보다 정렬순서가 빠른지 느린지를 보고, 탐색범위를 좁힌다. 탐색범위를 좁혔으면 다시 한번 가운데를 탐색해본다. 계속 찾을때까지 반복하여 원하는 결과를 찾으면 탐색 종료. 이진 탐색은 정렬된 리스트에만 사용할 수 있다는 단점이 있지만, 검색이 반복될 때마다 검색 범위가 절반으로 줄기 때문에 속도가 빠르다는 장점이 있다. 종료조건 1. 리스트에서 검색할 값과 같은 요소를 발견한 경우 2. 더 이상 검색할 범위가 없어 검색 실패(검색값이 존재하지 않는 경우) function findInde..

    [알고리즘] 탐색 알고리즘1 - 선형 탐색(Linear Search)

    [알고리즘] 탐색 알고리즘1 - 선형 탐색(Linear Search)

    선형 탐색(Linear Search) 요소가 직선 모양으로 늘어선 배열에서의 검색은 원하는 키 값을 갖는 요소를 만날 때까지 맨앞부터 순서대로 요소를 검색하면 되는데, 이것이 선형 검색(linear search) 또는 순차 검색(sequential search)이라는 알고리즘이다. 검색이 종료되는 종료 조건 1. 검색할 값을 발견하지 못하고 배열의 끝을 지나간 경우검색할 값과 같은 요소를 발견한 경우 2. 검색할 값과 같은 요소를 발견한 경우 찾는 대상이 앞쪽에 있으면, 짧은 시간에 탐색할 수 있지만, 뒤쪽에 있거나 결과가 없거나 혹은 탐색대상이 많으면 많은 시간이 걸리고 비효율적일 수 있다. 단순하고 이해하기 쉽고, 구현하기 쉽다는 장점이 있지만, 효율은 좋지않다. #include #include us..

    [알고리즘] 알고리즘의 복잡도와 Big-O 표기법

    [알고리즘] 알고리즘의 복잡도와 Big-O 표기법

    어떤 문제를 해결하는데 있어서 나오는 알고리즘은 다양할 수 있다. 간단한 예로 주어진 정수 n의 절대값을 구하라는 문제가 있을 때, 정수 n을 제곱한 뒤, 그 값에 다시 루트를 씌운다. 정수 n이 음수인지 확인하고, 조건이 참이면 그 값에 -1을 곱한다. 이처럼 간단한 문제에서도 다양한 풀이 방법이 존재한다. 다양한 풀이 방법들 중 어느 알고리즘이 더 좋은지 분석하기 위해 복잡도를 정의하고 계산한다. 즉, 복잡도 계산은 가장 빠르게 실행되는 알고리즘을 찾는 방법이라고 볼 수 있다. 알고리즘 복잡도(Complexity) 표현 방식 알고리즘의 복잡도를 표현하는 방식에는 크게 두 가지가 있다. 시간 복잡도 문제를 해결하는데 걸리는 시간과 입력의 함수 관계를 가리킨다. 쉽게 말해 알고리즘의 실행 속도(성능)을 ..