변하지 않는 상태를 유지하는 방법, 불변성(Immutable)

이번 포스팅에서는 순수 함수에 이어 함수형 프로그래밍에서 중요하게 여기는 개념인 불변성(Immutable)에 대한 이야기를 해보려고 한다.

사실 순수 함수를 설명하다보면 불변성에 대한 이야기가 꼭 한번은 나오게 되는데, 대부분 “상태를 변경하지 않는 것”이라는 짧은 정의로 설명하거나, 혹은 불변성을 해치는 행위들을 예시로 들고 이런 행위들을 금지 행위로 규정하며 설명을 진행하게된다.

수학에서 기원한 프로그래밍 패러다임, 순수 함수

이전에 작성했던 기존의 사고 방식을 깨부수는 함수형 사고 포스팅에 이어, 이번 포스팅에서는 함수형 프로그래밍이 지향하는 관점을 실제 프로그램에 구현하기 위해 알고 있어야하는 필수적인 개념 중 하나인 순수 함수(Pure functions)에 대한 이야기를 해볼까 한다.

20대의 마지막, 2019년을 돌아보며

이제 필자의 마지막 20대를 보내는 2019년도 어느덧 10일 정도 밖에 남지 않았다. 물론 서른이 된다고 해서 크게 달라지는 것은 없지만, 스무살이 되었을 때 이후 처음으로 나이 앞 자리가 바뀌는 만큼 기분이 싱숭생숭 하기도 하다.

기존의 사고 방식을 깨부수는 함수형 사고

최근 많은 언어들이 함수형 프로그래밍 패러다임을 도입하며, 이에 대한 개발자들의 관심 또한 나날히 높아지고 있다. 필자 또한 함수형 사고라는 책을 읽으면서 기존의 패러다임과 사뭇 다른 함수형 프로그래밍에 대해 많은 관심을 가지게 되었던 기억이 있다.

솔직한 피드백으로 좋은 팀워크를 만들 수 있을까? - 파워풀을 읽고

최근 4일 동안 심한 몸살에 걸려 침대에만 누워있으면서, 컴퓨터를 멀리 하고 오랜만에 책을 읽었다. 마침 입사 예정인 회사에서 “린 스타트업”과 “파워풀” 두 권의 책을 보내주었기 때문에 무엇을 읽어볼까하는 고민을 할 시간을 줄일 수 있었다.

사이 좋게 네트워크를 나눠 쓰는 방법, TCP의 혼잡 제어

혼잡 제어란, 말 그대로 네트워크의 혼잡 상태를 파악하고 그 상태를 해결하기 위해 데이터 전송을 제어하는 것을 이야기한다.

네트워크는 워낙 광대한 블랙박스이기 때문에 정확히 어디서 어떤 이유로 전송이 느려지는지는 파악하기 힘들지만, 단순히 느려지고있다 정도는 각 종단에서도 충분히 파악할 수 있다. 그냥 데이터를 보냈는데 상대방으로부터 응답이 늦게 오거나 안오면 뭔가 문제가 있다는 것이니 말이다.

패킷의 흐름과 오류를 제어하는 TCP

TCP(Transmission Control Protocol)은 원활한 통신을 위해 전송하는 데이터 흐름을 제어하고 네트워크의 혼잡 상태를 파악해서 대처하는 기능을 프로토콜 자체에 포함하고 있다.

TCP가 연결을 생성하고 종료하는 방법, 핸드쉐이크

저번에 작성했던 TCP의 헤더에는 어떤 정보들이 담겨있는걸까? 포스팅에 이어 이번에는 TCP의 핸드쉐이크 과정과 그 속에서 변화하는 TCP 상태에 대해서 한번 알아보려고 한다.

불안한 마음 정면으로 마주보기

지난 달, 다니고 싶었던 회사의 면접에서 기초 실력 부족으로 시원하게 박살났다. 다행히 면접이 끝난 직후 필자가 대답하지 못했던, 풀어내지 못했던 질문들과 문제를 깃허브에 정리해두었기 때문에 어떤 것을 공부해야하는지 바로 알 수 있었고, 한 달동안 컴퓨터 사이언스의 기초에 대한 내용을 집요하게 파헤쳤다.

