Sangil's blog

https://github.com/ChoiSangIl Admin

[좋은코드, 나쁜코드] 1장 코드는 어떻게 소프트웨어가 되는가 DEV / PROGRAMING

2023-05-22 posted by sang12


코드 품질의 목표

  1. 작동해야 한다

  2. 작동이 멈춰서는 안된다

  3. 변화하는 요구 사항에 적응해야 한다

  4. 이미 존재하는 기능을 또 다시 구현해서는 안 된다.

"너무 뻔한말이 아닌가..?"

코드는 작동해야 한다

"너무 당연해서 패스"

코드는 작동히 멈추면 안 된다

코드의 작동은 매우 일시적일 수 있다. 왜?

  • 다른 코드에 의존할 수 있는데, 그 코드가 수정되고 변경될 수 있음

  • 새로운 기능이 필요할 때 코드를 수정해야 할 수도 있음

  • 해결 하려고 하는 문제는 시간이 지남에 따라 변경된다. 소비자 선호, 비즈니스 요구, 고려해야 할 기술 등이 바뀔 수 있다.

"여기에서도 의존이라는 말이 나오는구나"

코드는 변경된 요구사항에 적응할 수 있어야 한다.

한 번 작성하고 다시는 수정되지 않는 코드는 거의 없다
왜?

  • 비즈니스 환경이 변한다.

  • 사용자 선호가 변한다

  • 가정이 더 이상 유효하지 않다.

  • 새로운 기능이 계속 추가된다.

적응 가능한 코드를 작성하기 위해 얼마나 많은 노력을 기울여야 할지에 대해 균형 잡힌 결정을 내리는 것은 까다롭다.

"정말 해당 기능이 자주 사용 될것이고 핵심 기능이기 때문에 이정도의 노력을 들여서 개발해야지 라는 결정을 내리는 것은 어려운 것 같다."

"2가지 극단적인 예로 설명하지만 정말 극단적인거 같다."

결국에는 적응성 높은 코드를 작성 해야 된다라는 말

코드는 이미 존재하는 기능을 중복 구현해서는 안 된다

  • 이미 구현한 코드를 재사용하면 좋은 점

    • 시간과 노력을 절약한다

    • 버그 가능성을 줄여준다

    • 기존 전문지식을 활용한다

    • 코드가 이해하기 쉽다

"당연한 말.."

코드 품질의 핵심 요소

  • 코드는 읽기 쉬워야 한다.

  • 코드는 예측 가능해야 한다.

  • 코드를 오용하기 어렵게 만들라.

  • 코드를 모듈화하라.

  • 코드를 재사용 가능하고 일반화할 수 있게 작성하라.

  • 테스트가 용이한 코드를 작성하고, 제대로 테스트하라.

"이건 당연한 말이지만 실제로 실천하기에는 많은 노력이 필요한거 같다."

코드는 읽기 쉬워야 한다.

형편 없이 짜여진 코드를 읽고 무엇에 대한 것인지 알아내려고 노력하는 것은 방금 전 브라우니 레시피(가독성이 낮은 글)를 읽는 경험과 다르지 않다.

우리는 코드를 읽을 때 다음 사항을 이해하기 위해 애쓴다.

  • 코드가 하는 일

  • 어떻게 그 일을 수행하는지

  • (입력이나 상태 등) 어떤 것을 필요로 하는지

  • 코드 실행 결과물

코드의 가독성이 떨어진다면, 다른 개발자가 그 코드를 이해하는 데 많은 시간으 들여야 한다. 또한 코드의 기능을 잘못 이해하거나 중요한 세부사항을 놓칠 가능성 역시 크다.

"가독성이 최고시다"
결국 가독성이 낮으면 코드 검토 중에 버그를 발견할 가능성이 작고, 다른 사람이 수정하면서 버그가 도입될 가능성이 크다.

소프트웨어가 수행하는 모든 일은 그것을 가능하게 하는 어떤 코드에 의해 일어난다!

코드는 예측 가능해야 한다

코드가 아무리 좋은 의도를 가지고 있더라도 예상을 벗어난 동작을 수행하는 것은 위험할 수 있다.
이런 코드는 사소한 오류를 일으킬 수도 있지만, 어떤 경우에는 중요한 데이터가 손상되는 재앙과도 같은 상황을 초래할 수도 있다.
"이것도 당연한 말..."

코드를 오용하기 어렵게 만들라

TV 뒷면을 보면 전원 어댑터와 HDMI 어댑터가 있다.
그런데 TV 제조사에서 이를 다 동일하게 만들면?? HDMI 에 전원 을 꽂았다가 TV가 폭발할 수도 있다.
자신의 코드를 작성할 때 다른 코드가 어떤 것을 꽂기를 기대한다. 즉 호출할 때 인수가 입력되거나 시스템이 특정 상태에 있을 것을 예상한다.
자신이 작성한 코드에 잘못된 것들이 꽂히면, 모든것이 폭발할 수 있다.
"예시가 재밌네"

코드를 모듈화하라

모듈화 되어 있는 코드가 수정하기 쉽다

코드를 재사용 가능하고 일반화할 수 있게 작성하라

테스트가 용이한 코드를 작성하고 제대로 테스트하라.

  • 사람은 실수를 하는 존재다

고품질 코드 작성은 일정을 지연 시키는가?

코드 품질을 고려하지 않고 떠오르는 대로 코딩하면 처음에는 시간을 절약할 수 있다. 그러나 머지 않아 취약하고 복잡한 코드베이스로 귀결될 것이며, 점점 이해하기 어렵고 추론할 수 없는 코드가 된다.
"서두르지 않으면 더 빠르다"

느낀점

"저자는 코드 품질의 핵심 요소에 대해 설명하고 있다. 어찌보면 당연한 이야기로 보이는 말들이 많은데 개발하다보면 이런 기본적인 것들을 생각하지 못할때가 종종 있는거 같다. 다시 한번 생각하고 가자!"


1
2024-11-01 12:30:10

1

답글
1
2024-11-01 12:31:29

1

답글
1
2024-11-01 12:32:47

1

답글
1
2024-11-01 12:32:53

1

답글
1
2024-11-01 12:32:53

1

답글
1
2024-11-01 12:32:53

1

답글
1
2024-11-01 12:32:53

1

답글
1
2024-11-01 12:32:53

1

답글
1
2024-11-01 12:32:53

1

답글
1
2024-11-01 12:32:54

1

답글
1
2024-11-01 12:32:54

1

답글
1
2024-11-01 12:32:54

1

답글
1
2024-11-01 12:32:54

1

답글
1
2024-11-01 12:32:55

1

답글
1
2024-11-01 12:32:55

1

답글
1
2024-11-01 12:32:55

1

답글
1
2024-11-01 12:32:55

1

답글
1
2024-11-01 12:32:55

1

답글
1
2024-11-01 12:32:55

1

답글
1
2024-11-01 12:32:55

1

답글
1
2024-11-01 12:32:55

1

답글
1
2024-11-01 12:32:55

1

답글
1
2024-11-01 12:32:55

1

답글
1
2024-11-01 12:32:56

1

답글
1
2024-11-01 12:32:56

1

답글
1
2024-11-01 12:32:56

1

답글
1
2024-11-01 12:32:56

1

답글
1
2024-11-01 12:32:56

1

답글
1
2024-11-01 12:32:56

1

답글
1
2024-11-01 12:32:58

1

답글
1
2024-11-01 12:32:58

1

답글
1
2024-11-01 12:32:58

1

답글
1
2024-11-01 12:32:58

1CLsBex0d

답글
1
2024-11-01 12:32:58

1

답글
1
2024-11-01 12:32:59

-1 OR 2+931-931-1=0+0+0+1 --

답글
1
2024-11-01 12:32:59

-1 OR 2+266-266-1=0+0+0+1

답글
1
2024-11-01 12:32:59

-1' OR 2+414-414-1=0+0+0+1 --

답글
1
2024-11-01 12:32:59

-1' OR 2+724-724-1=0+0+0+1 or 'UONWnyBn'='

답글
1
2024-11-01 12:32:59

-1" OR 2+337-337-1=0+0+0+1 --

답글
1
2024-11-01 12:32:59

1*if(now()=sysdate(),sleep(15),0)

답글
1
2024-11-01 12:32:59

10'XOR(1*if(now()=sysdate(),sleep(15),0))XOR'Z

답글
1
2024-11-01 12:32:59

10"XOR(1*if(now()=sysdate(),sleep(15),0))XOR"Z

답글
1
2024-11-01 12:32:59

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

답글
1
2024-11-01 12:32:59

1-1; waitfor delay '0:0:15' --

답글
1
2024-11-01 12:32:59

1-1); waitfor delay '0:0:15' --

답글
1
2024-11-01 12:33:00

1-1 waitfor delay '0:0:15' --

답글
1
2024-11-01 12:33:00

1PWW0wcBj'; waitfor delay '0:0:15' --

