내 코드가 그렇게 이상한가요? - 프로그래밍 인사이트 Programming Insight

내 코드가 그렇게 이상한가요? - 프로그래밍 인사이트 Programming Insight

$26.00
Description
예약 판매부터 1만 부 돌파! 일본 아마존 IT 분야 베스트셀러
개발자가 직접 선정한 〈IT 엔지니어 도서 대상 2023〉 기술서 부문 대상
공감 100% 나쁜 코드 사례로 배우는 지속 가능한 코드 설계 입문서
소프트웨어를 개발하면서 다음과 같은 경험을 해 본 적 있지 않나요?

ㆍ 어떤 곳의 코드를 변경하니 다른 곳에서 버그가 발생했다.
ㆍ 코드를 변경했을 때 영향을 끼치는 부분이 어디인지 여기저기 찾아다녔다.
ㆍ 코드를 읽고 이해하는 데만 하루가 걸렸다.
ㆍ 쉽게 생각했던 사양 변경과 버그 수정에 며칠을 소비했다.

위와 같은 상황으로 괴로워하면서도 개발을 어렵게 하는 원인이 무엇인지조차 몰랐거나 원인을 알아도 어떻게 개선해야 할지 몰라 헤맨 적이 있을 것입니다. 그 이유는 이상적인 구조를 잘 모르기 때문입니다. 코드의 가독성을 높이고, 유지 보수를 용이하게 하며, 버그 발생을 줄이는 ‘좋은 코드’는 분명히 존재합니다. 우리 주변에서 마주칠 만한 나쁜 코드 사례를 하나하나 살펴보며, 좋은 코드로 개선하는 방법을 알아봅시다.
이 책에서는 객체 지향 설계를 통해 코드 품질을 높이는 방법을 설명합니다. 설계를 고민하지 않고 작성한 코드는 오로지 한 치 앞만 바라본 코드라고 보며, 설계를 염두에 두고 코드를 작성할 것을 강조합니다. 복잡한 로직을 구분하고 정리하여 질서 정연한 구조로 개선하는 다양한 객체 지향 설계 기법을 통해 소프트웨어의 성장 가능성을 높일 수 있습니다.

저자의 책 소개 인터뷰: https://www.youtube.com/live/_qXG06v8HAI?feature=share

북 트레일러

  • 출판사의 사정에 따라 서비스가 변경 또는 중지될 수 있습니다.
  • Window7의 경우 사운드 연결이 없을 시, 동영상 재생에 오류가 발생할 수 있습니다. 이어폰, 스피커 등이 연결되어 있는지 확인 하시고 재생하시기 바랍니다.

저자

센바다이야

저자:센바다이야
대형전자제품제조회사에다니다가현재는주식회사READYFOR에서애플리케이션아키텍트로일하고있다.리팩터링,설계와관련된전반적인일을담당하며,계속해서나쁜코드와싸우다설계의매력에눈을떴다.틈만나면머릿속에서리팩터링이진행되는터라,트위터(@MinoDriven)에프로그래밍관련풍자동영상을부정기적으로연재도한다.DevelopersSummit2021Summer에서베스트스피커상3위를수상했다.그밖에도여러세미나에서발표하고있다.

역자:윤인성
출근하는것이싫어서책을집필하기시작했다.현재직업특성상집에서나갈이유가별로없다는것에굉장히만족하고있다.홍차와커피를좋아하며기타,가야금,그림그리기,스컬핑등이취미다.저서로는한빛아카데미의『자바스크립트프로그래밍입문』,『C#프로그래밍』과한빛미디어의『혼자공부하는파이썬』,『모던웹을위한HTML5+CSS3바이블(3판)』,『모던웹을위한JavaScript+jQuery입문』,『모던웹을위한Node.js프로그래밍』등이있습니다.역서로는『TopCoder알고리즘트레이닝』,『자바퍼즐러』,『소셜코딩으로이끄는GitHub실천기술』,『NatureofCode』등이있다.

목차


1장잘못된구조의문제깨닫기

1.1의미를알수없는이름
1.2이해하기어렵게만드는조건분기중첩
1.3수많은악마를만들어내는데이터클래스
1.4악마퇴치의기본

2장설계첫걸음

2.1의도를분명히전달할수있는이름설계하기
2.2목적별로변수를따로만들어사용하기
2.3단순나열이아니라,의미있는것을모아메서드로만들기
2.4관련된데이터와로직을클래스로모으기

3장클래스설계:모든것과연결되는설계기반

3.1클래스단위로잘동작하도록설계하기
3.2성숙한클래스로성장시키는설계기법
3.3악마퇴치효과검토하기
3.4프로그램구조의문제해결에도움을주는디자인패턴

4장불변활용하기:안정적으로동작하게만들기

4.1재할당
4.2가변으로인해발생하는의도하지않은영향
4.3불변과가변은어떻게다루어야할까

5장응집도:흩어져있는것들

5.1static메서드오용
5.2초기화로직분산
5.3범용처리클래스(Common/Util)
5.4결과를리턴하는데매개변수사용하지않기
5.5매개변수가너무많은경우
5.6메서드체인

6장조건분기:미궁처럼복잡한분기처리를무너뜨리는방법

