분류 전체보기

· 🚧
그래프란? 트리처럼 노드(데이터)들이 연결되어 있는 자료구조로, 노드간의 관계를 표현할 때 주로 쓰인다. 트리와 달리 노드들에 부모/자식 관계가 없이 전부 이어질 수 있다. 그리고 노드와 노드 사이를 잇는 선을 간선이라고 한다. 이 간선은 방향을 나타낼 수도 있다. 방향이 있는 그래프를 Directed Graph 라고 하고 방향이 없는 그래프를 Undirected Graph 라고 한다. 방향 그래프는 단방향 혹은 양방향으로도 표현된다. 참고로 트리는 위, 아래로 흐르므로 방향 그래프인데 방향을 생략한 것이다. 이어지는 노드들을 따라가다보면 처음 시작한 노드로 돌아오는 그래프도 있다. 이것을 사이클이라고 하는데, 사이클이 하나라도 있는 그래프를 Cyclic Graph, 사이클이 하나도 없는 그래프를 Acy..
· 🚧
TypeError Cannot read property 'setState' of undefined class component 에서 함수를 선언할 때 아래와 같은 형태는 명시적으로 bind 를 해줘야 한다. 해주지 않으면 this 를 사용할 때 찾을 수 없다며 오류가 뜬다. handleClick() { this.setState(value); } 아래처럼 생성자에서 bind 해주거나 constructor(props) { super(props); this.handleClick = this.handleClick.bind(this); } 함수 선언 형태를 arrow function 으로 해주면 자동으로 bind 된다. handleClick = (e) => { this.setState(value); }
· 🚧
render methods should be a pure function of props and state render 내에 setState 등을 호출해서 계속 렌더링 되면 이런 오류가 뜬다. 난 호출한 적 없는데...?! 알고보니 자식 컴포넌트로 setState 하는 function 을 props 로 전달해준 뒤, onClick 에 할당해줬는데.... 이런 형태로 할당해줘서 생긴 문제였다. handleClick = (e) => { this.setState({value:e}); } onClick={handleClick(value)} handleClick(value) 는 함수 실행문이다!!!! 난 함수를 실행하고 있었던 것이다.... 따라서 아래처럼 수정해줘야 한다. handleClick = (e) => ..
· 🚧
해시 테이블이란? 해시 테이블은 key - value 시스템의 자료구조다다. key 는 배열의 index 처럼 value 에 바로 접근할 수 있도록 하는 값이다. index 와 달리 문자열, 파일 등 다양한 데이터가 가능해서 value와 관련 있는 값으로 설정할 수 있다. fruits = { key: "사과", value: "맛있다", key: "복숭아", value: "딱딱한게 맛있다." } //key값으로 데이터 바로 접근 fruits["사과"] -> "맛있다" 어떻게 가능하지? 사실 해시테이블의 내부는 배열과 비슷하게 index 와 value 로 구성되어 있다. key 는 hash function 을 통해 해시 코드로 계산되고, 이 해시코드는 index 로 환산된다. hash function 은 입..
· 🚧
FCM이 뭔지는 일단 나중에... 자세한 것은 👉 Firebase Cloud Messaging Documentation을 따라하면 됩니다. 참고. 단순히 서버 실행 없이 http, js 파일로 실행했더니 아래처럼 뜨더라고요... 아래 오류는 알림 권한 요청을 차단했다는 메시지인데, file:// 도메인으로 시작하면 크롬 알림 설정이 아무리해도 허용이 안됩니다. FirebaseError: Messaging: The notification permission was not granted and blocked instead. (messaging/permission-blocked). 그래서 리액트 클라이언트로 변경해서 테스트해보기로... 동작 원리 React 클라이언트가 메시지 수신을 대기하고 있다가 FCM 에..
· 🚧
2010년에 쓰인 👉 채수원님의 TDD 실천법과 도구 공개 PDF 를 참고하였다. 지금까지는... 내가 지금까지 소프트웨어를 개발할 때 했던 방식은 중간중간 println 이든 congole.log 든, 혹은 logging 라이브러리든 콘솔창에 데이터를 찍어보며 코드를 검증했다. 이런 경우 자신의 머리로 대부분을 의존해야한다. 게다가 만약 기능이 추가되거나 코드의 일부분이 변경된다면? 다시 로그를 찍고 문제되는 부분을 살펴보는 작업을 반복해야 한다. 여기에 코드의 몸집이 거대해진다면? 디버깅해야하는 부분을 찾아내기 더 어려워진다. 정신차려보면 어느새 로그 찍는 코드가 비즈니스 로직만큼 적혀 있다. TDD, 테스트 주도 개발 그래서 나온 것이 테스트가 주도하는 개발, TDD 다. 테스트가 주도한다는 건 함..
· 🚧
Balanced Tree(Balanced Tree) 이진 트리는 자식을 최대 두 개만 가짐으로써 O(log N) 의 탐색 효율을 보인다. 그런데 좌우 서브트리의 균형이 맞지 않을 때는 어느 한 쪽만 탐색하게 되므로 O(N) 이라는 비효율적인 성능을 보여주니 좌우 밸런스를 맞출 필요가 있다. 루트를 기준으로 왼쪽, 오른쪽 서브트리의 노드 개수가 균형적이면 Balanced Tree 라고 한다. Blanced Tree 에는 B-tree, red-black tree, AVL tree 등이 있다. 여기서 '균형이 잡혔다' 라는 뜻은 양쪽 노드의 자식 노드가 2개 이상 차이가 나지 않는, 즉 높이 차이가 2 이상 차이나지 않는 상태를 말한다. (1개 까지는 괜찮다.) 같은 레벨에 꽉 차 있는 경우는 완전 균형이라고..
· 🚧
이진 탐색 트리 이진 탐색 트리(Binary Search Tree) 라는 것도 있다. 이진 탐색이란 미리 큰 순으로 정렬된 자료구조에서 무작위의 데이터를 뽑아 검색 데이터와 비교해, 작다면 왼쪽 영역의 가운데 값, 크다면 오른쪽 영역의 가운데 값과 비교해나가며 검색하는 방식이다. 두 영역으로 나눈다고 해서 이진 검색이라고 하는 것 같다 :). 이진탐색트리는 이진 탐색을 위한 트리다. 루트노드를 포함해서, 부모 노드가 왼쪽에 작은 값의 자식을, 오른쪽에는 큰 값의 자식을 가지는 구조다. 검색할 때 부모 노드를 보고 부모보다 작은 값을 찾고 있다면 왼쪽 서브트리를 탐색하고 큰 값을 찾고 있다면 오른쪽 서브트리를 탐색하면 된다. 각 단계마다 해야되는 작업이 반절로 줄어드니 O(log n) 의 시간복잡도를 가진..
purpplee
'분류 전체보기' 카테고리의 글 목록 (3 Page)