본문 바로가기

개발공부

(33)
yarn 속성으로 익히기 1. 설치 npm install --global yarn yarn은 npm으로 설치가 가능하다. 설치가 되었으면 최신버전으로 업데이트 해주자. yarn self-update 2. 작동매커니즘 기존에 의존성에 있는 프로젝트에는 package.json파일이 있을 것이다. 이를 fetch(설치)하려면 다음과 같이 입력한다. yarn 아무런 설정값없이 이렇게 입력하면 package.json파일에 종속성 목록들을 설치 할 수 있다. 그러면 npm에서 설치한것과 같이 node_modules라는 폴더가 생성되면서 의존성설치를 끝내고 yarn.lock이라는 이름으로 lockfile를 생성하는데 이는 npm과는 다르게 버전 관리와 사용자로 하여금 패키지를 정적, 수동적으로 관리하게 하려는 의도로 만들어진 yarn이 직접..
npm과 yarn 오늘은 자바스크립트(node.js)의 패키지매니저에 대해 알아보자. 알아보기에 앞서 npm은 node package manager로 수많은 패키지와 그에 맞는 버전들을 쉽게 관리해주는 고마운 친구이다. 웹 기술에서 다른 언어의 경우 Java-Spring-Maven과 같은 스택으로 node.js에서는 node.js-express-npm과 비슷하다고 보면 되겠다. 나도 node.js를 공부하면서 npm을 알게 되었는데 tensorflow.js를 쓸려고 데모를 테스트해보던 중에 처음 yarn이라는 것에 대해 알게 되었다. npm의 경우에도 jQuery, BootStrap, react, angular 같은 다양한 패키지를 지원한다. 그렇다면 하나의 프레임워크에 패키지매니져가 독보적이면서 대충적이면 사람들이 더 ..
컴파일과 CMake 리눅스계열에서 코드를 작성하여 컴파일하는 명령어 gcc -c -o main.o main.c gcc -c -o foo.o foo.c gcc -c -o bar.o bar.c 컴파일된 오브젝트 파일들을 링커(ld)을 실행해서 실행파일(app.out)을 생성한다. gcc -o app.out main.o foo.o bar.o 위와 같이하면 C언어가 빌드가 된다. 이 후 발전하여 스크립트로 Makefile을 작성하면 컴파일하여 실행파일을 얻을 수 있게 되었다. app.out: main.o foo.o bar.o gcc -o app.out main.o foo.o bar.o main.o: foo.h bar.h main.c gcc -c -o main.o main.c foo.o: foo.h foo.c gcc -c -o fo..
얕은 복사와 깊은 복사 #include #include using namespace std; class MyString { public: char* m_data = nullptr; int m_length = 0; public: MyString(const char* source = "") { assert(source); m_length = std::strlen(source) + 1; m_data = new char[m_length]; for (int i = 0; i < m_length; ++i) { m_data[i] = source[i]; } m_data[m_length - 1] = '\0'; } char* getString() { return m_data; } int getLength() { return m_length; } ..
형변환을 오버로딩하기 #include using namespace std; class Cents { private: int m_cents; int count = 1; public: Cents(int cents = 0) { m_cents = cents; } int getCents() { return m_cents; } void setCents(int cents) { m_cents = cents; } operator int() { cout
키워드 : friend #include using namespace std; class B;//forward declalation class A { private : int m_value = 1; friend void doSomething(A& a, B& b); }; class B { private: int m_value = 2; friend void doSomething(A& a, B& b); }; void doSomething(A& a, B& b) { cout
정적 멤버 #include using namespace std; class Something { private: static int s_value; public: static int getValue() { return s_value; } int temp() { return this->s_value; } }; int Something::s_value = 1024; int main() { cout
다양한 반환 값들 #include using namespace std; int getValue(int x) { int value = x * 2; //이 함수에서만 유효한 value가 선언이 되고 3 * 2를 연산하여 복사하여 대입된다. return value; } int main() { int value = getValue(3); //value가 선언이 되고 해당 함수의 리턴값이 복사하여 대입된다. return 0; } 안전하지만 복사와 변수의 생성등이 여러번 일어난다. #include using namespace std; int* getValue(int x) { int value = x * 2; return &value; } int main() { int value = *getValue(3); return 0; } 반환..