TCP의 헤더에는 어떤 정보들이 담겨있는걸까?

저번에 HTTP/3는 왜 UDP를 선택한 것일까? 포스팅을 진행하며 TCP에 대해 간단한 언급을 했었지만, 해당 포스팅에서는 기존의 HTTP에서 사용하던 TCP에 어떤 문제가 있었는지에 집중해서 이야기했었지만 이번에는 TCP 자체에 조금 더 집중해서 이야기해보려고 한다.

수학과 함께 복잡한 문제를 단순하게 만들자!

최근 많은 IT 기업들이 개발자를 채용할 때 코딩 테스트를 시행하고 있다. 회사마다 어떤 스타일의 문제를 출제하는지 차이는 있지만, 대부분 간단한 알고리즘 풀이 또는 Codility프로그래머스와 같은 사이트처럼 실무에서 겪을 만한 상황을 살짝 섞어놓는 느낌의 문제를 선호하는 것 같다.

[JS 프로토타입] 프로토타입을 사용하여 상속하기

이번 포스팅에서는 이전 포스팅에 이어, 프로토타입을 사용한 다양한 상속 패턴에 대한 이야기를 해볼까 한다.

사실 자바스크립트에는 상속이나 캡슐화와 같은 개념이 명시적으로 존재하지는 않기 때문에 자바나 C++ 같은 클래스 기반 언어를 사용하던 개발자들은 자바스크립트에 클래스가 없다는 사실에 혼란스러워한다.

[JS 프로토타입] 자바스크립트의 프로토타입 훑어보기

이번 포스팅에서는 자바스크립트(JavaScript)하면 빠질 수 없는 프로토타입(Prototype)에 대해서 한번 이야기해보려고 한다.

프로토타입은 자바스크립트를 ES5 시절부터 사용해오던 분들에게는 매우 익숙하지만 ES6부터 시작하신 분들은 대부분 클래스를 사용하기 때문에 익숙한 개념은 아닐 것이라고 생각한다.

최소 값과 최대 값을 빠르게 찾을 수 있게 도와주는 힙(Heap)

이번 포스팅에서는 대표적인 자료 구조 중 하나인 힙(Heap)에 대한 설명과 구현을 한번 해보려고 한다.

HTTP/3는 왜 UDP를 선택한 것일까?

HTTP/3HTTP(Hypertext Transfer Protocol)의 세 번째 메이저 버전으로, 기존의 HTTP/1, HTTP/2와는 다르게 UDP 기반의 프로토콜인 QUIC을 사용하여 통신하는 프로토콜이다. HTTP/3와 기존 HTTP 들과 가장 큰 차이점이라면 TCP가 아닌 UDP 기반의 통신을 한다는 것이다.

