도서

    [클린코드] 1~2장

    1장 깨끗한 코드 분당 욕(이게뭐야)이 얼마나 나오냐에 따라 좋은코드인지 나쁜코드인지 나뉜다. 나쁜코드 중복된 코드 불필요한 연산이 들어간 성능이 나쁜 코드 네이밍과 내용이 다르거나 이해하기 어려운 의미가 모호한 코드 "우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. 대충 짠 프로그램이 돌아가는 것에 안도감을 느끼고 안돌아가는 쓰레기보다 돌아가는 쓰레기가 좋다고 위로한 경험이 있다. 다시 돌아와 나중에 정리하겠다고 다짐했었다. 물론 그때 그시절 우리는 르블랑의 법칙을 몰랐다. 나중은 결코 오지 않는다." 시간이 부족하다는 이유로, 영향범위가 넓어 버그가 생길까 두려워 나쁜코드가 생긴다. 나쁜 코드가 나쁜 이유는 개발속도와 생산성을 시간이 지날수록 크게 떨어 트린다. ..

    [리펙터링 2판] 12장 - 상속 다루기

    상속은 발등에 불이 떨어져야 비로소 잘못 사용했음을 알아차리는 경우가 많다. 상속은 막강한 도구지만, 잘못된 곳에서 사용되거나 나중에 환경이 변해 문제가 생기기도 한다. 12. 1 매서드 올리기 내용 중복된 메서드를 찾아 제거하여 메서드 올리기를 사용한다. 적용 메서드들의 본문 코드가 똑같을 때 매서드 올리기를 적용하면 된다. 가장 이상하고 복잡한 경우에는 메서드의 본문에서 참조하는 필드들이 서브클래스에만 있는 경우 슈퍼클래스로 올린 후에 메서드를 올려야 한다. 결과 중복 코드를 제거하는 것은 중요하기에 효과를 볼 수 있다. 예시 Before class Employee {...} class Salesman extends Employee { get name() {...} } class Engineer ex..

    [리펙터링 2판] 11장 - API 리팩터링

    모듈과 함수는 소프트웨어를 구성하는 빌등 블록, API는 이 블록들을 끼워 맞추는 연결부이다. 좋은 API 데이터를 갱신하는 함수와 그저 조회만 하는 함수를 명확히 구분해야 한다. 11. 1 질의 함수와 변경 함수 분리하기 내용 외부에서 관찰할 수 있는 겉보기 부수효과가 전혀 없이 값을 반환해주는 함수를 추구해야한다. 겉보기 부수효과는 입출력 변경이나, 데이터 값이 변형되는 경우 적용 데이터 갱신과 조회 기능이 있다면 명확히 구분해야 한다. 질의 함수(읽기 함수 : 값을 계산하여 리턴시키는 함수)는 부수효과가 포함된 경우에 제거한다. (명령-질의 분리) 결과 부수 효과를 신경쓸 필요가 없어 사용하기 편하고 테스트하기 쉽다. 예시 Before function getTotalOutstandingAndSend..

    [리펙터링 2판] 10장 - 조건부 로직 간소화

    조건부 로직은 프로그램의 힘을 강화하는 데 크게 기여하지만, 프로그램을 복잡하게 만드는 주요 원인이기도 하다. 복잡한 조건문에는 조건문 분해하기(10.1절) 논리적 조합을 명확하게 다듬는 데는 중복 조건식 통합하기(10.2절) 함수의 핵심 로직에 본격적으로 들어가기 앞서 무언가를 검사할때는 (10.3절) 똑같은 분기 로직 (switch문)이 여러곳에 등장하면 (10.4절) 널과 같은 특이 케이스를 처리하는데도 조건부 로직이 흔히 쓰이고 거의 똑같으면 (10.5절) 프로그램의 상태를 확인하고 그결과에 따라 다르게 동작해야하는 상황이면 (10.6 절) 10.1 조건문 분해하기 내용 다양한 조건, 그에따라 동작도 다양한 코드를 작성하면 순식간에 긴 함수가 된다. 긴 함수는 그자체로 읽기 어렵지만, 조건문은 그..

    [리펙터링 2판] 9장 - 데이터 조직화

    하나의 값이 여러 목적으로 사용된다면 혼란과 버그를 낳는다. 9.1절 변수 쪼개기를 적용해 용도별로 분리하고, 변수 이름 바꾸기(6.7절)을 친해지도록 하며, 파생 변수를 질의 함수로 바꾸기(9.3절)를 활용하여 변수 자체를 완전히 없애는게 해법일 때도 있다. 결국 이 장에서 말하고자 하는 바는 나눠서 잘 담아야 하는 이야기이다. 예를 들어, 요리를 할 때 재료들을 한 바구니에 담지 않고 여러가지 재료들을 여러가지 그릇에 담는게 일반적이다. 요리를 할 줄 아는 사람에게 재료를 주어야 할 경우가 있다고 가정하였다. 그러면 한 바구니 안에 모든걸 담았을 때, 한 바구니 안에있는 재료들로 어떤 요리를 할지 감이 잡히지 않을 것이다. 재료가 많고 복잡한 요리일 수록 더욱 그러할께 뻔하다. 하지만 반대 경우가 되..

    [리펙터링 2판] 8장 - 기능이동

    요소를 다른 컨텍스트(클래스나 모듈 등)으로 옮기는 일 역시 리팩터링의 중요한 축이다. 그리고 옮기기는 문장 단위에서도 이뤄진다. 반복문 관련하여 자주 사용되는 리팩터링도 있는데, 반복문이 단 하나의 일만 수행하거나 반목문을 완전히 없애버리는 방법이 있다. 마지막으로 대부분 프로그래머가 사용하는 죽은 코드 제거하는 리팩터링이 있다. 8.1 함수 옮기기 내용 함수를 기존에 위치한 곳에서 다른 곳으로 이동 적용 어떤 함수가 자신이 속한 모듈 A의 요소들보다 다른 모듈 B의 요소들을 더 많이 참조한다면 B로 옮겨줘야 한다. 함수의 현재 컨텍스트와 후보 컨텍스트를 둘러보면서 호출하는 함수, 데이터를 파악하여 연관성을 살펴 해결한다. 여러 함수를 묶을 컨텍스트가 필요해지면 클래스묶기(6.9), 클래스 추출하기(7..

    [리펙터링 2판] 7장 - 캡슐화

    7장은 캡슐화 주제로 class를 사용하는것이 대부분이다. 클래스는 객체 지향의 프로그래밍의 컨셉으로 정보를 숨기는 용도로 설계되었다고 한다. 클래스는 내부의 정보뿐 아니라 클래스 사이의 연결 관계를 숨기는 데도 유용하다. 모듈을 분리하는 가장 중요한 기준은 모듈이 자신을 제외한 다른부분에 드러내지 않아야 할 비밀을 얼마나 잘 숨기냐에 있다. 이런 내용을 알고는 있지만 직접 와닿는 부분이 없었고, 굳이? 왜? 라는 의문문이 많이 따라 왔으나 설명과 함께 예시, 예제 코드를 보면서 그러한 부분을 많이 해소 할 수 있었다. 7.1 레코드 캡슐화 하기 내용 레코드를 데이터 클래스로 전환 적용 데이터 레코드는 정의하고 사용하기 간단하지만, 계산해서 얻을 수 있는 값과 그렇지 않은 값을 명확히 구분해야 하는 단점..

    [리팩터링 2판] 6장 - 기본적인 리팩터링

    6장을 읽고나서의 느낌은 기능의 공통점을 잘 찾아내어 같은 공통점끼리 묶고 나누는 것이 중요하다는 것이다. 예를 들어 아래의 그림 밴다이어그램이 하나의 함수에 담겨져 있으면, 정확히 함수 셋 (교집합, 노랑, 보라) 라고 이름을 지어 이름에 맞게 각각 나누어 담는 것이라 느꼈다. 6.1 함수 추출하기 반대 리팩터링 : 6.2 함수 인라인하기 내용 코드가 하는 일을 '목적과 구현'을 기준으로 분리하여 함수로 추출하고 목적에 맞는 함수 이름을 붙이는 것. 적용 함수 안에 코드가 5~6줄 이상 넘어갈 때 부터. 코드가 하는 일이 무엇인지 파악하기 어려운 경우. 함수안 코드가 1줄이라도 적용. - 색상을 반전시켜 강조하는 highlight() 메서드의 경우 본문에 reverse() 메서드 호출 1라인만 작성, ..

    리펙터링 2판 - 2~3장

    리펙토링은 무엇인가에 대해 정의를 내리는듯한 설명을 다방면에서 계속한다. 다른 문장이지만 같은 뜻을 나타내고 있는 문장이 많다. 리펙토링에 대해 중요시하지 않거나, 리펙토링을 처음 접하는 사람에게는 이해가 안 되는 방법이기 때문에 책에서 여러 방면으로 리펙토링에 대해 설명해주고 있다고 생각한다. 이 책에서 리펙토링에 대해 다방면으로 설명을 하면 이해가 되는 부분이 있고, 그렇지 않은 부분이 있다. 하지만 리펙토링을 하지 않았을 때를 생각하고 그 후를 조금이나마 예측을 한다면 하는 것이 분명히 낫다는 것을 알 수 있었다. 2장. 리팩터링 원칙 1장에서 리팩터링을 코드와 함께 예시를 들어 설명하면, 여기서는 글로써 설명을 하게 된다. 리팩터링 : 소프트웨어의 겉보기 동작은 그대로 유지한채, 코드를 이해하고 ..

    리팩터링 2판 - 1장

    로또에 당첨된다면 누구나 다 좋다는 것은 알고 있다. 하지만 돈이 많던 적던 그 당첨되었을 때 기분은 당첨되지 않는 이상 모르는 것이다. 이 책 1장을 읽으면서의 느낌이었다. 글쓴이는 오히려 예시를 들면 모든게 명확해진다고 하여 예시를 앞에서 부터 바로 보여주었지만, 오히려 나는 반감의 효과가 있었다. 예시가 뜬금 없었다고 해야할까.. 그래도 세부적인 기술들은 뒷장에서 소개되는 것 같아 기대되는 부분이 있다. 1장에서 말하고자 하는 내용을 다 동의하고 이해하나, 일부만 공감이 갔다. 왜냐하면 리팩터링이 필요한 경험이 없고, 단지 프로젝트를 하면서 느꼈던 것이 전부였기 때문에, 프로젝트의 리팩터링의 의지가 있기에 일부만 공감이 갔다. 이 책을 보통 주니어에서 시니어 경력사이에 추천한다. 나는 아직 신입 조..