자료구조 : 데이터를 저장하고 관리하는 방식 자료구조에서 사용하는 메모리는 크게 HDD 와 RAM 이 존재한다. HDD 는 우리가 코드를 작성하면 저장하는 곳이고 이 코드를 실행하는 곳이 바로 RAM 이다. 이 RAM에 대해서 알아보자 RAM 0과 1로 이루어진 컴퓨터 ( 이진법 ) 램에는 수많은 레지스터가 존재한다. 그 레지스터가 on 일시 1 을 뜻하고 off 가 되면 0 이된다고 쉽게 생각해볼때 한 개의 레지스터는 2개의 수를 나타낼수 있는 것이다. 한개의 레지스터는 이진수를 영어로한 binary digit의 약자 bit 가 되는 것이다. 즉, 한개의 레지스터는 1bit 가 되는 것이다. 이처럼 1bit는 2개의 숫자로 표현하는 이진법을 사용하게 되고 2bit는 4개 나아가 8bit(1byte) 는..
CS

추상 클래스 미완성 설계도라고도 표현하는 추상 클래스는 일반 클래스와 다를 것이 없다. 그저 클래스 내에 추상 메소드가 하나 이상 포함되거나 클래스가 abstract로 정의되어 있는 경우를 말하게 된다. 그렇게 추상적으로 선언이 된 메소드를 자식 클래스에서 상속받아 완성하게 하는 목표를 가진 것이라고 할 수 있다. 하지만 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수는 없다. abstract class name { ... public abstract void methodName(); } 이런 식으로 추상 클래스 안에 추상 메소드가 들어가있는 것이다. 물론 추상이기 때문에 메소드의 구현부는 작성하지 않는다. 추상 클래스의 규칙 추상 클래스는 abstract를 붙여서 표현해야한다 클래스를 abstra..

Blocking 과 Non-Blocking 사람들이 굉장히 많이 헷갈려하는 Blocking 과 Non-Blocking에 대해 알아보자 중요한것은 Blocking 과 Non-Blocking은 동기와 비동기와는 관점을 다르게 봐야한다. Blocking과 Non-Blocking은 제어권이 어디에 있느냐에 대한 관점이다 작업을 시킨 주체에게 제어권이 있는지 혹은 작업을 처리하는 주체에게 제어권이 있는지에 대한 것이다. Blocking : 직접 제어를 할 수 없는 대상의 작업이 끝날 때까지 기다려야 하는 경우 Non-Blocking : 직접 제어할 수 없는 대상의 작업이 완료되기 전에 제어권을 넘겨주는 경우 Blocking 직접 제어를 할 수 없는 대상의 작업이 끝날 때까지 제어권을 넘겨주지 않는 것이다. 예를 ..

들어가기전에... 자바는 OS에 독립적인 특징을 가지고 있다. OS에 독립적인 특징이라는것은 우리가 해당 코드를 실행하는 환경이 Window이든 MacOS이던지 차이가 없이 구동이 가능하다는 얘기이다. 그게 가능한 이유는 JVM덕분이다. 그렇다면 JVM의 어떠한 기능 때문에, OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보도록 해보자 자바의 컴파일 과정 개발자가 Java를 사용해서 소스 코드를 작성한다(.java) 자바 컴파일러가 자바 소스파일을 컴파일한다. 이떄 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상 머신이 이해할 수 있는 코드이다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있다. 컴파일된..

JIT 컴파일 또는 동적 번역은 프로그램을 실제 실행하는 시점에 기계어로 번력하는 컴파일 기법이다. 컴파일러 와 인터프리터 컴파일과 인터프리터 모두 high-level language를 machine language로 번역한다 컴파일러는 소스 코드 전체(우리가 사용하는 코드)를 한번에 번역하여 목적 파일(기계어)로 만들어 메모리에 적재한다. 인터프리터는 소스 코드를 한 줄 한 줄씩 중간 코드로 번역을 한 후에 실행한다. 컴파일러는 소스 코드 전체를 컴퓨터 프로세서가 실행할 수 있도록 바로 기계어로 변환하게 된다. 인터프리터는 high-level 언어를 중간 코드로 변환하고 이를 각 행마다 실행한다 일반적으로 컴파일러가 각 행마다 실행하는 특성을 가진 인터프리터보다 실행시간이 빠르다. 컴파일러는 전체 소스..
들어가기 앞서... 멀티 프로세스와 멀티 스레드에 대하여 공부하기 전 프로세스와 스레드를 알고 가는 것이 중요하다. 만약 궁금하다면 해당 블로그를 먼저 보고 오자 https://latewalk.tistory.com/173 💻 프로세스와 스레드 💬 프로세스 프로세스의 사전적 의미로는 "컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램"이라는 의미로 프로그램의 실행 상태이자, 메모리 공간에 할당된 실체이다. 각 프로세스는 latewalk.tistory.com 멀티 프로세스 멀티 프로세스는 운영체제에서 하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있게 하는 기술이다. 일반적으로 하나의 프로그램을 실행하면 하나의 프로세스가 생성되고 그에 대한 메모리가 할당되지만, 부가적인 기능을 위해서..

