명령형 프로그래밍 대표적으로 절차지향, 객체지향 프로그래밍이 있으며, 프로그램에서 값이나 상태의 변화를 중요하게 생각합니다. 컴퓨터가 수행할 명령들을 순서대로 작성한 것이며, 어떻게 그것을 해결할 것인가에 관심을 둔 프로그래밍 기법입니다. 시간 순서대로 문제를 해결하며 알고리즘을 명시하지만, 목표를 명시하지 않는다는 특징이 있습니다. 절차지향 프로그래밍 (명령형) 객체 지향 프로그래밍과 비교되며, 무엇을 어떤 절차로 할 것인가에 중점을 두고 있습니다. 순차적인 처리가 중요하며 프로그램 전체가 유기적으로 연결되도록하는 프로그래밍 패러다임 입니다. 물이 위에서 아래로 흐르는 것처럼 순차적인 처리를 중요시하는 프로그래밍 기법으로 C언어가 대표적입니다. 실행속도가 빠르지만, 코드의 순서가 바뀌면 동일한 결과를 ..
Restful API Restful API는 HTTP 통신을 Rest 설계 규칙을 잘 지켜서 개발한 API입니다. Rest 설계 규칙은 URI은 정보의 자원만 표현해야 하며, 자원의 상태와 행위는 HTTP Method에 명시하는 것을 말합니다. URI는 명사를 사용한다, 슬래시로 계층 관계를 포현한다, 마지막 문자로 슬래시를 포함하지 않는다 등의 규칙이 있습니다. API*: Application Programming Interface로 운영체제와 응용프로그래밍 사이의 통신에 사용되는 언어나 메시지 형식 프레임워크와 라이브러리의 차이 둘의 차이는 제어 흐름에 대한 주도권이 누구에게 혹은 어디에 있는가에 있습니다. 프레임 워크는 전체적인 흐름을 쥐고 있고, 개발자는 그 안에서 라이브러리에 대한 흐름을 쥐고 ..
Array(List)의 특징과 장단점 Array 배열을 활용하면 순차적으로 데이터를 저장한다는 특징이 있습니다. 데이터에 순서가 있기 때문에 0부터 시작하는 index가 존재하며, index를 사용해 특정 요소를 찾고 수정이 가능합니다. 순차적으로 존재하는 데이터의 중간에 요소가 삽입되거나 삭제되는 경우 그 뒤의 모든 요소들이 한 칸씩 뒤로 밀리게 됩니다. 순서가 중요한 자료구조에서 순서를 보장해주는 Array를 활용하는 것이 좋습니다. Kotlin에서의 Array와 List array는 사이즈가 할당되어져 있고, Mutable 타입이므로 수정이 가능합니다. 인덱스를 참조해서 값을 수정할 수 있다는 장점이 있습니다. 리스트는 순서가 있고, 사이즈는 자동할당되며 대부분 수정이 불가능한 ImmutableLi..
콘보이 현상(convoy effect) 콘보이 현상이란 작업 시간이 긴 프로세스가 먼저 큐에 도착해서 다른 프로세스의 실행 시간이 전부 늦춰져 효율이 떨어지는 현상입니다. FCFS(first- come firts served) 스케줄링은 비선점으로, 순차적으로 먼저 큐에 들어온 작업부터 실행하므로 콘보이 현상이 발생합니다. 선점형 스케줄링과 비선점형 스케줄링 선점형은 하나의 프로세스가 다른 프로세스 대신에 CPU를 차지할 수 있음을 말하고, 비선점형은 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음을 말합니다. 동기와 비동기 동기는 순차적, 직렬적으로 테스크를 수행하고, 비동기는 병렬적으로 테스크를 수행합니다. 동기(synchronous)는 서버에 데이터를 요청하고 데이터가 응답..
프로세스 프로세스는 실행 중인 프로그램을 말하며, 완벽하게 독립접으로 실행됩니다. 메모리에 올라와 있고 실행되고 있는 프로그램의 단위이며, 메모리 영역(Code, Data, Heap, Stack)을 가지게 됩니다. 프로세스는 최소 1개의 쓰레드(메인 스레드)를 가지고 있습니다. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스에서 다른 프로세스의 변수나 자료구조에 접근이 불가능 합니다. 접근하려면 파이프, 파일, 소켓 등의 통신 방법을 사용해야 합니다. 쓰레드 쓰레드는 프로세스 내에서 Stack만 따로 할당 받고, 그 이외의 메모리 영역 (Code, Data, Heap) 영역을 공유합니다. 프로세스 내에서 실행되는 여러 허름의 단위이며, 같은 프로세스 내의 여러 스레드들은 같은 힙 공간을 공유합..