리액트에서는 컴포넌트가 언마운트된 상태에서 setState() 가 호출되면 워닝을 표시한다. 언마운트된 컴포넌트에 setState()를 호출하는 것은 클린 업이 제대로 안돼서 컴포넌트가 언마운트된 다음에도 앱이 그 컴포넌트에 대한 참조를 가지고 있다는 뜻이고, 이는 메모리 누수를 일으킬 가능성이 있기 때문이다. 그래서 예전에는 지금은 deprecated된 isMounted() 로 마운트됐는지 조건을 체크한 다음 setState()를 호출하게 했는데, 이게 바람직하지 않은 이유는 워닝을 받아야 할 때에도 워닝을 받지 못할 경우가 생기기 때문이다. 그래서 _isMounted라는 프로퍼티를 만들어서 componentDidMount 에서 _isMounted를 true로 설정하고 componentWillUnmou..
프로토타입이란 자신의 상위 객체(또는 부모 객체) 역할을 하는 객체로서, 하위(자식) 객체에 프로퍼티와 메서드를 상속한다. 즉 객체는 프로토타입으로부터 메서드를 포함한 프로퍼티들을 상속받는다. 이 상속을 통해 불필요한 중복을 제거할 수 있는데, 예시를 들어보자. // 컨스트럭터(생성자 함수) function Circle(radius) { this.radius = radius this.getArea = function() { return Math.PI * this.radius ** 2; } } // 생성자 함수로 인스턴스 생성 var circle1 = new Circle(1); var circle2 = new Circle(2); circle1.getArea === circle2.getArea; // fal..
스코프 스코프(유효 범위)란 해당 변수가 정의되어 있는 영역, 즉 정의된 변수를 사용할 수 있는 소스코드의 집합. 자바스크립트는 블록 스코프(block scope)가 아닌 함수 스코프를 사용하므로, 함수 내에 정의된 변수는 해당 함수 내에서만 사용할 수 있고 유효하다. 함수 스코프라는 것은 함수 내에서 정의된 변수는 그 함수의 전체에 걸쳐서 유효하다는 뜻이다. (스코프는 유효 범위라는 뜻이니까 함수 스코프 -> 선언된 함수 내라면 어디에서도 유효하다) 이는 변수가 미처 선언되기도 전에 유효하다는 뜻이고, 이런 현상을 호이스팅(hoisting)이라고 일컫는다. var scope = "global"; function f() { console.log(scope); // undefined var scope = ..
네이버 부스트코스에서 CS50 강의를 같이 스터디할 수 있다길래 냉큼 신청해보았다. 사실 그 전에도 edWith에서 CS50 강의를 신청해서 들으려고 시도했었는데 강의하시는 교수님이 엄청 말이 빠르시고 영어인데 자막이 없어서, 사실 좀 듣기 어려웠다. 그래서 중간에 흐지부지 되었었는데, 마침 부스트코스에서 CS50 강의에 한글 자막도 제공하고 다른 사람들이랑 같이 진도를 나갈 수 있다고 신청했다. 스터디 과정 일단 이 스터디를 신청할 때 무료 스터디라 그런지 나름 적어야 하는 양식이 있었다. 지원 동기 관련한 질문이나 퀴즈 같은 것도 있었다. 폼을 작성한 사람이 모두 선발된 것인지 아니면 너무 성의없는 사람은 걸러졌는지는 모르겠으나, 일단 선정이 되면 '부스터'라는 이름으로 스터디에 참여하..
현상 패키지 매니저는 yarn 사용 중, apollo 버전 ^2.30.1, graphql 버전 ^15.3.0 apollo client로 codegen 하는 스크립트를 실행하였더니, graphql 인스턴스가 중복됐다는 에러가 나온다. Error: Cannot use GraphQLSchema "[object GraphQLSchema]" from another module or realm. Ensure that there is only one instance of "graphql" in the node_modules directory. If different versions of "graphql" are the dependencies of other relied on modules, use "resolutio..
프로젝트를 할 때 라이브러리를 포함한 외부 패키지를 갖다 쓰는 것은 흔한 일이다. 이미 만들어져있는 코드를 가져다가 사용만 하는 것이기 때문에, 프로젝트가 이 외부 패키지들에게 '의존하고 있다'고 표현해도 될 것이다. 프로젝트가 의존하고 있는 패키지들의 목록이 열거된 파일이 package.json이며, 이 파일의 dependencies 라는 객체에 패키지명과 미니멈 버전들이 나열돼 있다. Semantic Versioning 예시를 들어보자. "dependencies": { "graphql": "^15.3.0" } package.json 파일에 위처럼 써있다면 이 프로젝트는 graphql 패키지에 의존하고 있음을 나타내는 것이다. 그리고 graphql 패키지의 버전은 ^15.3.0 이라고 쓰여있는데, 이 ..
먼저 노드를 구현한다. C에서 구조체(struct)로 node를 정의할 수 있다. 배열처럼 인접한 셀들의 메모리 chunk가 아니라, 떨어진 메모리를 연결하는 것이기 때문에 자신의 값과 다음 노드의 주소를 가리키는 값(포인터)을 가지고 있어야 한다. 이 구조체를 node라고 한다면 다음 노드의 주소를 가리키는 next라는 포인터 변수는 node 타입을 값으로 갖고 있으므로 node *로 선언한다. 그러면 아래처럼 node라는 struct를 구성할 수 있을 것 같다. 하지만 여기서 하나 문제는, 맨 마지막 줄을 읽을 때까지 C는 여기에 node라는 struct가 있음을 알지 못하는데, 이미 그 전에 node *next 를 선언한다는 것이다. typedef struct { int number; node *n..
풀이 def accumulator(index, target_DNA, DNA_mapper): for DNA in DNA_mapper: if target_DNA == DNA: DNA_mapper[target_DNA][index + 1] = DNA_mapper[target_DNA][index] + 1 else: DNA_mapper[DNA][index + 1] = DNA_mapper[DNA][index] def get_minumum_impact_factor(start_index, end_index, DNA_mapper): for DNA in DNA_mapper: if DNA_mapper[DNA][end_index + 1] - DNA_mapper[DNA][start_index] > 0: return DNA els..
- Total
- Today
- Yesterday
- getter
- 제네릭스
- Prefix Sums
- Data Structure
- Redux
- youtube data api
- 알고리즘
- c언어
- 포인터 변수
- Session
- 깃
- 자바
- rxjs
- Java
- package.json
- CSS
- til
- JavaScript
- react
- this
- oracle
- SQL
- 인스턴스
- linkedlist
- 개발 공부
- 리덕스
- useEffect
- Conflict
- jQuery
- GIT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |