Refactoring

1,357 views
1,182 views

Published on

0 Comments
23 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,357
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
0
Comments
0
Likes
23
Embeds 0
No embeds

No notes for slide

Refactoring

  1. 1. 더 나은 코드 작성을 위한 리팩토링 1  
  2. 2. 학습목표-
  3. 3.  응용
  4. 4.  애플리케이션
  5. 5.  작성시
  6. 6.  만들어지는
  7. 7.  나쁜
  8. 8.  코드들을
  9. 9.  구별할
  10. 10.  수
  11. 11.  있다.
  12. 12.  -
  13. 13.  나쁜
  14. 14.  코드를
  15. 15.  객체지향
  16. 16.  설계가
  17. 17.  적용된
  18. 18.  코드로
  19. 19.  변경하는
  20. 20.  기법을
  21. 21.  배우고
  22. 22.  적용할
  23. 23.  수
  24. 24.  
  25. 25.  있다.-
  26. 26.  실제
  27. 27.  코드에서
  28. 28.  잘못된
  29. 29.  부분을
  30. 30.  찾아내
  31. 31.  이해하기
  32. 32.  쉬운
  33. 33.  구조로
  34. 34.  변경할
  35. 35.  수
  36. 36.  있다.
  37. 37.   2   디자인패턴
  38. 38.          1. 코드개선 1.  객체지향 특징 2.  코드 개선 [실습] 3   디자인패턴
  39. 39. 1.객체지향 특징 4  
  40. 40. 추상화 Abstraction
  41. 41.   객체지향 특징 주어진 문제나 시스템 중에서 중요하고 관계 있는 부분만 을 분리하여 간결하고 이해하기 쉽게 만드는 작업 5  
  42. 42. 상속 Inheritance
  43. 43.   객체지향 특징 직접 구현하지 않고 부모 클 래스로부터 물려받은 기능 이나 데이터를 말하며 재사 용을 위한 보편적인 기법 6  
  44. 44. 캡슐화 Capsulation
  45. 45.   객체지향 특징 외부와 통신할 때의 복잡도를 줄이고, 내부 상태를 보호 하기 위해 만들어 놓은 구조 7  
  46. 46. 다형성 Polymorphism
  47. 47.   객체지향 특징 polymorphism
  48. 48.   하나의 선언으로 여러 개의 多形性
  49. 49.   타입을 가질 수 있는 것. 혹은 자신이 여러 타입을 가지는 것을 지칭 TYPE
  50. 50.   8  
  51. 51. 2. 코드 개선 [실습] 9  
  52. 52.          2. 리팩터링이란? 1.  프로젝트
  53. 53.  인
  54. 54.  더
  55. 55.  월드
  56. 56.   2.  리팩터링이란?
  57. 57.   3.  테스트
  58. 58.  코드
  59. 59.   4.  리팩터링과
  60. 60.  설계
  61. 61.   5.  코드
  62. 62.  속의
  63. 63.  나쁜
  64. 64.  냄새
  65. 65.   10   리팩터링
  66. 66.  
  67. 67. 1. 프로젝트 인 더 월드 Project in the world 11  
  68. 68. 프로젝트 In IDEAL Project
  69. 69.  in
  70. 70.  the
  71. 71.  world
  72. 72.   § 
  73. 73.  확정되어
  74. 74.  변경되지
  75. 75.  않는
  76. 76.  고객의
  77. 77.  요구
  78. 78.  사항
  79. 79.   § 
  80. 80.  빈틈없는
  81. 81.  시스템
  82. 82.  설계
  83. 83.   § 
  84. 84.  숙련되고
  85. 85.  표준을
  86. 86.  따르기를
  87. 87.  즐기는
  88. 88.  개발자
  89. 89.   § 
  90. 90.  하나의
  91. 91.  버그도
  92. 92.  빠져나갈
  93. 93.  수
  94. 94.  없는
  95. 95.  완벽한
  96. 96.  테스트
  97. 97.   § 
  98. 98.  정확히
  99. 99.  산정된
  100. 100.  스케줄과
  101. 101.  여유
  102. 102.  있는
  103. 103.  납기
  104. 104.  일자
  105. 105.   12  
  106. 106. 프로젝트 In REAL Project
  107. 107.  in
  108. 108.  the
  109. 109.  world
  110. 110.   §  파트리더
  111. 111.  고미화의
  112. 112.  고민
  113. 113.   ­–  개발자가
  114. 114.  모두
  115. 115.  동일한
  116. 116.  수준의
  117. 117.  Skill을
  118. 118.  가지고
  119. 119.  있지
  120. 120.  않다.
  121. 121.   ­– 
  122. 122.  고객의
  123. 123.  요구는
  124. 124.  계속
  125. 125.  변화된다.
  126. 126.   ­– 
  127. 127.  개발
  128. 128.  초기의
  129. 129.  디자인이
  130. 130.  완벽하지
  131. 131.  않는
  132. 132.  경우가
  133. 133.  많으며,
  134. 134.   ­– 
  135. 135.  실제로
  136. 136.  설계가
  137. 137.  잘못된
  138. 138.  경우도
  139. 139.  많다.
  140. 140.   ­– 
  141. 141.  테스트에
  142. 142.  나타나지
  143. 143.  않는
  144. 144.  버그들이
  145. 145.  존재한다
  146. 146.   ­–  개발
  147. 147.  완료로
  148. 148.  끝나지
  149. 149.  않는다.
  150. 150.  유지보수가
  151. 151.  뒤
  152. 152.  따른다.
  153. 153.   13  
  154. 154. 프로젝트 In REAL Project
  155. 155.  in
  156. 156.  the
  157. 157.  world
  158. 158.   §  개발자
  159. 159.  최고수의
  160. 160.  고민
  161. 161.   14  
  162. 162. 프로젝트 In REAL Project
  163. 163.  in
  164. 164.  the
  165. 165.  world
  166. 166.   §  개발자
  167. 167.  최고수의
  168. 168.  고민
  169. 169.   ­–  코드
  170. 170.  이해에
  171. 171.  많은
  172. 172.  시간이
  173. 173.  필요(복잡,다양한
  174. 174.  개발자의
  175. 175.  취향)
  176. 176.   ­– 
  177. 177.  어려운
  178. 178.  업무
  179. 179.  용어가
  180. 180.  많이
  181. 181.  들어간
  182. 182.  장황한
  183. 183.  주석
  184. 184.  또는
  185. 185.  주석
  186. 186.  부재
  187. 187.   ­– 
  188. 188.  수정으로
  189. 189.  인한
  190. 190.  파급
  191. 191.  효과에
  192. 192.  대한
  193. 193.  불안
  194. 194.   ­– 
  195. 195.  Copy
  196. 196.  
  197. 197.  Paste
  198. 198.  로
  199. 199.  신규
  200. 200.  기능
  201. 201.  작성
  202. 202.   ­– 
  203. 203.  고치면
  204. 204.  고칠수록
  205. 205.  수정이
  206. 206.  어려워짐
  207. 207.  (땜빵식
  208. 208.  코드)
  209. 209.   15  
  210. 210. Normal Dejavu Project
  211. 211.  in
  212. 212.  the
  213. 213.  world
  214. 214.   • 
  215. 215.  (어쨌든)
  216. 216.  요구사항에
  217. 217.  맞춰
  218. 218.  동작하는
  219. 219.  코드
  220. 220.  완성
  221. 221.   • 
  222. 222.  추가
  223. 223.  요구사항을
  224. 224.  계속
  225. 225.  반영,
  226. 226.  반영,
  227. 227.  반영
  228. 228.  
  229. 229.   • 
  230. 230.  많은
  231. 231.  부분에
  232. 232.  있어
  233. 233.  수정이
  234. 234.  가해지고,
  235. 235.  개발
  236. 236.  속도가
  237. 237.  느려지기
  238. 238.  시작
  239. 239.   • 
  240. 240.  가끔은
  241. 241.  수정해야
  242. 242.  할
  243. 243.  부분을
  244. 244.  잊어서
  245. 245.  에러도
  246. 246.  발생
  247. 247.  (Iterative)
  248. 248.   • 
  249. 249.  후임
  250. 250.  등장
  251. 251.   • 
  252. 252.  소스를
  253. 253.  보고
  254. 254.  기겁,
  255. 255.  어떻게
  256. 256.  어딜
  257. 257.  고쳐야
  258. 258.  하나?
  259. 259.   • 
  260. 260.  언제
  261. 261.  시간
  262. 262.  내서
  263. 263.  통째로
  264. 264.  다시
  265. 265.  재
  266. 266.  작성해야
  267. 267.  한다고
  268. 268.  믿음
  269. 269.   • 
  270. 270.  그러나
  271. 271.  여전히
  272. 272.  부분
  273. 273.  부분
  274. 274.  수정하며,
  275. 275.  필요
  276. 276.  시에는
  277. 277.  선임자를
  278. 278.  전화로
  279. 279.  찾음
  280. 280.   • 
  281. 281.  (어쨌든)
  282. 282.  요구사항에
  283. 283.  맞춰
  284. 284.  동작하는
  285. 285.  코드
  286. 286.  완성
  287. 287.   • 
  288. 288.  and
  289. 289.  Looping…⋯
  290. 290.   16  
  291. 291. ….
  292. 292.   17  
  293. 293. 2. 리팩터링이란? 18  
  294. 294. 리팩터링이란? 리팩터링이란?
  295. 295.   §  리팩터링
  296. 296.   ­–  외견상
  297. 297.  보이는
  298. 298.  기능
  299. 299.  동작은
  300. 300.  바뀌지
  301. 301.  않는
  302. 302.  상태에서
  303. 303.  
  304. 304.   ­–  이해하기
  305. 305.  쉽고,
  306. 306.  
  307. 307.   ­–  수정하기
  308. 308.  쉽도록
  309. 309.  
  310. 310.   ­–  소프트웨어의
  311. 311.  내부적인
  312. 312.  구조를
  313. 313.  변경하는
  314. 314.  것
  315. 315.   19  
  316. 316. Example #1 리팩터링이란?
  317. 317.   void
  318. 318.  f()
  319. 319.  {
  320. 320.   void
  321. 321.  f()
  322. 322.  {
  323. 323.  
  324. 324.  
  325. 325.  
  326. 326.  
  327. 327.  …⋯.
  328. 328.  
  329. 329.  
  330. 330.  
  331. 331.  
  332. 332.  …⋯.
  333. 333.  
  334. 334.  
  335. 335.  
  336. 336.  
  337. 337.  computeScore();
  338. 338.  
  339. 339.  
  340. 340.  
  341. 341.  
  342. 342.  //
  343. 343.  Compute
  344. 344.  score
  345. 345.   }
  346. 346.  
  347. 347.  
  348. 348.  
  349. 349.  
  350. 350.  score
  351. 351.  =
  352. 352.  a
  353. 353.  *
  354. 354.  b
  355. 355.  +
  356. 356.  c;
  357. 357.  
  358. 358.  
  359. 359.  
  360. 360.  
  361. 361.  
  362. 362.  score
  363. 363.  -=
  364. 364.  discount;
  365. 365.   void
  366. 366.  computeScore()
  367. 367.  {
  368. 368.   }
  369. 369.  
  370. 370.  
  371. 371.  
  372. 372.  
  373. 373.  
  374. 374.  score
  375. 375.  =
  376. 376.  a
  377. 377.  *
  378. 378.  b
  379. 379.  +
  380. 380.  c;
  381. 381.  
  382. 382.  
  383. 383.  
  384. 384.  
  385. 385.  score
  386. 386.  -=
  387. 387.  discount;
  388. 388.   }
  389. 389.  
  390. 390.   20  
  391. 391. Example #2 리팩터링이란?
  392. 392.   public
  393. 393.  String
  394. 394.  name;
  395. 395.   private
  396. 396.  String
  397. 397.  name;
  398. 398.  
  399. 399.   public
  400. 400.  String
  401. 401.  getName(){
  402. 402.  
  403. 403.  
  404. 404.  
  405. 405.  
  406. 406.  return
  407. 407.  name;
  408. 408.   }
  409. 409.  
  410. 410.   public
  411. 411.  String
  412. 412.  setName
  413. 413.  (String
  414. 414.  newName)
  415. 415.  {
  416. 416.  
  417. 417.  
  418. 418.  
  419. 419.  
  420. 420.  name
  421. 421.  =
  422. 422.  newName;
  423. 423.   }
  424. 424.  
  425. 425.   21  
  426. 426. Example #3 리팩터링이란?
  427. 427.  
  428. 428.  
  429. 429.  if
  430. 430.  (user
  431. 431.  ==
  432. 432.  null)
  433. 433.  
  434. 434.  
  435. 435.  
  436. 436.  
  437. 437.  
  438. 438.  
  439. 439.  plan
  440. 440.  =
  441. 441.  
  442. 442.  Plan.basic();
  443. 443.  
  444. 444.  else
  445. 445.  
  446. 446.  
  447. 447.  
  448. 448.  
  449. 449.  
  450. 450.  
  451. 451.  plan
  452. 452.  =
  453. 453.  user.getPlan();
  454. 454.  
  455. 455.   plan
  456. 456.  =
  457. 457.  user.getPlan();
  458. 458.  
  459. 459.   i nt er f ace
  460. 460.   User +get Pl an( ) Nu l l Us e r +get Pl an() r et ur n Pl an. basi c(); 22  
  461. 461. 왜 리팩터링을 하는가? 리팩터링이란?
  462. 462.   §  설계를
  463. 463.  개선
  464. 464.  하기
  465. 465.  위해
  466. 466.   §  코드를
  467. 467.  이해하기
  468. 468.  쉽게
  469. 469.  만들기
  470. 470.  위해
  471. 471.   §  버그를
  472. 472.  찾아내기
  473. 473.  위해
  474. 474.   §  좀
  475. 475.  더
  476. 476.  빠르게
  477. 477.  프로그래밍
  478. 478.  할
  479. 479.  수
  480. 480.  있도록
  481. 481.   개발자와
  482. 482.  관리자에게
  483. 483.  어떤
  484. 484.  하나의
  485. 485.  대안
  486. 486.  될
  487. 487.  수
  488. 488.  있는가?
  489. 489.   23  
  490. 490. 구성요소 리팩터링이란?
  491. 491.  §  나쁜냄새(Smells)
  492. 492.  §  카탈로그(Catalogue)
  493. 493.  §  자동화된
  494. 494.  단위
  495. 495.  테스트(Automated
  496. 496.  Unit
  497. 497.  Test)
  498. 498.   24  
  499. 499. 문제점 리팩터링이란?
  500. 500.   §  데이터
  501. 501.  베이스
  502. 502.   §  인터페이스
  503. 503.  변경
  504. 504.   §  프로젝트
  505. 505.  데드라인
  506. 506.   25  
  507. 507. 언제 리팩터링할 것인가? 리팩터링이란?
  508. 508.   §  The
  509. 509.  Rule
  510. 510.  of
  511. 511.  Three
  512. 512.  ­–
  513. 513.  DRY(Don’t
  514. 514.  Repeat
  515. 515.  Yourself)원칙
  516. 516.   §  기능을
  517. 517.  추가할
  518. 518.  때
  519. 519.   §  버그를
  520. 520.  수정
  521. 521.  할
  522. 522.  때
  523. 523.   §  코드
  524. 524.  리뷰를
  525. 525.  할
  526. 526.  때
  527. 527.   26  
  528. 528. 성능의 문제 리팩터링이란?
  529. 529.   §  소프트웨어를
  530. 530.  더
  531. 531.  이해하기
  532. 532.  쉽게
  533. 533.  만들기
  534. 534.  위해
  535. 535.  수정을
  536. 536.  하는데,
  537. 537.  이 때
  538. 538.  종종
  539. 539.  프로그램을
  540. 540.  더
  541. 541.  느리게
  542. 542.  작동하도록
  543. 543.  하는
  544. 544.  원인이
  545. 545.  될
  546. 546.  수
  547. 547.  있 다.
  548. 548.   § 
  549. 549.  잘
  550. 550.  분해된
  551. 551.  코드와
  552. 552.  프로그램이
  553. 553.  주는
  554. 554.  이점
  555. 555.   ­–  새로운
  556. 556.  기능
  557. 557.  추가가
  558. 558.  쉬워
  559. 559.  퍼포먼스
  560. 560.  튜닝에만
  561. 561.  집중하는
  562. 562.  것이
  563. 563.  가능하다.
  564. 564.   ­–  세밀한
  565. 565.  분석이
  566. 566.  가능하다.
  567. 567.   27  
  568. 568. 안전한 리팩터링의 3대 요소 리팩터링이란?
  569. 569.   §  백업을
  570. 570.  만들어
  571. 571.  놓거나
  572. 572.  형상 관리를
  573. 573.  사용한다.
  574. 574.   §  검증된
  575. 575.  리팩터링
  576. 576.  도구를
  577. 577.  사 용한다.
  578. 578.   §  자동화된
  579. 579.  단위
  580. 580.  테스트
  581. 581.  케이 스를
  582. 582.  만들어
  583. 583.  놓는다.
  584. 584.   28  
  585. 585. 리팩터링 도구 리팩터링이란?
  586. 586.   §  이클립스의
  587. 587.  리팩터링
  588. 588.  도구
  589. 589.   29  
  590. 590. 3.테스트 코드 30  
  591. 591. 단위 테스트 Automated
  592. 592.  Unit
  593. 593.  Test 테스트
  594. 594.  코드
  595. 595.   §  “리팩터링
  596. 596.  작업의
  597. 597.  필수
  598. 598.  조건은
  599. 599.  사전에
  600. 600.  탄탄한
  601. 601.  테스트를
  602. 602.  만들어
  603. 603.   놓는
  604. 604.  것이다.”
  605. 605.  ­–
  606. 606.  마틴
  607. 607.  파울러
  608. 608.   §  가장
  609. 609.  대표적인
  610. 610.  자동화된
  611. 611.  단위
  612. 612.  테스트
  613. 613.  프레임워크
  614. 614.  
  615. 615.   =
  616. 616.  JUnit
  617. 617.   31  
  618. 618. 테스트 주도 개발 Test-Driven
  619. 619.  Development 테스트
  620. 620.  코드
  621. 621.   §  자동화된
  622. 622.  단위
  623. 623.  테스트
  624. 624.  케이스를
  625. 625.  만들어
  626. 626.  내는
  627. 627.  가장
  628. 628.  훌륭한
  629. 629.  방식
  630. 630.   §  “프로그램을
  631. 631.  작성하기
  632. 632.  전에
  633. 633.  자동화된
  634. 634.  테스트
  635. 635.  코드를
  636. 636.  먼저
  637. 637.  작성한다.”
  638. 638.   §  간결한
  639. 639.  설계와
  640. 640.  고품질
  641. 641.  모듈을
  642. 642.  만들어
  643. 643.  내는
  644. 644.  기법
  645. 645.   32  
  646. 646. TDD 절차 테스트
  647. 647.  코드
  648. 648.  
  649. 649.   질문
  650. 650.  Ask
  651. 651.   테스트를 작성함으로써 시스템에 질문한다. (FAIL) 응답
  652. 652.  Respond
  653. 653.   테스트를 통과하는 코드를 작성해서 질문에 대답한다. (PASS ) 정련
  654. 654.  Refine
  655. 655.   아이디어를 통합하고, 불필요한 것은 제거하고, 모호한 것은 명확히 해서 대답을 정제한다. (REFACTORING) 반복
  656. 656.  Repeat
  657. 657.   다음 질문을 통해 대화를 계속 진행한다. 33  
  658. 658. 4.리팩터링과 설계Refactoring and Design 34  
  659. 659. 소프트웨어 비용 리팩터링과
  660. 660.  설계
  661. 661.   §  전체
  662. 662.  비용
  663. 663.  =
  664. 664.  개발
  665. 665.  비용
  666. 666.  +
  667. 667.  유지
  668. 668.  비용
  669. 669.   §  유지
  670. 670.  비용
  671. 671.  =
  672. 672.  이해
  673. 673.  비용
  674. 674.  +
  675. 675.  수정
  676. 676.  비용
  677. 677.  +
  678. 678.  테스트
  679. 679.  비용
  680. 680.  
  681. 681.   +
  682. 682.  설치
  683. 683.  비용
  684. 684.   35  
  685. 685. 사전 설계 Upfront
  686. 686.  Design 리팩터링과
  687. 687.  설계
  688. 688.   §  사전
  689. 689.  설계
  690. 690.   ­–  재
  691. 691.  작업
  692. 692.  비용을
  693. 693.  줄이기
  694. 694.  위해서
  695. 695.  SW구조에
  696. 696.  대해
  697. 697.  사전에
  698. 698.  고민을
  699. 699.  하는
  700. 700.  방식
  701. 701.   ­–  요구사항
  702. 702.  변경이
  703. 703.  일어날
  704. 704.  부분에
  705. 705.  대해서
  706. 706.  미리
  707. 707.  예측한다.
  708. 708.   ­–  좀
  709. 709.  더
  710. 710.  유연한
  711. 711.  구조의
  712. 712.  설계를
  713. 713.  지향한다.
  714. 714.   §  유연한
  715. 715.  구조로
  716. 716.  솔루션을
  717. 717.  구축할
  718. 718.  때의
  719. 719.  문제점
  720. 720.   ­–  다양한
  721. 721.  유연성을
  722. 722.  가진다는
  723. 723.  건
  724. 724.  다른
  725. 725.  의미의
  726. 726.  비용으로
  727. 727.  이어진다.
  728. 728.   ­–  좀
  729. 729.  더
  730. 730.  복잡한
  731. 731.  구조가
  732. 732.  되기
  733. 733.  쉽고,
  734. 734.  일반적으로
  735. 735.  유지관리하기
  736. 736.  더
  737. 737.  어려워진다.
  738. 738.   ­–  그리고
  739. 739.  미래를
  740. 740.  정확히
  741. 741.  예측하기는
  742. 742.  것은
  743. 743.  대부분의
  744. 744.  경우
  745. 745.  불가능하다.
  746. 746.   36  
  747. 747. 리팩터링과 설계 리팩터링과
  748. 748.  설계
  749. 749.  
  750. 750.   §  리팩터링은
  751. 751.  일부
  752. 752.  관점이
  753. 753.  사전설계(upfront
  754. 754.  design)와
  755. 755.  충돌하 지만
  756. 756.  결과적으로
  757. 757.  리팩터링은
  758. 758.  디자인을
  759. 759.  보완한다.
  760. 760.  
  761. 761.   ­–  리팩터링과
  762. 762.  사전
  763. 763.  설계는
  764. 764.  강조점이
  765. 765.  다르다.
  766. 766.  완벽한
  767. 767.  솔루션을
  768. 768.  찾는
  769. 769.  것이
  770. 770.   아니라
  771. 771.  납득할만한
  772. 772.  수준(reasonable)의
  773. 773.  솔루션을
  774. 774.  찾는다.
  775. 775.   ­–  유연성
  776. 776.  강조보다
  777. 777.  설계를
  778. 778.  간결하게
  779. 779.  만드는
  780. 780.  쪽에
  781. 781.  좀
  782. 782.  더
  783. 783.  관심을
  784. 784.  둔다.
  785. 785.   ­–  간결한
  786. 786.  시스템을
  787. 787.  좀
  788. 788.  더
  789. 789.  복잡한
  790. 790.  유연한
  791. 791.  시스템으로
  792. 792.  만드는
  793. 793.  것은
  794. 794.  매우
  795. 795.  쉽지 만,
  796. 796.  그
  797. 797.  반대는
  798. 798.  훨씬
  799. 799.  어렵기
  800. 800.  때문이다.
  801. 801.   37  
  802. 802. 5.코드 속의 나쁜 냄새 Smells 38  
  803. 803. 직관 Intuition Smells
  804. 804.    1997년 5월 11일    뉴욕의 에퀴터블 센터에서는 IBM이 개발한 수퍼 컴퓨터 딥 블루(Deep blue)와 세계 체스  챔피언 ‘게리 카스파로프(Kasparov)’간의 6 차전 마지 막 경기가 진행되고 있었다.    『딥 블루』는 2m가 채 안되는 키에 1.4 톤이나 나가는 몸무게를 가지 고 있으며 중국인 과학자 츄펑슝 박사 외에 6명의 IBM사 최고 과학자들 이 지난 8년 동안 32개의 마이크로 프로세서와 512개의 특수 체스 칩을 장착해서 만들은 2백만 달러 상당의 대형 병렬 수퍼 컴퓨터다. 『딥』은 오로지 『인간을 이겨라』는 특명을 받고 태어난 역사상 최고의 기계로써 1초당 2억번의 행마(行馬)를 검토해가며 장기를 둘 수 있는 능력이 있으 며, 지난 백 년 동안에 개최되었던 주요 체스 대국의 기보가 모두 입력되 어 있다. 더욱이 슈 박사 팀은 지난번의 패배를 설욕하기 위해 연산 능력 을 2배로 보강했으며 미국의 체스 챔피언 조엘 벤저민과 세계 유명 체스 선수들의 조언을 추가로 저장하였다. 특히  슈 박사 팀은 어떠한 경우에도 상대수의 변화에 따라 새로운 수를 개발하여 대처할 수 있는 자기 조정기 능의 유연성을 강화시키는데 초점을 두었다고 한다. 따라서『딥』은 그야 말로 체스에 있어서는 『살아있는 지능을 가지고 있는 컴퓨터』라고 할 수 있다 지난 5차전까지 이 두 대국자간의 전적은 1승 3무 1패로 무승부. - New York Times 1997.5 39  
  805. 805. 코드 속의 나쁜 냄새 #1 Smells
  806. 806.   “나쁜 냄새가 난다면, 고쳐라!” – 켄트벡 ­–  중복코드(Duplicate
  807. 807.  code)
  808. 808.   ­–  긴
  809. 809.  메소드(Long
  810. 810.  Method)
  811. 811.   ­–  거대한
  812. 812.  클래스(Large
  813. 813.  class)
  814. 814.   ­–  긴
  815. 815.  파라미터
  816. 816.  리스트(Long
  817. 817.  Parameter
  818. 818.  List)
  819. 819.   ­–  확산적
  820. 820.  변경(Divergent
  821. 821.  Change)
  822. 822.   ­–  산탄총
  823. 823.  수술(Shotgun
  824. 824.  Surgery)
  825. 825.   ­–  기능
  826. 826.  욕심(Feature
  827. 827.  Envy)
  828. 828.   ­–  데이터
  829. 829.  덩어리(Data
  830. 830.  Clumps)
  831. 831.   ­–  기본형에
  832. 832.  대한
  833. 833.  강박(Primitive
  834. 834.  Obsession)
  835. 835.   ­–  스위치
  836. 836.  구문(Switch
  837. 837.  Statements)
  838. 838.   ­–  병렬
  839. 839.  상속
  840. 840.  구조(Parallel
  841. 841.  Inheritance
  842. 842.  Hierarchies)

×