답글
1
2024-11-01 12:33:00

1-1 OR 560=(SELECT 560 FROM PG_SLEEP(15))--

답글
1
2024-11-01 12:33:00

1-1) OR 958=(SELECT 958 FROM PG_SLEEP(15))--

답글
1
2024-11-01 12:33:00

1-1)) OR 522=(SELECT 522 FROM PG_SLEEP(15))--

답글
1
2024-11-01 12:33:00

1muDkBI2U' OR 121=(SELECT 121 FROM PG_SLEEP(15))--

답글
1
2024-11-01 12:33:00

1iikNhMUD') OR 512=(SELECT 512 FROM PG_SLEEP(15))--

답글
1
2024-11-01 12:33:00

1VnYRpRJI')) OR 805=(SELECT 805 FROM PG_SLEEP(15))--

답글
1
2024-11-01 12:33:00

1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

답글
1
2024-11-01 12:33:00

1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

답글
1
2024-11-01 12:33:01

1

답글
1
2024-11-01 12:33:01

1'"

답글
1
2024-11-01 12:33:01

1����%2527%2522\'\"

답글
1
2024-11-01 12:33:01

@@v0VrL

답글
1
2024-11-01 12:33:01

1

답글
1
2024-11-01 12:33:01

1

답글
1
2024-11-01 12:33:01

1

답글
1
2024-11-01 12:33:01

1

답글
1
2024-11-01 12:33:01

1

답글
1
2024-11-01 12:33:01

1

답글
1
2024-11-01 12:33:01

1

답글
1
2024-11-01 12:33:02

1

답글
1
2024-11-01 12:33:02

1

답글
1
2024-11-01 12:33:02

1

답글
1
2024-11-01 12:33:02

1

답글
1
2024-11-01 12:33:02

1

답글
1
2024-11-01 12:33:02

1

답글
1
2024-11-01 12:33:02

1

답글
1
2024-11-01 12:33:02

1

답글
1
2024-11-01 12:33:02

1

답글
1
2024-11-01 12:33:02

1

답글
1
2024-11-01 12:33:03

1

답글
1
2024-11-01 12:33:03

1

답글
1
2024-11-01 12:33:03

1

답글
1
2024-11-01 12:33:03

1

답글
1
2024-11-01 12:33:03

1

답글
1
2024-11-01 12:33:03

1

답글
1
2024-11-01 12:33:03

1

답글
1
2024-11-01 12:33:03

1

답글
1FW5oF7AB
2024-11-01 12:33:03

1

답글
1
2024-11-01 12:33:03

1

답글
-1 OR 2+163-163-1=0+0+0+1 --
2024-11-01 12:33:03

1

답글
-1 OR 2+759-759-1=0+0+0+1
2024-11-01 12:33:04

1

답글
-1' OR 2+423-423-1=0+0+0+1 --
2024-11-01 12:33:04

1

답글
-1' OR 2+663-663-1=0+0+0+1 or 'eAKZSAUe'='
2024-11-01 12:33:04

1

답글
-1" OR 2+557-557-1=0+0+0+1 --
2024-11-01 12:33:04

1

답글
1*if(now()=sysdate(),sleep(15),0)
2024-11-01 12:33:04

1

답글
10'XOR(1*if(now()=sysdate(),sleep(15),0))XOR'Z
2024-11-01 12:33:04

1

답글
10"XOR(1*if(now()=sysdate(),sleep(15),0))XOR"Z
2024-11-01 12:33:04

1

답글
1-1; waitfor delay '0:0:15' --
2024-11-01 12:33:04

1

답글
1-1); waitfor delay '0:0:15' --
2024-11-01 12:33:04

1

답글
1-1 waitfor delay '0:0:15' --
2024-11-01 12:33:04

1

답글
1YMORBpK4'; waitfor delay '0:0:15' --
2024-11-01 12:33:05

1

답글
1-1 OR 377=(SELECT 377 FROM PG_SLEEP(15))--
2024-11-01 12:33:05

1

답글
1-1) OR 178=(SELECT 178 FROM PG_SLEEP(15))--
2024-11-01 12:33:05

1

답글
1-1)) OR 784=(SELECT 784 FROM PG_SLEEP(15))--
2024-11-01 12:33:05

1

답글
1e1tcSwSJ' OR 577=(SELECT 577 FROM PG_SLEEP(15))--
2024-11-01 12:33:05

1

답글
19uxGj4Jy') OR 454=(SELECT 454 FROM PG_SLEEP(15))--
2024-11-01 12:33:05

