제목 : C, 그리고 fgets 라인 입력만으로 입력 토큰화 메서드 제작하기이 글을 작성하는 이유물론, C 에서의 특정 기본 라이브러리나,C++ 의 특정 기본 라이브러리를 가져와서 하나의 문자열을 토큰화 할 수 있다.그러나, 나는 내가 가진 기존의 개발자 역량에서, 엔지니어 역량으로 이끌기 위해 여러 제약을 걸었다.(알고리즘 문제에 제한해서.)stdio.h 라이브러리만 사용한다.동적 메모리 할당 메서드만 extern 키워드로 가져온다.입출력은 모두 fgets fgetc fputs 와 같이, '\0' 을 참조하는 메서드로 해결한다.필요한 모든 유틸리티 메서드와 구조체를 "직접" 작성하여 해결한다.작성한 코드는 헤더 파일로 만들어 재사용하지 않으며, 하나의 문제마다 모두 재작성하여 사용한다.이러한 제약을 ..
제목 : C 프로그램에서 정수, 문자열 상호변환 메서드 만들기이 글을 작성하는 이유C 에서도 문자열을 수로 바꾸는 메서드가 존재한다.이러한 내장 메서드는 어셈블리 급으로 최적화를 해 놓았고,또한 검증되었기 때문에 사용하는 것이 더 정확하고 편하다.그러나, 나는 C 언어로 알고리즘을 푸는 데 있어, 제약을 걸었다.stdio.h 내장 라이브러리를 제외한 모든 유틸리티 메서드를 "직접" 제작하는 것.물론, malloc, free, realloc, calloc 과 같은동적 메모리 할당과 해제에 필요한 메서드는 extern 으로 가져와서 사용한다.나는 이러한 제약을 스스로 걸어서, 각 라이브러리가 "어떻게" 동작하는지 이해하기 위해이러한 제약을 지키고 있다.(물론 어떤 문제들은 까마득하기도 하다.)알고리즘 문제를..
제목 : C 알고리즘 문제 scanf, printf 없이 입출력 수행하기부제 : fgets, fputs 사용법이 글을 작성하는 이유처음 프로그래밍을 배울 때, 우리는 C 나 Java 로 시작한다.나 또한 C, Java 를 처음 대학교에서 접했을 때 scanf 에 해당하는 기능으로입력과 출력을 수행했다. (문자열을 통해 입력을 원하는 데이터로 변환)그러나, 내가 알고리즘을 풀 뿐만 아니라, 파일을 읽는 과정에서scanf 는 도리어 보안적으로 위험할 수도 있다는 것을 알게 되었으며,또한 동적 입력에 대해 생각보다 잘 대처하지 못한다는 것이다.그래서 왜 scanf, printf 를 사용하지 않느냐면,내가 이전에 알고리즘을 풀 때 BufferedReader 객체를 이용해서,StringTokenizer 객체에 넣..
제목 : stdio.h 만 가지고 백준 문제 풀어본 결과코드 결과를 빠르게 보고 싶다면, 밑의 텍스트를 클릭하세요코드로 바로 이동하기다양한 라이브러리가 존재하는데, 굳이 힘들게 푸는 이유는?이러한 힘든 도전을 하는 이유는, "C 와 최소한의 Lib 로 알고리즘 풀어보기 도전" 썼던 글 에 상세히 적어놓았다.요약하자면, Node.js 엔진 기반의 JS 의 성능적 한계점을 느끼고, 최적화를 수행하고 구현하면서,최적화 과정이 저 수준의 언어로 제작하는 것 보다 훨씬 더 어렵다는 것을 느꼈다.이럴 거면 애초에 최적화 타겟 언어로 프로그램을 제작하는 것이 더 낫다는 판단을 했다.그리고, 특히 특정 도메인의 프로그램을 제작하기 위해 다양한 라이브러리의 역할도 알지 못한 채,쉽게 가져와서 사용하기만 해버리는 단순한 ..
제목 : Yarn 과 pnpm 패키지 매니저는 무엇인가?이 글을 작성하는 이유방대한 JavaScript 기반의 패키지 레지스터를 보유하고 있는 장소가 바로 NPM 이다.JavaScript 는 언어 자체로 IO(Input Output) 빌트인 메서드가 간단하며,또한 표현식이 간단하여 프로그래머들의 진입 언어로 매우 유용하게 사용되고 있다.그런 만큼, 그 커뮤니티의 크기는 감히 말할 수 없을 정도로 커졌으며,언어 자체가 가지고 있던 성능의 한계를 다양한 내장 메서드 최적화,재사용 코드 캐싱 등의 기능으로 돌파하고 있다. (그래도 저레벨 언어에 비해서는 한계가 있지만.)npm 은 JavaScript 기반의 템플릿 프로젝트를 만들기 위해서 필수적인 요소이다.주로 프로젝트 루트에 package.json 을 생성하..
제목 : 점진적인 리액트 프로젝트 도입 과정과 문제 해결 과정이 글을 작성하는 이유는?빠른 프로젝트 생성과 웹 페이지 생성에 초점이 맞춰진 현대 프로그래밍 트렌드는 AI 로 인해더욱 중요해진 요소로 꼽히고 있다.현재 프로그래밍 세상에서, 오히려 해당 분야에 대한 깊은 공부는 공감받지 못하는 사회라는 것을 느낀다.오히려, 빠른 개발을 요하는 실제 프로덕션 세상에서, 깊은 이해를 위한 시간 소비는 사치라고 생각할 지 모른다.아니, 그것이 당연할 지도 모른다.그러나, 나는 역발상으로, 리액트라는 단어가 가지는 수많은 의미를 탐색해 왔다.리액트는 무엇인지, 어떤 것으로 이루어져 있는지, 어떤 방법론을 사용하는지 등등..심지어는 JavaScript 의 es6 이상 버전이 어떻게 es5 로 폴리필 되는지 확인할 정..
제목 : React 런타임 코드 해부 노트 : Fiber와 Scheduler를 따라간 21일부제 : setState 를 이해하기 위한 3500줄 추적기이 글을 작성하는 이유 :리액트의 상태 관리는 매우 복잡하게 연계되어 있다.옛날에 리액트를 배울 때, 함수 컴포넌트, 클래스 컴포넌트의 상태 변경 방법을 공부했다.아마 리액트를 써 보기만 해도 알 텐데, useState 와, setState 이다.useState 를 이용하여, 컴포넌트에서 사용한 내부 상태를 생성한다.setState 란, 클래스형 컴포넌트를 사용 할 시, 상태를 변경하기 위한 함수이다.useState Hook 의 상태 설정 메서드는setNum, setNumber, setString, setData 등등 원하는 대로 지정할 수 있다.브라우저에..
제목 : HTML 파일에서 React 사용하는 법이 글을 작성하는 이유npm, node 패키지로 npx 명령어를 실행하여 손쉽게 React 시작 템플릿을 가져올 수 있다.즉, 일종의 프로젝트 초기화 명령어인데, 리액트로 프로젝트를 시작한다면, 이를 통해 손쉽게 구축이 가능하다.그러나, React 는 컴퓨터 프로그램의 역사를 따져봤을 때, 긴 역사를 가지고 있지는 않다.즉, 아직 tomcat 서버를 이용하거나, httpd 와 같은 오래된 웹 서버로(물론, tomcat 은 웹과 WAS 의 역할을 동시에 수행한다.)바닐라 JavaScript 와 HTML, CSS 파일로 스타일링을 진행하며,동적 DOM 구축을 위해 JQuery 를 사용하고 있다.이미 내부적으로 데이터셋을 명시하고, 이를 어떻게 보여 줄 지복잡한..
제목 : React, 기반 뿌리부터 살펴보자 - (부제 : 다양한 방법론의 조합)이 글을 작성하는 이유드디어, JavaScript 의 Syntax Sugar 의 형태,JS 의 private 의 또 다른 의미, (실질적으로는 보안을 위해 # 으로 21 년 도입됨)Webpack 의 동작 원리, package.json, package-lock.json, tsconfig.json이 파일의 존재 이유에 대해서 파헤쳤다.또한, HTML5 정식 스펙상에 존재하는 "모든 카테고리의 태그" 를 다루었다. (실제 예제 및 렌더링 예시까지)특히, JS 로 제작된 대부분의 최신 프레임워크는 아직 정식 스펙에 도입되지 않은 문법을 채택하여이를 tsconfig.json 의 옵션에서 적용하고 있다는 것이 놀라웠다.async 와 P..
제목 : stdio.h 만 가지고 백준 문제 풀어본 결과코드 결과를 빠르게 보고 싶다면, 밑의 텍스트를 클릭하세요코드로 바로 이동하기다양한 라이브러리가 존재하는데, 굳이 힘들게 푸는 이유는?이러한 힘든 도전을 하는 이유는, "C 와 최소한의 Lib 로 알고리즘 풀어보기 도전" 썼던 글 에 상세히 적어놓았다.요약하자면, Node.js 엔진 기반의 JS 의 성능적 한계점을 느끼고, 최적화를 수행하고 구현하면서,최적화 과정이 저 수준의 언어로 제작하는 것 보다 훨씬 더 어렵다는 것을 느꼈다.이럴 거면 애초에 최적화 타겟 언어로 프로그램을 제작하는 것이 더 낫다는 판단을 했다.그리고, 특히 특정 도메인의 프로그램을 제작하기 위해 다양한 라이브러리의 역할도 알지 못한 채,쉽게 가져와서 사용하기만 해버리는 단순한 ..