지금까지 백준만 풀다가 올해 남은 기간동안에는 구글 킥스타트 문제들을 좀 풀어보기로 했다. 구글 킥스타트는 구글에서 매년 개최하는 알고리즘 대회이다. 전 세계의 수만명이 참가하여 코딩 실력을 겨룬다. 1년에 여러 차례 대회가 열리는데(2020년 기준 한 달에 한 번꼴) 매번 대회가 끝나면 등수가 공개되어서, 객관적인 나의 수준도 판단할 수 있다. 매년 조금씩 바뀌지만 올해는 각 라운드당 3시간동안 네 문제를 푸는 형식으로 진행이 되고 있다. 나는 올해 중반부터 시작했고, 처음이다보니 아직 문제를 막 잘 풀지는 못했다. 그래서 2020년에 출제된 기출문제를 하나씩 풀어보면서 연습하고 그 내용을 블로그에 정리해 보려고 한다. 총 4문제 중에 4번 문제는 못 풀었고, 1~3번 문제만 풀어서 이에 대한 간단한 ..
이번 포스팅에서는 리액트의 Context API의 개념과 Use Cases에 대해서 정리해 본다. Context API는 리액트 프로젝트에서 전역적으로 사용할 데이터가 있을 때 유용한 기능이다. 예를 들면 프로젝트 내의 환경 설정, 사용자 정보와 같은 것들이 있을 수가 있다. 과거에는 이러한 데이터를 최상위 컴포넌트의 state에 담아서 props로 전달했었다. 하지만 이렇게 하는 경우 컴포넌트의 깊이가 깊어질 수록 거쳐야 하는 컴포넌트가 많아서 번거로움이 있었다. 이를 해결하기 위해서 Redux나 MobX와 같은 별도의 라이브러리를 사용하기도 하지만, 별도의 라이브러리가 없어도 Context API를 통해 전역 상태를 관리할 수가 있다. 지금부터 리액트 공식 문서에서 제공하는 Context API를 하..
링크드인 러닝 네트워크 기초 강의를 듣고 공부한 내용을 정리해 보려고 한다. 토폴로지 (Topology) 토폴로지는 노드들과 연결된 회선들을 포함한 네트워크의 구성을 나타내는 개념이다. 크게 물리적 토폴로지와 논리적 토폴로지로 구분한다. 물리적 토폴로지(Physical Topology) : 노드, 링크와 같은 네트워크 구성 요소들에 의해 결정된다. 논리적 토폴로지(Logical Topology) : 노드 사이의 데이터 흐름에 의해 결정된다. 토폴로지는 그래프 이론에 따라 다음과 같은 종류들로 나누어 질 수 있다. 메시 토폴로지 (Mesh Topology) 메시 토폴로지는 망이나 그물 형태의 토폴로지를 의미한다. 완전 연결형(Full Mesh)과 부분 연결형(Partial Mesh)으로 나뉜다. 완전 연결..
개인적인 목적으로 RxJS를 공부하기 시작했다. 공부한 내용들을 여기에서 정리하고 공유하고자 한다. 동기 연산 vs 비동기 연산 동기 코드와 비동기 코드의 차이는 지연시간(latency)이 있는지 없는지의 차이가 가장 큰 차이점이 아닐까 싶다. 일반적으로 비동기적인 코드보다 동기적인 코드가 이해하기가 더 수월하다. 하지만 우리가 개발하는 어플리케이션에서는 메시지를 보내고 응답이 올 때 까지 시간이 걸리고 이 시간들이 쌓이는 동안 아무것도 하지 않으면 어플리케이션이 정상적으로 돌아가지 못하는 수준까지 가는 경우도 있다. 기존의 이러한 방식에서 벗어나 복잡성이 증가한 어플리케이션에서 유휴 상태가 없이 사용자의 시간을 아낄 수 있게 하기 위해서는 비동기적인 처리가 불가피하다. 동기 코드를 구현하는 가장 쉽고 ..
Frenchpod 101 레벨 1 레슨 15~18까지의 공부한 내용을 정리해 보았다. 어휘 un immeuble : building Cet immeuble est ancien. : This building is old. un bandit : a gangster Jesse James est un bandit. : Jesse James is a gangster. loin : far Je ne peux pas le voir, c'est trop loin. : I can't see it, it's too far away. un abonnement : a subscription, a pass J'ai un abonnement au New York Times. : I have a subscription to the..
지난 포스팅에 이어서 C++의 개체 지향 프로그래밍 내용을 정리해 보고자 한다. 복사 생성자 복사 생성자는 나와 같은 클래스에 있는 개체를 매개변수로 받는 생성자이다. 아래처럼 선언하고 구현할 수 있다. // Vector.h class Vector { public: Vector(const Vector& other); private: int mX; int mY; }; // Vector.cpp Vector::Vector(const Vector& other) : mX(other.mX) , my(other.mY) { } 같은 클래스에 속한 다른 개체를 이용하여 새로운 개체를 초기화한다. 코드에 기본 생성자가 없을 경우 컴파일러가 자동으로 기본 생성자를 만들어 주는 특성이 있다고 했었는데, 복사 생성자도 마찬가지..
안녕하세요 데브오웬입니다. 오늘은 오랜만에 제품 리뷰를 하려고 해요. 바로 제가 약 10개월째 쓰고 있는 키보드인 키크론 K1 리뷰입니다. 당시 키보드를 선택할 때 제가 생각한 구매 조건은 다음과 같이 두 가지 정도였던 것 같습니다. 너무 비싸지도 싸지도 않은 가격 맥북에서도 무리없이 잘 쓸 수 있는 키보드 아무래도 너무 저렴한 키보드는 또 오래 쓰기 어려울 것 같고, 또 합리적인 가격 중 맥북을 지원하는 키보드가 생각보다 그리 많지 않아서 선택지가 많이 좁혀졌던 것 같아요. 그리고 오른쪽에 숫자 패드 있는 키보드가 왠지 더 편할 것 같다는 막연한 생각에 키크론 K1 104키 RGB를 질렀습니다! 키크론 K1은 풀 알루미늄 하우징으로 되어 있어서 상당히 고급스러웠습니다. 색상도 블랙이라 정말 편하게 막 ..
오늘은 우아한 테크러닝 3주차(5회차, 6회차)에서 공부했던 내용들에 대해서 정리해 보려고 한다. 다섯 번째 세션 9월 15일 화요일 5번째 수업에서는 다음과 같은 내용을 다루었다. 리덕스 (Redux) 커링 (Currying) 몽키패치 (Monkey Patch) 미들웨어 (Middleware) 다음과 같이 리듀서와 스토어를 생성한 후, 스토어의 변경이 일어날 때마다 확인할 수 있는 subscribe 메서드를 사용한다. 그리고 store의 dispatch 메서드를 이용하여 action을 실행할 수 있다. import { createStore } from "./redux"; function reducer(state = { counter: 0 }, action) { switch (action.type) { ..