💬 프로세스 프로세스의 사전적 의미로는 "컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램"이라는 의미로 프로그램의 실행 상태이자, 메모리 공간에 할당된 실체이다. 각 프로세스는 생성되면서 고유한 메모리 공간을 할당 받게 되고 때문에 프로세스는 다른 프로세스와 독립적으로 존재하여 하나의 프로세스에 충돌이 발생해도 다른 프로세스에는 영향을 주지 않는다. 즉, 이해하기 쉽게 말하자면 정적인 프로그램을 실행시켜 동적으로 변환되면서 실행된 상태를 말하는 것이다. 위에서 말한 프로그램과 혼동이 올 수 있다. 두 개의 차이를 명확히 알아보자 프로그램 프로세스 어떤 작업을 하기 위해 실행할 수 있는 파일 실행되어 작업중인 컴퓨터 프로그램 파일이 저장 장치에 있지만 메모리에는 올라가 있지 않은 정적인 상태 메모리에 ..

동적 계획법(DP, Dynamic Programming) 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 부분 문제 반복과 최적 부분 구조를 가지는 알고리즘을 일반적인 방법에 비해 더욱 적은 시간 내에 풀 때 사용한다. DP를 사용하는 이유(조건 정리) 우선 DP를 배우고자 하는 사람들은 DP 문제를 접하고 나서 온 것일것이다. 그럼 가장 기초적인 궁금증 도데체 왜 DP를 사용하는 것일까? 만약 우리가 문제를 푸는 과정에서 재귀 함수를 사용하는 경우가 분명히 존재한다. 재귀의 경우 같은 로직을 여러번 반복하기 때문에 굉장히 비효율적인 계산을 하게 된다 가장 대표적인 재귀문제 피보나치 수열을 예로 들어보자 int fibo(int n) { if (n
💬 Cookie 와 session의 등장 HTTP 는 비연결 지향으로 서버가 클라이언트의 요청에 따라 응답을 보내주면 바로 연결을 끊는다.(Connectionless) 또한, 연결을 끊는 순간 클라이언트와 서버의 통신이 종료되며 상태 정보를 유지하지 않는다.(Stateless) 이와 같은 특성으로 HTTP 프로토콜은 모든 요청 간의 의존 관계가 없어 현재 접속한 사용자가 이전에 접속한 사용자와 같은 사용자인지 알 수 없다. 즉, 클라이언트와 서버가 통신할 때마다 새롭게 연결해야 하며 클라이언트는 매 요청마다 인증 과정을 거쳐야 한다. 따라서, HTTP 프로토콜에서 이전 요청과 현재 요청이 같은 사용자의 요청인지 알게 되는 상태 유지를 위해 쿠키와 세션을 사용하게 되었다. 💬 Cookie Stataless..

💬 HTTP(Hypertext Transfer Protocol) 서버 / 클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다. Hypertext : 다른 페이지의 링크를 담고 있는 문서 Transfer : 이동통신 Protocol : 규약 HTTP는 인터넷에서 하이퍼 텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용하고 있다. 따라서 HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보내게 된다. HTTP는 텍스트, 이미지, 영상, JSON 등 거의 모든 형태의 데이터를 전송할 수 있다. 현제 HTTP/1.1이 가장 보편화 되어있으며 현재는 HTTP/2를 거쳐 3까지 개발이 되어있다. 하지만 1.1을 많이 사용하는 모습을 볼 수있다. HTTP의 ..