프로세스 프로그램이 메모리를 할당받아 실행되는 상태 Code, Data, Heap, Stack 영역이 존재한다. Multi-process 각 프로세스는 독립적이다. IPC를 사용하여 통신을 한다. Context Switching 비용이 크다. 동기화 작업이 필요하지 않다. Multi-thread 공유된 자원을 이용하기에 통신 비용이 줄어든다. 공유 자원을 이용하기에 메모리 사용량이 줄어든다. Context Switching 비용이 적다.(이유는 마찬가지) 공유 자원 관리를 해야한다. Multi-core 하드웨어의 측면이다. 동시성 여러 실행 단위를 번갈아 실행하면서 동시에 일어나는 것 처럼 보이는 것 병렬 처리 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 동시에 처리하는 것
TDD 테스트 코드를 먼저 만들고, 실제 프로덕션 코드를 나중에 만드는 개발방법 Red : 실패하는 테스트를 구현 Green : 테스트를 성공하도록 프로덕션 코드 구현 Blue : 프로덕션 코드와 테스트 코드를 리팩토링 장점 자연스럽게 테스트 커버리지가 높아진다. 오버엔지니어링을 방지한다. 불필요한 코드를 작성하지 않게 해준다. 설계에 대한 피드백이 빠르다. Unit Test(단위 테스트) 가장 작은 단위의 테스트 일반적으로 메서드 레벨 목적 문제점 발견 쉬운 변경 품질 향상 코드의 문서화 FIRST 법칙(좋은 테스트 코드를 작성하는 법칙) F(Fast) : 빠르게 I(Independent) : 독립적으로 R(Repeatable) : 반복 가능하게 S(Self-Validating) : 자가 검증 가능하게..
함수형 프로그래밍 인풋과 아웃풋이 있다. 외부 환경으로부터 철저하게 독립적이다. 같은 인풋에 대해 같은 아웃풋이 나온다. 부작용(부수 효과)로부터 자유롭다. 함수형 프로그래밍은 ‘선언형’이다. 함수는 ‘값’이다. 함수는 ‘고계함수’다. 커링 - 다른 함수를 이용해 새로운 함수를 만드는 것 함수 컴비네이터
재귀함수 자기 자신을 호출하는 함수 종료 조건이 호출될 때 까지 반복적으로 호출된다. 반복문으로 대체 가능하다. 코드가 간결하다. 호출될 때마다 메모리 스택에 쌓여 Stack Overflow가 발생할 수 있다. 꼬리 재귀 최적화 선형 알고리즘으로 해석하여 실행한다. Stack Overflow가 발생하지 않는다. 언어에서 기능을 지원해야 한다. 대표적인 예 - 하노이의 탑
JVM 자바 바이트코드는 타겟 플랫폼과 상관 없이 JVM 위에서 동작한다. “WORA”(Write Once, Run Anywhere) JVM 내부 구조 Runtime Data Area Java ByteCode를 실행하기 위해 사용하는 데이터 공간 Method Area, Heap, Stack 을 사용한다. ++추가 내용은 너무 깊게 들어가 기록하지 않았다.
Transport Layer(전송 계층) End Point 간 신뢰성 있는 데이터 전송을 담당하는 계층 신뢰성 : 데이터를 순차적, 안정적인 전달 전송 : 포트 번호에 해당하는 포레세스에 데이터를 전달 Transpor Layer 이 없다면? 데이터의 순차 전송이 원활하지 않게 된다. Flow(흐름 문제) 발생 수신자가 처리할 수 있는 데이터 양을 초과 Congestion(혼잡 문제) 발생 네트워크의 데이터 처리 속도가 다르기 때문에 발생한다.→ 데이터 손실이 발생한다. TCP(Transmission Control Protocol) 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜 Connection 연결(3 way-handshake) - 양방향 통신 Flow Control(흐름 제어) Congestio..