전체 글 41

javascript call by value 와 call by reference 헷갈리는 점 정리

자바스크립트는 call by value와 call by reference에 대한 개념에 있어서 c언어와는 조금 다른 특징을 가지고 있습니다. 이 부분을 중점으로 시각화하여 정리했습니다. call by value와 call by reference에 대한 개념을 숙지하지고 포스팅을 보시면 도움이 됩니다. 결론 javascript는 기본적으로 항상 call by value입니다. 그렇기 때문에 파라미터로 넘어온 값들을 변경해도 원본 데이터는 변하지 않습니다. 하지만 참조형 타입의 데이터인 경우 속성을 변경할 경우 원본 데이터도 같이 변하는 경우가 있습니다. 자바스크립트는 기본적으로 call by value라고 했지만 원본 데이터가 변할 수도 있다고 하는 이유는 무엇일까요? 밑의 예시 들에서 그 이유를 설명합니..

javascript 2020.01.21

c언어 포인터(연산)

지난 포스팅에 이어 포인터끼리의 연산에 대해서 알아본다. 포인터의 연산에서 헷갈리기 쉽고 중요한 3가지이다. 1. 포인터와 포인터를 더하는 것은 불가능하다. - 포인터라는 것이 주소 값을 저장하고 있는 변수이고 이 두 개를 더한다는 것은 제3의 주소 값을 만들어 내는 것을 의미한다. 의미가 없는 행위이기에 c언어 자체적으로 지원하지 않는다. 2. 포인터와 포인터를 빼는 것은 가능하다. - 포인터와 포인터를 빼는 것은 의미가 있다. 왜냐하면 포인터와 포인터를 빼는 행위는 두 주소 사이에 몇 개의 메모리 공간이 있는지 알아낼 수 있기 때문이다. 밑의 예제를 통해서 확인해 볼 수 있다. 3. 포인터와 정수 간의 연산은 가능하다. - 포인터는 10진수와의 연산이 가능하며 연산할 때마다 포인터 타입 크기만큼 이 ..

알고리즘 2020.01.09

c언어 포인터 (C pointer)