ACK AIMD Aamazon Web Service Agile Algorithm Array Asynchronous Atlassian Audio Average Backpropagation Blocking Burn Out CWND Commit Congestion Control Data Driven Data structure Deep Learning ECN Error Control Essay Essay Tips Event Loop Express FIN Feedback Flow Control Freedom & Responsibility Functional Programming Functional Thinking Git Go bacK N Good Programmer Gravity HTTP HTTP/2 HTTP3 Hash Table Heap Hoisting IP Immutable JavaScript JavaScript Audio API Jira MFS Machine Learning Memory leak Merge Merge and squash Netflix Network NodeJS Non Blocking Notification API OOP Object Oriendted Programming PWA Paypal Progressive Web Application Prototype Pure Functions Rebase Render Optimizing Reno Retrospective SEO SPA SSR SYN Selective Repeat Server Side Rendering Side Effects Single Page Application Sliding Window Slow Start Sort Algorithms Sound Engineering Stop and Wait Study Synchronous TCP TCP Handshake TCP 플래그 TDZ Tahoe Temporal Dead Zone Tutorial TypeScript UDP V8 Versioning Vue Web Web Push Webpack Writing memory-fs traceroute webpack dev middleware webpack dev server 개발서적 개발자 객체지향 프로그래밍 공동집필 공부 궤도 구현하기 글쓰기 나이퀴스트 난수생성알고리즘 네트워크 넷플릭스 논리학 논블록킹 누적평균 데이터 기반 의사결정 동기 딥러닝 렌더 최적화 머신러닝 메르센 트위스터 면접 명령형 프로그래밍 배열 성능 최적화 버전관리 번아웃 부트캠프 불변성 불안감 불안요소 마주보기 블록킹 비동기 비전공 개발자 사운드 엔지니어 사이드 이펙트 서버사이드 렌더링 선언형 프로그래밍 소프트웨어 개발 방법론 소프트웨어 장인 리뷰 소프트웨어 장인정신 수학 순수 함수 슬라이딩 윈도우 알고리즘 애자일 애자일 프로세스 에세이 역전파 알고리즘 오디오 이펙터 오류 제어 이벤트 루프 자료 구조 자료구조 자바스크립트 자유와 책임 정렬 알고리즘 조직문화 좋은 프로그래머 중력 중력 구현하기 철학 커피 한잔 마시며 끝내는 VueJS 컴퓨터 공학 컴퓨터공학 케플러 6요소 케플러 궤도 방정식 코딩테스트 코딩학원 타입스크립트 타입스크립트 인공 신경망 퇴사 튜토리얼 페이팔 평균구하기 프라하 프라하 생활 팁 프로그래밍 프로그래밍서적 프로토타입 프로페셔널 피드백 한 달살기 함수형 사고 함수형 프로그래밍 해시테이블 헤더 협업 호이스팅 혼잡 제어 회고 회고록 흐름 제어
ACK AIMD Aamazon Web Service Agile Algorithm Array Asynchronous Atlassian Audio Average Backpropagation Blocking Burn Out CWND Commit Congestion Control Data Driven Data structure Deep Learning ECN Error Control Essay Essay Tips Event Loop Express FIN Feedback Flow Control Freedom & Responsibility Functional Programming Functional Thinking Git Go bacK N Good Programmer Gravity HTTP HTTP/2 HTTP3 Hash Table Heap Hoisting IP Immutable JavaScript JavaScript Audio API Jira MFS Machine Learning Memory leak Merge Merge and squash Netflix Network NodeJS Non Blocking Notification API OOP Object Oriendted Programming PWA Paypal Progressive Web Application Prototype Pure Functions Rebase Render Optimizing Reno Retrospective SEO SPA SSR SYN Selective Repeat Server Side Rendering Side Effects Single Page Application Sliding Window Slow Start Sort Algorithms Sound Engineering Stop and Wait Study Synchronous TCP TCP Handshake TCP 플래그 TDZ Tahoe Temporal Dead Zone Tutorial TypeScript UDP V8 Versioning Vue Web Web Push Webpack Writing memory-fs traceroute webpack dev middleware webpack dev server 개발서적 개발자 객체지향 프로그래밍 공동집필 공부 궤도 구현하기 글쓰기 나이퀴스트 난수생성알고리즘 네트워크 넷플릭스 논리학 논블록킹 누적평균 데이터 기반 의사결정 동기 딥러닝 렌더 최적화 머신러닝 메르센 트위스터 면접 명령형 프로그래밍 배열 성능 최적화 버전관리 번아웃 부트캠프 불변성 불안감 불안요소 마주보기 블록킹 비동기 비전공 개발자 사운드 엔지니어 사이드 이펙트 서버사이드 렌더링 선언형 프로그래밍 소프트웨어 개발 방법론 소프트웨어 장인 리뷰 소프트웨어 장인정신 수학 순수 함수 슬라이딩 윈도우 알고리즘 애자일 애자일 프로세스 에세이 역전파 알고리즘 오디오 이펙터 오류 제어 이벤트 루프 자료 구조 자료구조 자바스크립트 자유와 책임 정렬 알고리즘 조직문화 좋은 프로그래머 중력 중력 구현하기 철학 커피 한잔 마시며 끝내는 VueJS 컴퓨터 공학 컴퓨터공학 케플러 6요소 케플러 궤도 방정식 코딩테스트 코딩학원 타입스크립트 타입스크립트 인공 신경망 퇴사 튜토리얼 페이팔 평균구하기 프라하 프라하 생활 팁 프로그래밍 프로그래밍서적 프로토타입 프로페셔널 피드백 한 달살기 함수형 사고 함수형 프로그래밍 해시테이블 헤더 협업 호이스팅 혼잡 제어 회고 회고록 흐름 제어
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×