본문 바로가기

전체 글

(39)
데이터베이스 식별, 비식별 관계 식별 관계와 비식별 관계란 무엇을 의미하는가? 예를 들어, 축구팀 엔티티와 축구선수 엔티티가 있다. 축구팀은 여러 명의 축구선수를 소유할 수 있으며, 축구선수는 하나의 축구팀에게 소속된다. 하지만 축구선수는 축구팀이 없어도 존재할 수 있다. 소속이 없는 선수의 경우에 말이다. 그러므로 이때 축구선수와 축구화의 관계는 비식별 관계라고 할 수 있다. 이제 축구선수 엔티티와 선수 기록 엔티티를 예를 들어보자. 선수 기록은 축구선수 없이 존재할 수가 없다. 그러므로 축구선수와 선수 기록 간의 관계는 식별 관계이다. 데이터베이스 관점에서 다시 말해보면 식별 관계에서 부모 엔티티의 기본키는 자식 엔티티에 꼭 포함되어 있으며 항상 기본키로 사용된다. 반면에 비식별 관계에서는 부모 엔티티의 기본키가 자식 엔티티에 포함..
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라고 했지만 원본 데이터가 변할 수도 있다고 하는 이유는 무엇일까요? 밑의 예시 들에서 그 이유를 설명합니..
c언어 포인터(연산) 지난 포스팅에 이어 포인터끼리의 연산에 대해서 알아본다. 포인터의 연산에서 헷갈리기 쉽고 중요한 3가지이다. 1. 포인터와 포인터를 더하는 것은 불가능하다. - 포인터라는 것이 주소 값을 저장하고 있는 변수이고 이 두 개를 더한다는 것은 제3의 주소 값을 만들어 내는 것을 의미한다. 의미가 없는 행위이기에 c언어 자체적으로 지원하지 않는다. 2. 포인터와 포인터를 빼는 것은 가능하다. - 포인터와 포인터를 빼는 것은 의미가 있다. 왜냐하면 포인터와 포인터를 빼는 행위는 두 주소 사이에 몇 개의 메모리 공간이 있는지 알아낼 수 있기 때문이다. 밑의 예제를 통해서 확인해 볼 수 있다. 3. 포인터와 정수 간의 연산은 가능하다. - 포인터는 10진수와의 연산이 가능하며 연산할 때마다 포인터 타입 크기만큼 이 ..
c언어 포인터 (C pointer) 개인적으로 js에 관심이 많이 있기에 알고리즘 풀이 언어를 node.js로 가져가고 있었다. 하지만 파이썬, 자바, c++로만 풀 수 있는 문제들도 프로그래머스에서 출제가 되곤 하는 것을 깨달았다. 그래서 틈틈이 c언어 공부를 시작하기로 했다. c++ 이 c언어를 기반으로 하고 있기에 들어가기 앞서 c언어에서 기본적으로 꼭 알아야 하는 핵심 개념들을 틈나는 대로 정리하고자 한다. c언어에서 포인터란 메모리의 주소값을 저장하는 변수이다. 다른 언어들에서는 직접 주소에 접근하는게 쉽지 않았는데 c언어는 메모리의 주소 값에 접근하기 매우 편리하다. 다음 2가지 연산자가 메모리의 주소 값 접근과 수정을 편리하게 해 준다. * 연산자 ex) int *p = 10 1) 포인터 변수의 선언에 사용 (위의 경우 포인터..
프로그래머스 탑 자바스크립트로 풀기 문제 설명 수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 탑이 왼쪽으로 동시에 레이저 신호를 발사합니다. 그러면, 탑은 다음과 같이 신호를 주고받습니다. 높이가 4인 다섯 번째 탑에서 발사한 신호는 높이가 7인 네 번째 탑이 수신하고, 높이가 7인 네 번째 탑의 신호는 높이가 9인 두 번째 탑이, 높이가 5인 세 번째 탑의 신호도 높이가 9인 두 번째 탑이 수신합니다. 높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 레이저 신호는 어떤 탑에서도 수신할 수 없습니다. 송신 탑..
[git] 원격 저장소와 local저장소의 소스코드를 일치시키는 방법 원격 저장소(깃헙)의 소스코드와 로컬 저장소의 소스코드를 일치키는 방법입니다. 명령어만 빠르게 확인하고 싶으시면 아래 명령어를 확인하시면 됩니다. git fetch --prune origin git reset --hard origin/main 먼저 깃을 처음 다루는 사람들이 하는 가장 큰 착각 중 하나가 단순히 pull을 받으면 원격 저장소와 내 컴퓨터의 소스코드가 일치된다고 생각하는 것입니다. 하지만 pull을 받는다고 하여 원격저장소의 브랜치와 로컬브랜치의 소스코드가 같아지지는 않습니다. 왜냐하면 pull은 fetch + merge이며, 기존 로컬에 있는 코드와 원격에서 받은 코드가 merge 되며 합쳐지기 때문입니다. 때문에 fetch를 통하여 remote tracking branch (origin..
redux-thunk 알아보기 리덕스의 비동기 처리 라이브러리 중 하나인 redux-thunk에 대해서 알아보겠습니다. 비동기 라이브러리는 주로 action이 dispatch 되어 reducer에서 state수정이 일어나기 전 무언가 다른 처리를 해주기 위해 사용합니다. 대표적으로 ajax요청이 있습니다. redux-thunk는 이를 위한 방법으로 액션 생성자가 함수를 리턴하였을 경우 함수 내에 dispatch를 인자로 전달해주는 방법을 사용합니다. 액션 생성자가 리턴한 함수 내에 비동기 요청이나 로직을 저장해 두고 이를 원하는 조건이나 시기에 비동기적으로 활용할 수 있게 되는 것입니다. 기존에는 액션 생성자가 액션 객체를 리턴하면 바로 dispatch 되어 리듀서에서 스테이트 수정이 일어났습니다. 하지만, 액션 생성자가 함수를 리턴..
DOM과 가상DOM 쉽게 이해해 보기 리액트와 상태관리 툴(리덕스 등)을 사용하다 보면 불변성에 대해 항상 신경을 써야 한다. 그리고 왜 불변성을 신경 써야 하는지 이해하려면 가상 DOM에 대한 이해가 필요하다고 판단하였다. 헷갈리게 알고 있던 DOM과 가상 DOM을 정리해보고자 한다. 아직 브라우저 렌더링 과정에 대한 이해는 부족하기에 내용은 계속해서 수정될 수 있다. DOM이란 Document Object Model로서 말 그대로 다큐먼트(웹페이지)를 객체로 표현하는 모델을 의미한다. 브라우저마다 DOM을 구현하는 방식은 다르기에 DOM이라는 것이 구체적으로 정해저 있는 언어나 모델과 같은 것은 아니다. 다만 웹페이지를 객체로 표현한 모델을 의미할 뿐이다. 그렇다면 브라우저는 어떻게 DOM을 이용하여 화면을 렌더링 할까? 첫째, 브라우저..