본문 바로가기

Computer Science

(37)
함수형 프로그래밍 기초 - 재귀, 카테고리 이론, 모나드(Monad), 고차 함수(Java) 함수형 프로그래밍 기초 저번 포스팅에서 함수형 프로그래밍이란 무엇인지, 함수형 프로그래밍의 주요 개념인 불변성, 참조 투명성 등을 알아보았구요, 람다 함수의 기반을 이루는 람다 대수가 무엇인지 알아보았습니다. 그리고 JAVA에서 함수형 프로그래밍을 구현하는 방법인 함수형 인터페이스에 대해서도 간단히 살펴보았습니다. 자세한 내용은 아래 포스팅을 확인해주세요. https://porolog.tistory.com/19#comment17080166 함수형 프로그래밍 입문 with 람다 대수, 함수형 인터페이스 (Java) 함수형 프로그래밍? 오늘은 함수형 프로그래밍에 대해 알아보겠습니다. 함수형 프로그래밍? 함수로 만들면 함수형 아닌가? 절차지향형 프로그래밍에서는 함수를 사용하니까 지금껏 해왔던게 porolog...
오토마타 이론과 Parser의 원리 - HTML Parser 만들기 (Java) 이번 포스팅에서는 비교적 간단한 HTML, XML 문서가 어떻게 파싱되는지 알아보겠습니다. 그 전에 XML, HTML이 무엇인지부터 알아야합니다. XML, HTML을 파싱한 결과물인 DOM의 구조에 대해서도 살펴보겠습니다. HTML, CSS, Javascript 코드는 웹 페이지를 구성하는데요, HTML을 파싱하여 생성된 트리 자료구조를 DOM, CSS를 파싱하여 얻은 자료 구조를 CSSOM, JS 코드는 AST라고 합니다. DOM, CSSOM, AST로 웹브라우저에 화면이 렌더링되는 과정을 살펴보면서 컴파일링 이론을 왜 배워야하는지 생각해보겠습니다. 좀 더 나은 이해를 돕기위해 위의 DOM, 그리고 컴파일러 이론의 기반을 이루는 오토마타 이론을 간단히 알아보고, 이를 바탕으로 간단한 HTML Parse..
함수형 프로그래밍 입문 with 람다 대수, 함수형 인터페이스 (Java) 함수형 프로그래밍? 오늘은 함수형 프로그래밍에 대해 알아보겠습니다. 함수형 프로그래밍? 함수로 만들면 함수형 아닌가? 절차지향형 프로그래밍에서는 함수를 사용하니까 지금껏 해왔던게 함수형 프로그래밍이군? 이라고 생각할 수 있습니다.(정확히는 제가 그렇게 생각했습니다..) 먼저 정의부터 알아보겠습니다. 함수형 프로그래밍이란? 하나의 프로그래밍 패러다임으로 정의되는 일련의 코딩 접근 방식 자료처리를 수학적 함수의 계산으로 취급, 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임을 의미 자바는 객체지향 언어입니다. 객체를 정의할 때 상태와 메서드가 결합되어있다는 점이 특징입니다. 절차지향형 언어와 달리 객체 지향 언어에서는 클래스의 서브루틴을 function이라고 부르지 않고 method(행위라고도 합니다)라고..
객체지향 설계 연습(SOLID, GRASP) - 좌표평면 도형 그리기 (Java) 들어가며 객체지향 언어인 자바를 사용할 때, 객체 지향 설계의 중요성에 대해 정말 많이 들었습니다. 그래서 책도 샀습니다. '객체지향의 사실과 오해'라는 책도 읽어보았고 앞으로 '오브젝트'라는 책도 읽어볼 예정인데요, 사실 책 한 권을 읽었음에도 아직 객체지향적으로 사고하고 구현하는 것이 익숙하지 않습니다. 그리고 설계를 했을 때 이 설계가 맞는 것인지에 대한 확신도 없습니다. 물론 설계에 정답은 없겠지만 오답은 존재한다고 생각하기에 이 구조가 좋은 구조인지에 대한 답을 얻기 위해 객체 지향 설계에 대한 이해도가 필요하다는 생각이 자주 드는 요즘입니다. 이번 포스팅의 주제는 따라서 1. 기본 용어 정리 2. 객체 지향적 설계를 위한 5가지 원칙(SOLID) 3. GRASP 패턴 소개 4. 개념을 적용한 ..
반효경 운영체제 - 4. CPU Scheduling CPU Scheduling은 무엇인가? 프로그램 실행은 CPU burst와 I/O burst의 연속이다. CPU burst : CPU만 실행하는 단계 I/O burst : I/O만 실행하는 단계 프로그램의 종류에 따라 CPU burst와 I/O burst의 빈도가 다르다. 사용자가 사용하는 프로그램(Interactive)은 보통 상호작용이 있기에 I/O burst의 빈도가 다르다. 1000*1000 행렬 계산 프로그램 등은 CPU burst의 비중이 높다. 위 그림의 경우 I/O bound job의 빈도는 굉장히 높고, CPU bound job의 빈도는 굉장히 낮았음을 보여준다. I/O가 중간에 끼어들어 CPU를 짧게 쓰는 경우의 job을 I/O bound job이라고 한다. CPU만 오랫동안 쓰는 경우..
프로세스의 메모리 영역 (Heap, Stack) 구현하기 (Java) 저번 포스팅에서는 16비트를 기반으로 한 CPU와 메모리의 프로토 타입을 간단하게 구현해보았습니다. 이번 포스팅에서는 운영체제와 연계하여 프로세스가 실행될 때, 가상 메모리 상에서 어떻게 메모리를 관리하는지 간단하게 구현을 통해 알아보도록 하겠습니다. 프로세스의 메모리 프로세스가 실행되면 운영체제는 프로세스에게 메모리 공간을 할당해주는데요, 물리적인 메모리가 아닌 가상 메모리에서 프로세스 별로 메모리를 관리하는 방식을 프로세스 메모리 구조 모델이라고 합니다. 가상 메모리(Virtual Memory)와 물리 메모리 사실, 가상 메모리는 이번 포스팅의 메인 주제는 아니지만, 프로세스의 메모리를 이해하기 위해 필요하므로 간단하게 알아보겠습니다. [물리 메모리] - 물리적인 메모리 그 자체를 의미합니다. RAM..
미니 16비트 CPU + 메모리 구현해보기 (Java) 안녕하세요, 오늘은 16비트의 CPU와 메모리를 간단하게 자바로 구현해보겠습니다. 구현에 앞서 CPU의 구조와 작동원리를 알아야겠죠. CPU의 기능 CPU는 명령어 인출과 해독을 모든 명령어에 대해 공통적으로 수행합니다. 그리고, 데이터 인출, 데이터 처리, 데이터 저장을 명령어에 따라 필요한 경우 수행합니다. 명령어 사이클의 각 개념은 아래와 같습니다. 명령어 인출 : 기억장치로부터 저장된 명령어를 읽어오는 과정 명령어 해독 : 수행해야할 동작을 결정하기 위해 명령어를 해독하는 과정 데이터 인출 : 데이터가 필요한 경우, 기억/입출력 장치로부터 데이터를 read 데이터 처리 : 데이터에 대한 산술,논리적 연산 수행 데이터 저장 : 처리 과정을 거쳐 얻어진 결과를 저장하는 과정 위 과정을 cpu는 clo..
반효경 운영체제 - 3. 프로세스 관리 프로세스 생성 부모 프로세스가 자식 프로세스 생성 복제 생성을 한다. 1대 n의 관계 구조가 트리형태로 구성된다. 프로세스는 자원을 필요로 한다. 운영체제로부터 받는다. 부모와 공유한다. 자원의 공유 부모와 자식이 모든 자원을 공유하는 모델 일부를 공유하는 모델 전혀 공유하지 않는 모델(원칙) 수행(Execution) 부모와 자식은 공존 자식이 종료될 때까지 부모가 기다리는(wait, blocked) 모델 주소 공간 자식은 부모의 공간을 복사함 (binary and OS data) 자식은 그 공간에 새로운 프로그램을 올림 유닉스의 예 fork() 시스템 콜이 새로운 프로세스를 생성 부모를 그대로 복사 (OS data except PID + binary) 주소 공간 할당 fork 다음에 이어지는 exec ..