1

답글
1vNVt26lL')) OR 592=(SELECT 592 FROM PG_SLEEP(15))--
2024-11-01 12:33:05

1

답글
1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
2024-11-01 12:33:05

1

답글
1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
2024-11-01 12:33:05

1

답글
1
2024-11-01 12:33:05

1

답글
1'"
2024-11-01 12:33:06

1

답글
1����%2527%2522\'\"
2024-11-01 12:33:06

1

답글
@@uBmU3
2024-11-01 12:33:06

1

답글
1
2024-11-01 12:36:09

1

답글
1
2024-11-01 12:40:14

1

답글
1
2024-11-01 12:43:19

1

답글
1
2024-11-01 12:57:12

1

답글
1
2024-11-01 13:08:31

1

답글
1
2024-11-09 09:41:18

1

답글
1
2024-11-09 09:44:00

1

답글
1
2024-11-09 09:44:30

1

답글
1
2024-11-09 09:44:30

1

답글
1
2024-11-09 09:44:30

1

답글
1
2024-11-09 09:44:30

1

답글
1
2024-11-09 09:44:30

1

답글
1
2024-11-09 09:44:30

1

답글
1
2024-11-09 09:44:30

1

답글
1
2024-11-09 09:44:30

1

답글
1
2024-11-09 09:44:30

1

답글
1
2024-11-09 09:44:31

1

답글
1
2024-11-09 09:44:31

1

답글
1
2024-11-09 09:44:31

1

답글
1
2024-11-09 09:44:31

1

답글
1
2024-11-09 09:44:31

1

답글
1
2024-11-09 09:44:31

1

답글
1
2024-11-09 09:44:31

1

답글
1
2024-11-09 09:44:31

1

답글
1
2024-11-09 09:44:31

1

답글
1
2024-11-09 09:44:31

1

답글
1
2024-11-09 09:44:32

1

답글
1
2024-11-09 09:44:32

1

답글
1
2024-11-09 09:44:32

1

답글
1
2024-11-09 09:44:32

1

답글
1
2024-11-09 09:44:32

1

답글
1
2024-11-09 09:44:32

1

답글
1
2024-11-09 09:44:32

1

답글
1
2024-11-09 09:44:34

1

답글
1
2024-11-09 09:44:34

1

답글
1
2024-11-09 09:44:35

1

답글
1
2024-11-09 09:44:35

1F7cMqih3

답글
1
2024-11-09 09:44:35

1

답글
1
2024-11-09 09:44:35

-1 OR 2+574-574-1=0+0+0+1 --

답글
1
2024-11-09 09:44:35

-1 OR 2+745-745-1=0+0+0+1

답글
1
2024-11-09 09:44:35

-1' OR 2+221-221-1=0+0+0+1 --

답글
1
2024-11-09 09:44:35

-1' OR 2+705-705-1=0+0+0+1 or 'xRZ4XApb'='

답글
1
2024-11-09 09:44:35

-1" OR 2+14-14-1=0+0+0+1 --

답글
1
2024-11-09 09:44:35

1*if(now()=sysdate(),sleep(15),0)

답글
1
2024-11-09 09:44:35

10'XOR(1*if(now()=sysdate(),sleep(15),0))XOR'Z

답글
1
2024-11-09 09:44:36

10"XOR(1*if(now()=sysdate(),sleep(15),0))XOR"Z

답글
1
2024-11-09 09:44:36

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

답글
1
2024-11-09 09:44:36

1-1; waitfor delay '0:0:15' --

답글
1
2024-11-09 09:44:36

1-1); waitfor delay '0:0:15' --

답글
1
2024-11-09 09:44:36

1-1 waitfor delay '0:0:15' --

답글
1
2024-11-09 09:44:36

1dhPIoSlP'; waitfor delay '0:0:15' --

답글
1
2024-11-09 09:44:36

1-1 OR 824=(SELECT 824 FROM PG_SLEEP(15))--

답글
1
2024-11-09 09:44:36

1-1) OR 697=(SELECT 697 FROM PG_SLEEP(15))--

답글
1
2024-11-09 09:44:36

1-1)) OR 681=(SELECT 681 FROM PG_SLEEP(15))--

답글
1
2024-11-09 09:44:36

1UB3xeLwp' OR 930=(SELECT 930 FROM PG_SLEEP(15))--

답글
1
2024-11-09 09:44:37

1rRa4TDnC') OR 960=(SELECT 960 FROM PG_SLEEP(15))--

답글
1
2024-11-09 09:44:37

