TIL
-
20221023 TIL git을 파보다TIL 2022. 10. 23. 11:37
하루에 git 명령어를 셀 수 없이 많이 치면서도 git 내부 원리를 제대로 모른 채 명령어를 쳤었다. git은 변경 내역을 저장하는 게 아니라 스냅샷을 저장한다는데 어떻게 모든 것을 매번 저장하면서 이렇게 가벼운지 궁금했었다. 먼저, git은 분산 관리 시스템이다. 따라서 몇몇 명령어를 제외하고, git add, git commit등은 네트워크 연결 없이 로컬에서의 변화로 버전을 관리한다. 그런데 git은 내가 add하거나 commit한다는 사실을 어떻게 인지하는 것일까? git init은 내가 어떤 폴더를 버전 관리하겠다는 사실을 git에게 알려주는 것이다. 그리고 그 폴더에는 .git이라는 숨겨진 폴더가 있다. git은 모든 버전관리를 .git이라는 폴더에 파일을 추가함으로써 관리한다. 내가 한 모..
-
20221022 TIL ide 없는 삶TIL 2022. 10. 22. 15:15
코딩테스트를 ide없이 봐야하는 경우도 있다고 해서 오늘은 에디터 없이 코딩 문제를 TDD로 풀어보았다. 세상에... 안 그래도 어려운 코딩 문제 난이도가 배로 어려워지는 것 같다. import도 신경써줘야 하고, 메소드명, 오타 등등 자동완성이 도와줬던 부분들을 스스로 해야 한다. 또한 테스트도 깔끔하게 짤 수가 없다. 오로지 믿을 것은 나 자신밖에 없기 때문에 에러가 나면 없는 메소드를 가져다 쓴 것인지, 오타가 없는지, import에 문제가 없는지 모두 확인해줘야 한다. 알고리즘 연습만을 위해서라면 ide를 쓰는 것이 맞겠지만, 실제 코딩테스트 대비를 하려면 ide없이도 풀 수 있어야 한다. 지금은 ide를 쓰면서 TDD로 풀면 10분 안에 풀 수 있는 문제를 ide없이 푸니 거의 30분이 넘어가고..
-
20221021 TIL 의존성 주입이 왜 제어를 역전하는 방식인가TIL 2022. 10. 21. 21:05
객체 지향을 처음 배우면서 이해가 잘 가지 않았던 개념이 의존성 주입과 제어의 역전이었다. 두 개의 연관 관계가 있다는데 의존성을 주입하는 것까지는 이해가 가도 의존성을 주입하는 것이 왜 제어의 역전인지 이해하기가 힘들었다. 다행히 객체 지향을 공부한지 몇 주가 지난 지금 이해가 조금은 되었다. 개발자로서 가져야 할 기본적인 전제는 변경되지 않는 코드는 없기 때문에 코드는 변경이 쉬워야 한다는 것이다. 객체 지향은 객체들의 협력으로 커다란 시스템을 만들기 때문에 어떤 객체는 다른 객체에 의존하게 된다. 의존한다라는 것은 의존하고 있는 객체의 변경에 영향을 받을 수 있다는 의미이다. 하지만 코드에는 변경이 자주되는 부분이 있고 그렇지 않은 부분이 있다. 변경이 자주 되는 부분은 조금 더 구체적인 부분에 해..
-
20221020 TIL 멋진 개발자 되기 프로젝트TIL 2022. 10. 20. 14:47
나는 항상 개발자들이 정규식을 잘 쓰는 게 너무 멋있었다. 나한테는 너무 어려워보이는 식들로 여러 패턴을 원하는 대로 쉽게 만들어내는 것처럼 보였기 때문이다. 개발 공부를 제대로 시작하면서 정규식을 꼭 잘 쓰는 것이 한 가지 목표였다. 그래서 몇 주 전부터 정규식 패턴을 만드는 것을 공부했고 이제 어느정도 정규식 패턴은 생성할 줄 알게 되었다. 그런데 정규식 패턴을 사용하는 방법도 알아야 결국 어떤 언어에서 정규식을 사용할 수 있다. 자바에서는 Pattern.compile안에 정규식을 써서 패턴을 생성하고, 생성된 패턴의 matcher메소드 안에 문자열을 넣어서 Matcher를 만들어서 사용하면 된다. 만약 패턴을 일정한 규칙에 따라 교체하고 싶다면 matcher.replaceAll 안에 함수를 넣으면 ..
-
20221019 TIL 왜일까TIL 2022. 10. 19. 13:01
오늘 하루의 요약 코딩을 하다보면 될 것 같은데 안되는 경우와 되면 안될 것 같은데 되는 경우가 있다. 오늘 코딩 도장 문제를 풀다가 돼야 될 것 같은데 안되는 경우가 있었다. 몇 개의 테스트 케이스에서 런타임 에러가 떠서 왜인지 확인을 하다가 입력값과 반환값 모두 long을 다루고 있는데 Integer.parseInt를 쓰고 있는 부분이 있어서 고쳤더니 해결이 되었다. 코딩 문제를 풀다보면 몇 케이스에서 런타임 에러가 뜨는 경우는 보통 자료형과 관련이 있는 경우가 많았다. 인자의 자료형을 꼭 먼저 확인하고, 만약 실수로 못봐서 자료형을 바꿀 때는 cmd f로 찾아서 하나하나 다 잘 바꿨는지 확인을 하자. 그리고 코딩을 하다가 테스트 코드를 짜고 코드를 일부만 구현한 줄 알았는데 돼서 놀랐다. 자바스크립..
-
20221018 TIL 반환을 하자!!!TIL 2022. 10. 18. 21:13
자바스크립트는 자유로운 언어이다. 그리고 반환형을 지정해주지 않기 때문에 return을 빼먹기 매우 쉽다. 자바에서는 반환형을 지정해주기 때문에 return을 제대로 안해주는 경우를 잡아줬었는데 자바스크립트는 반환형을 명시하지 않기 때문에 return을 제대로 하지 않아도 잡아주지 않는다. 그래서 결과값이 undefined로 뜨는 경우를 많이 겪고 있는 요즘이다. 함수값이 undefined가 떠서 보면 return을 빼먹은 경우가 대부분이다. 주의할 점은 재귀에서 반환을 할 때 자신을 호출하는 부분에도 return을 써줘야 한다는 점이다!!! 빠져나가는 조건 부분에서만 return을 하고 자신을 호출하는 부분에서는 return을 안써주면 조건에 해당하지 않을 때는 undefined가 뜬다. 왜냐하면 결국..
-
20221016 TIL 신기한 JS세계TIL 2022. 10. 17. 11:39
JS는 예상과 다른 결과를 보여주는 경우가 위의 경우처럼 많다. 왜 저런 결과가 나오는지 모를 때는 JS가 이상하다고 생각했었는데, JS가 자동으로 타입 변환을 해주는 과정(coercion)을 이해하면 그나마 JS의 직관과 다른 부분들을 예상할 수 있다. 자동 형변환 규칙 1. string + 무언가 무언가가 string으로 변환되어 문자열끼리 연결된다. ex. 9 + “1” === “91” 1. +이외의 연산 -, *, /, %등의 연산은 number타입으로 모두 변환되어 연산된다. ex. “1” - “1” === 0 91 - “1” === 90 true * “3” === 3 1. boolean + number boolean이 number로 형변환된다. true → 1, false → 0 ex. tru..
-
20221015 TIL Node.js에서 패키지를 실행 방법 총정리TIL 2022. 10. 17. 11:30
npm은 Node.js 패키지를 관리해주는 도구이다.npm 으로 global하게(-g옵션 추가)설치한 패키지는 패키지 이름으로 실행할 수 있다.만약 local하게 설치되어 있다면 그냥 패키지 이름만으로는 실행할 수 없다. ./node_modules/.bin/package-name 와 같이 실행해야 한다.혹은 npx package-name 으로 실행할 수 있다. npx는 Node.js패키지를 실행해주는 도구이다. 이 방식은 미리 설치되지 않은 패키지더라도 실행이 가능하다. npm으로 설치된 패키지를 실행하는 또 다른 방법은 package.json의 scripts부분에 추가해두면 npm run package-name 으로 실행할 수 있게 된다. 자주 실행하는 패키지나 명령어는 package.json에 scr..