개인적으로 js에 관심이 많이 있기에 알고리즘 풀이 언어를 node.js로 가져가고 있었다. 하지만 파이썬, 자바, c++로만 풀 수 있는 문제들도 프로그래머스에서 출제가 되곤 하는 것을 깨달았다. 그래서 틈틈이 c언어 공부를 시작하기로 했다. c++ 이 c언어를 기반으로 하고 있기에 들어가기 앞서 c언어에서 기본적으로 꼭 알아야 하는 핵심 개념들을 틈나는 대로 정리하고자 한다. c언어에서 포인터란 메모리의 주소값을 저장하는 변수이다. 다른 언어들에서는 직접 주소에 접근하는게 쉽지 않았는데 c언어는 메모리의 주소 값에 접근하기 매우 편리하다. 다음 2가지 연산자가 메모리의 주소 값 접근과 수정을 편리하게 해 준다. * 연산자 ex) int *p = 10 1) 포인터 변수의 선언에 사용 (위의 경우 포인터..

알고리즘 2020.01.07

프로그래머스 탑 자바스크립트로 풀기

문제 설명 수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 탑이 왼쪽으로 동시에 레이저 신호를 발사합니다. 그러면, 탑은 다음과 같이 신호를 주고받습니다. 높이가 4인 다섯 번째 탑에서 발사한 신호는 높이가 7인 네 번째 탑이 수신하고, 높이가 7인 네 번째 탑의 신호는 높이가 9인 두 번째 탑이, 높이가 5인 세 번째 탑의 신호도 높이가 9인 두 번째 탑이 수신합니다. 높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 레이저 신호는 어떤 탑에서도 수신할 수 없습니다. 송신 탑..

알고리즘 2019.12.24

[git] 원격 저장소와 local저장소의 소스코드를 일치시키는 방법

원격 저장소(깃헙)의 소스코드와 로컬 저장소의 소스코드를 일치키는 방법입니다. 명령어만 빠르게 확인하고 싶으시면 아래 명령어를 확인하시면 됩니다. git fetch --prune origin git reset --hard origin/main 먼저 깃을 처음 다루는 사람들이 하는 가장 큰 착각 중 하나가 단순히 pull을 받으면 원격 저장소와 내 컴퓨터의 소스코드가 일치된다고 생각하는 것입니다. 하지만 pull을 받는다고 하여 원격저장소의 브랜치와 로컬브랜치의 소스코드가 같아지지는 않습니다. 왜냐하면 pull은 fetch + merge이며, 기존 로컬에 있는 코드와 원격에서 받은 코드가 merge 되며 합쳐지기 때문입니다. 때문에 fetch를 통하여 remote tracking branch (origin..

기타 2019.12.19

redux-thunk 알아보기

리덕스의 비동기 처리 라이브러리 중 하나인 redux-thunk에 대해서 알아보겠습니다. 비동기 라이브러리는 주로 action이 dispatch 되어 reducer에서 state수정이 일어나기 전 무언가 다른 처리를 해주기 위해 사용합니다. 대표적으로 ajax요청이 있습니다. redux-thunk는 이를 위한 방법으로 액션 생성자가 함수를 리턴하였을 경우 함수 내에 dispatch를 인자로 전달해주는 방법을 사용합니다. 액션 생성자가 리턴한 함수 내에 비동기 요청이나 로직을 저장해 두고 이를 원하는 조건이나 시기에 비동기적으로 활용할 수 있게 되는 것입니다. 기존에는 액션 생성자가 액션 객체를 리턴하면 바로 dispatch 되어 리듀서에서 스테이트 수정이 일어났습니다. 하지만, 액션 생성자가 함수를 리턴..

react 2019.11.24

DOM과 가상DOM 쉽게 이해해 보기

리액트와 상태관리 툴(리덕스 등)을 사용하다 보면 불변성에 대해 항상 신경을 써야 한다. 그리고 왜 불변성을 신경 써야 하는지 이해하려면 가상 DOM에 대한 이해가 필요하다고 판단하였다. 헷갈리게 알고 있던 DOM과 가상 DOM을 정리해보고자 한다. 아직 브라우저 렌더링 과정에 대한 이해는 부족하기에 내용은 계속해서 수정될 수 있다. DOM이란 Document Object Model로서 말 그대로 다큐먼트(웹페이지)를 객체로 표현하는 모델을 의미한다. 브라우저마다 DOM을 구현하는 방식은 다르기에 DOM이라는 것이 구체적으로 정해저 있는 언어나 모델과 같은 것은 아니다. 다만 웹페이지를 객체로 표현한 모델을 의미할 뿐이다. 그렇다면 브라우저는 어떻게 DOM을 이용하여 화면을 렌더링 할까? 첫째, 브라우저..

react 2019.11.12

npm package 버전관리

npm으로 모듈들을 설치하고 한참 시간이 지나면, 오래전에 설치한 모듈의 경우 최신 문법이나 메서드가 반영이 안 되는 경우가 있다. 나의 경우 리덕스에서 얼마전부터 공식 지원하고 있는 훅스가 react-redux 모듈의 버전이 낮아서 사용할 수 없었다. 이를 해결하기 위해 모듈들을 어떻게 한번에 업데이트해야 하는지 알아보았다. 검색 결과 npm-check-updates와 npm-check 두 가지의 라이브러리를 발견할 수 있었다. 두 개 모두 업데이트를 해주는 것은 동일하지만 과정에 있어서 약간의 차이가 있었다. 밑에는 스택오버플로우에서 긁어온 답변이다. npm-check-updates will only modify your package.json file. Once you've run that comm..

기타 2019.11.07

[DFS] 프로그래머스 네트워크 Javascript 풀이

문제 설명 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 제한사항 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다. 각 컴퓨터는 0부터 n-1인 정수로 표현합니다. i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[..

알고리즘 2019.11.04

코드그라운드 개구리 뛰기

1년전 쯤 풀었던 코드그라운드 개구리 뛰기 문제입니다. 지금도 코드그라운드 사이트가 있는지 모르겠습니다만 알고리즘을 공유하는 차원에서 포스팅합니다. 코드그라운드 사이트 특징 1. 내가 제출한 문제의 득점을 확인할 수 있다. 예를 들어 아래 코드의 경우에는 100점으로 통과하였지만 통과 전까지 20, 40 점의 득점을 거쳐서 완성된 코스이다. 어디에서 잘못되었는지는 알려주지 않지만 다시 코드를 검토해보면서 완벽을 만들어가는 재미가 있다. 2. 다른 사람들이 제출한 코드를 확인할 수 있다. - 실력향상을 위해서라면 미리 보지 않는 것을 추천한다. 3. 정답을 맞히면 포인 트까 쌓여서 랭킹을 확인할 수 있다. - 학교별 랭킹 순위가 제공된다. *** 아래는 내가 최근에 풀었던 코드 그라운드 spsc예선 문제 ..

알고리즘 2019.10.24