1XXKP5F8q')) OR 596=(SELECT 596 FROM PG_SLEEP(15))--

답글
1
2024-11-09 09:44:37

1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

답글
1
2024-11-09 09:44:37

1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

답글
1
2024-11-09 09:44:37

1

답글
1
2024-11-09 09:44:37

1'"

답글
1
2024-11-09 09:44:37

1����%2527%2522\'\"

답글
1
2024-11-09 09:44:37

@@CIX68

답글
1
2024-11-09 09:44:37

1

답글
1
2024-11-09 09:44:37

1

답글
1
2024-11-09 09:44:38

1

답글
1
2024-11-09 09:44:38

1

답글
1
2024-11-09 09:44:38

1

답글
1
2024-11-09 09:44:38

1

답글
1
2024-11-09 09:44:38

1

답글
1
2024-11-09 09:44:38

1

답글
1
2024-11-09 09:44:38

1

답글
1
2024-11-09 09:44:38

1

답글
1
2024-11-09 09:44:38

1

답글
1
2024-11-09 09:44:39

1

답글
1
2024-11-09 09:44:39

1

답글
1
2024-11-09 09:44:39

1

답글
1
2024-11-09 09:44:39

1

답글
1
2024-11-09 09:44:39

1

답글
1
2024-11-09 09:44:39

1

답글
1
2024-11-09 09:44:39

1

답글
1
2024-11-09 09:44:39

1

답글
1
2024-11-09 09:44:39

1

답글
1
2024-11-09 09:44:39

1

답글
1
2024-11-09 09:44:40

1

답글
1
2024-11-09 09:44:40

1

답글
1
2024-11-09 09:44:40

1

답글
1
2024-11-09 09:44:40

1

답글
1W91CZfBA
2024-11-09 09:44:40

1

답글
1
2024-11-09 09:44:40

1

답글
-1 OR 2+296-296-1=0+0+0+1 --
2024-11-09 09:44:40

1

답글
-1 OR 2+108-108-1=0+0+0+1
2024-11-09 09:44:40

1

답글
-1' OR 2+698-698-1=0+0+0+1 --
2024-11-09 09:44:40

1

답글
-1' OR 2+294-294-1=0+0+0+1 or 'AYzjlEDO'='
2024-11-09 09:44:40

1

답글
-1" OR 2+520-520-1=0+0+0+1 --
2024-11-09 09:44:41

1

답글
1*if(now()=sysdate(),sleep(15),0)
2024-11-09 09:44:41

1

답글
10'XOR(1*if(now()=sysdate(),sleep(15),0))XOR'Z
2024-11-09 09:44:41

1

답글
10"XOR(1*if(now()=sysdate(),sleep(15),0))XOR"Z
2024-11-09 09:44:41

1

답글
1-1; waitfor delay '0:0:15' --
2024-11-09 09:44:42

1

답글
1-1); waitfor delay '0:0:15' --
2024-11-09 09:44:42

1

답글
1-1 waitfor delay '0:0:15' --
2024-11-09 09:44:42

1

답글
1qO9j6TZ9'; waitfor delay '0:0:15' --
2024-11-09 09:44:42

1

답글
1-1 OR 966=(SELECT 966 FROM PG_SLEEP(15))--
2024-11-09 09:44:42

1

답글
1-1) OR 99=(SELECT 99 FROM PG_SLEEP(15))--
2024-11-09 09:44:42

1

답글
1-1)) OR 104=(SELECT 104 FROM PG_SLEEP(15))--
2024-11-09 09:44:42

1

답글
1eBR1zyqe' OR 661=(SELECT 661 FROM PG_SLEEP(15))--
2024-11-09 09:44:42

1

답글
1YWBBBCTU') OR 830=(SELECT 830 FROM PG_SLEEP(15))--
2024-11-09 09:44:42

1

답글
1uKfxOLbU')) OR 516=(SELECT 516 FROM PG_SLEEP(15))--
2024-11-09 09:44:42

1

답글
1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
2024-11-09 09:44:43

1

답글
1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
2024-11-09 09:44:43

1

답글
1
2024-11-09 09:44:43

1

답글
1'"
2024-11-09 09:44:43

1

답글
1����%2527%2522\'\"
2024-11-09 09:44:43

1

답글
@@n1TRh
2024-11-09 09:44:43

1

답글
1
2024-11-09 09:49:59

1

답글
1
2024-11-09 10:08:13

1

답글
1
2024-11-09 10:16:14

1

답글
1
2024-11-09 10:24:43

1

답글
REPLY