6.1조건분기가중첩되어낮아지는가독성
6.2switch조건문중복
6.3조건분기중복과중첩
6.4자료형확인에조건분기사용하지않기
6.5인터페이스사용능력이중급으로올라가는첫걸음
6.6플래그매개변수

7장컬렉션:중첩을제거하는구조화테크닉

7.1이미존재하는기능을다시구현하지말기
7.2반복처리내부의조건분기중첩
7.3응집도가낮은컬렉션처리

8장강한결합:복잡하게얽혀서풀수없는구조

8.1결합도와책무
8.2다양한강한결합사례와대처방법

9장설계의건전성을해치는여러악마

9.1데드코드
9.2YAGNI원칙
9.3매직넘버
9.4문자열자료형에대한집착
9.5전역변수
9.6null문제
9.7예외를catch하고서무시하는코드
9.8설계질서를파괴하는메타프로그래밍
9.9기술중심패키징
9.10샘플코드복사해서붙여넣기
9.11은탄환

10장이름설계:구조를파악할수있는이름

10.1악마를불러들이는이름
10.2이름설계하기-목적중심이름설계
10.3이름설계시주의사항
10.4의미를알수없는이름
10.5구조에악영향을미치는이름
10.6이름을봤을때,위치가부자연스러운클래스
10.7이름축약

11장주석:유지보수와변경의정확성을높이는주석작성방법

11.1내용이낡은주석
11.2주석때문에이름을대충짓는예
11.3의도와사양변경시주의사항을읽는이에게전달하기
11.4주석규칙정리
11.5문서주석

12장메서드(함수):좋은클래스에는좋은메서드가있다

12.1반드시현재클래스의인스턴스변수사용하기
12.2불변을활용해서예상할수있는메서드만들기
12.3묻지말고명령하라
12.4커맨드/쿼리분리
12.5매개변수
12.6리턴값

13장모델링:클래스설계의토대

13.1악마를불러들이기쉬운User클래스
13.2모델링으로접근해야하는구조
13.3안좋은모델의문제점과해결방법
13.4기능성을좌우하는모델링

14장리팩터링:기존의코드를성장시키는기술

14.1리팩터링의흐름
14.2단위테스트로리팩터링중실수방지하기
14.3불확실한사양을이해하기위한분석방법
14.4IDE의리팩터링기능
14.5리팩터링시주의사항

15장설계의의의와설계를대하는방법

15.1이책은어떤설계를주제로집필한것인가?
15.2설계하지않으면개발생산성이저하된다
15.3소프트웨어와엔지니어의성장가능성
15.4문제해결하기
15.5코드의좋고나쁨을판단하는지표
15.6코드분석을지원하는다양한도구
15.7설계대상과비용대비효과
15.8시간을다스리는능력자되기

16장설계를방해하는개발프로세스와의싸움

16.1커뮤니케이션
16.2설계
16.3구현
16.4리뷰
16.5팀의설계능력높이기

17장설계기술을계속해서공부하려면

17.1추천도서
17.2설계스킬을높이는학습방법

출판사 서평

"그때는돌아갔지만,지금은아니다"
쌓여가는기술부채에유지보수하기막막하다면?
나쁜코드사례를통해설계의세계로나아가보자!

‘좋은코드,나쁜코드가따로있을까?’,‘그냥돌아가기만하면되는것아닌가?’오늘만코딩하는사람이면이렇게생각할수도있습니다.하지만코드가지금은문제없이돌아가더라도요구사항이달라지거나기능이변경되면,얼마지나지않아여기저기서문제가터져나올것입니다.

이렇게방치된나쁜코드는읽고이해하는데시간이오래걸릴뿐더러,비즈니스에손해를끼치는버그를계속해서만들어냅니다.더나아가낮은품질의개발경험을재생산하여추후의프로젝트에도영향을미칩니다.장기적으로개발생산성이높은코드를작성하기위해서는‘설계’해야합니다.여러기술서적에서공통으로강조하는‘좋은설계’가있습니다.이책을통해이상적인설계를체득하고현재설계와비교하면차근차근간극을좁혀나갈수있습니다.

클린코드,도메인주도설계,리팩터링…읽고싶지만너무어렵게느껴진다면?
설계알못을위한첫단추!객체지향설계의기본기를다지자!

설계를배워보지않은사람들은‘설계’가중급자이상의영역이라고생각할수있습니다.또는그냥코딩하지않고,설계기술을적용하여개발중인소스코드를개선하고싶은데어디서부터시작해야할지모를수도있습니다.시중에는설계역량을높이는데도움되는좋은책이많습니다.이책들은프로그래머들사이에서필독서로거론되며,선배들이후배에게추천하곤합니다.하지만이런책을구매해서학습해보려고해도,설계초보자들에게는수준이높아접근하기어려웠을것입니다.

이책은설계초보자도진입장벽을딛고,기본기를다져더높은수준의설계학습으로나아가도록돕습니다.소프트웨어설계에서중요한개념과지침을이해하기쉬운표현으로전달합니다.개발생산성을낮추는나쁜코드를발견하는방법부터,코드에구조적으로접근하는방법,그리고개발프로세스에서발생할수있는문제해결방법까지설계초보자도설계와친해지고코드품질을높일수있는기법을다룹니다.