테스트 구축하기 드디어 나왔다. 테스트코드... 근데 이 책은 테스트에 관련된 책이 아니라서 상세하게 설명하지는 않았다. 그래서 좀 아쉽기도 하지만 테스트로 주제가 빠져버리면 책 한권으로도 부족하기 때문에 어쩔 수 없다고 생각한다. 예시 테스트 코드도 나쁘지는 않지만 좀 부족하다. 게다가 프론트엔드에서 테스트는 또 다른 얘기다. 자가 테스트코드의 가치 테스트를 작성하기 가장 좋은 시점은 프로그래밍을 시작하기 전이다. 테스트를 작성하다 보면 원하는 기능을 추가하기 위해 무엇이 필요한지 고민하게 된다. 구현보다 인터페이스에 집중하게 된다는 장점도 있다. 게다가 코딩이 완료되는 시점을 정ㄹ확하게 판단할 수 있다. 테스트를 모두 통과한 시점이 바로 코드를 완성한 시점이다. 켄트 벡은 테스트부터 작성하는 습관을 ..
코드에서 나는 악취 이번에도 세부적인 내용은 적지 않겠다. 그 중에서도 중요하다고 생각한 몇가지만 적어보겠다. 그리고 가장 중요한 것은 코드를 작성할 때 생각을 하면서 짜는 것이다. 생각없이 코드를 적으면 악취를 풍긴다. 최대한 냄새를 풍기지 않게 주의하면서 코딩을 하자. 기이한 이름 코드를 명료하게 표현하는데 표현하는데 가장 중요한 요소 하나는 바로 이름이다. 마땅한 이름이 떠오르지 않는다면 설게에 더 근본적인 문제가 숨어 있을 가능성이 높다. (너무 많은 역할을 하고 있지는 않은지 생각해보자) 네이밍은 엄청나게 중요하다. 진짜로 엄청엄청. 변수명을 보고 유추하기 어렵다면 그건 잘못된 네이밍이다. 설계가 잘못되었는지 두 가지 이상의 역할을 하고 있는지 이런것들을 생각하는 것도 중요하지만 그것과는 별개로..
리팩터링 원칙 리팩터링 리팩터링 하는데 정의가 무엇일까? 정의는 다음과 같다. 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다. 여기서 겉보기 동작은 그대로 유지한 채. 라는게 중요하다. 성능을 개선하고 기능을 추가하는 거은 리팩터링이 아니다. 우리는 커밋을 할때도 기능 추가와 리팩터링 두 개의 모자를 구분해서 바꿔써야한다. 대부분의 회사에서 하는일은 유지보수다. 그리고 기능추가를 하려고 하는데 코드가 지저분할 경우가 있을 것이다. 그럴때는 먼저 리팩터링을 하자. 대단한 리팩터링을 얘기하는 것이 아니다. 함수가 좀 크다면 함수를 나누고 변수명이 모호하다면 변수명을 바꾸고 이런 기본적인 것들이라도 먼저 적용하면 훨씬 깔끔해진다. 이 이후에 코드를 보면..
배경 리팩터링2라는 책을 예전부터 알고 있었다. 개발바닥의 이동욱님을 통해서 알게되었고 꼭 스터디를 열어서 공부해야겠다고 생각했다. (클린코드, 함께 자라기, 객체지향의 사실과 오해, 오브젝트 등도 기회가 있다면 하고싶다.) 친구랑 우연히 얘기하다가 둘다 이 책으로 스터디를 하고 싶어한다는 것을 알게 되었고 스터디를 시작하게 되었다. 그리고 회사에서도 이 얘기를 하자 같이 하고 싶다고 한 두분이 있었고 회사 동료분의 친구까지 합쳐서 5명이 스터디를 하게 되었다. 이 책을 읽는 이유 사실 할 공부도 책도 너무 많다. 그 많은 책중에서 리팩터링이라는 책을 선택했다. 그 이유는 모두가 리팩터링이라는 것이 꼭 필요하다고 생각하기 때문이다. 특히 회사를 다니면 엄청 공감하게 된다. 작은 프로젝트에서는 그냥 하면 ..
책내용 1. 객체지향과 인지 능력 인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다. 많은 사람들이 객체지향을 직관적이고 이해하기 쉬운 패러다임이라고 말하는 이유는 객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다. 세상을 더 작은 객체로 분해하는 것은 본질적으로 세상이 포함하고 있는 복잡성을 극복하기 위한 인간의 작은 몸부림이다. 인간은 좀 더 단순한 객체들로 주변을 분해함으로써 자신이 몸담고 있는 세상을 이해하려고 노력한다. 즉, 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다. 객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아니라 현실 세계를 기반으로 새..
책 내용 "객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임"이라고 말한다. 즉 객체지향 소프트웨어는 실세계의 투영이며, 객체란 현실 세계에 존재하는 사물에 대한 추상화다. 하지만 실용적인 관점에서는 위의 설명이 적합하지 않다. 대다수의 개발자들은 객체지향 애플리케이션이 실세계를 모방해야 한다는 설명을 전혀 납득하지 못한다. 오히려 새로운 세계를 창조하는 것이다. 다만 실세계에 대한 비유가 객체지향의 다양한 측면을 이해하고 학습하는데 효과적이라서 그렇다. 책에서도 이런 방식을 따른다.(캡슐화, 자율성, 메세지, 협력 => 연결완전성) 1. 협력하는 사람들 커피 공화국 커피를 주문하는 경우를 생각해보자. 손님, 캐시어, 바리스타가 존재한다. 손님은 커피를 캐시어에게 주문하고 캐시어는 바..
배경 우테캠에서 호눅스님이 추천한 책 중에 하나가 객체지향의 사실과 오해다. 그때는 그런 책이 있구나 하고 넘어갔는데 여러 글들을 보고 면접을 보면서 객체지향에 대해 관심이 생기고 공부할 필요성을 느꼈다. 자바스크립트는 프로토타입 기반의 객체지향 언어이다. 그렇다면 클래스형 객체지향 언어와 다른 점은 무엇인가? 객체지향이 왜 중요하고 어디에 적용할 수 있는가? 라는 질문에 제대로 대답할 수 없다. 구글링해서 답변만 찾아보는 것으로는 부족하다. 현실 세계에 있는 것들을 추상화를 통해 코드로 구현하고 캡슐화, 상속, 다향성의 특징을 가진다 정도의 설명은 너무 막연하다. 단순히 면접에서 잘 대답하기 위해서가 아니라(사실 객체지향에 대한 깊은 지식은 신입 개발자에게 잘 물어보지 않는다) 더 좋은 개발자가 되기 ..
제어판/ 사용자계정/자격 증명 관리자 들어가서 git 내꺼 지우고 git bash에서 git push로 로그인!! git config --system credentail.helper => manager SSH키 User@DESKTOP-VOH9EIA MINGW64 ~/Desktop $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/User/.ssh/id_rsa): Created directory '/c/Users/User/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your ident..