본문 바로가기

Book Review

[Clean Code] 3장. 함수

TIL (Today I Learned)

2022.02.23

 

오늘 읽은 범위

3장. 함수

 

 

책에서 기억하고 싶은 내용을 써보세요.

  • 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. (p.44)
  • 근본 개념과 세부사항을 뒤섞기 시작하면, 깨어진 창문처럼 사람들이 함수에 세부사항을 점점 더 추가한다. (p.46)
  • 이름이 길어도 괜찮다. 겁먹을 필요없다. 길고 서술적인 이름이 짧고 어려운 이름보다 좋다. 길고 서술적인 이름이 길고 서술적인 주석보다 좋다. (p.49)

Circle makeCircle(double x, double y, double radius);
Circle makeCircle(Point center, double radius);

객체를 생성해 인수를 줄이는 방법이 눈속임이라 여겨질지 모르지만 그렇지 않다. 위 예제에서 x와 y를 묶었듯이 변수를 묶어 넘기려면 이름을 붙여야 하므로 결국은 개념을 표현하게 된다. (p.53)

 


public class UserValidator {
  private Cryptographer cryptographer;
  
  public boolean checkPassword(String userName, String password) {
    User user = UserGateway.findByName(userName);
    if (user != User.Null) {
      String codedPhrase = user.getPhraseEncodedByPassword();
      String phrase = cryptographer.decrypt(codedPhrase, password);
      if ("Valid Password".equals(phrase)) {
        Session.initialize();
        return true;
      }
    }
    return false;
  }
}

여기서, 함수가 일으키는 부수 효과는 Session.initialize() 호출이다. checkPassword 함수는 이름 그대로 암호를 확인한다. 이름만 봐서는 세션을 초기화한다는 사실이 드러나지 않는다. 그래서 함수 이름만 보고 함수를 호출하는 사용자는 사용자를 인증하면서 기존 세션 정보를 지워버릴 위험에 처한다. (p. 55)


  • 어쩌면 중복은 소프트웨어에서 모든 악의 근원이다. ··· 객체 지향 프로그래밍은 코드를 부모 클래스로 몰아 중복을 없앤다, 구조적 프로그래밍, AOP, COP 모두 어떤 면에서 중복 제거 전략이다. 하위 루틴을 발명한 이래로 소프트웨어 개발에서 지금까지 일어난 혁신은 소스 코드에서 중복을 제거하려는 지속적인 노력으로 보인다. (p.60)
  • 재귀라는 기교로 각 동작은 바로 그 도메인에 특화된 언어를 사용해 자신만의 이야기를 풀어간다. (p.62)

 

 

 

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

오늘 범위를 읽으면서 한 가지 명확해진 것이 있다. 소프트웨어를 짜는 행위는 글짓기와 동일하다는 것.
그동안 개발을 하면서 해당 코드를 작성하는 프로그래머들 간에만 소통이 이루어지면 되는 것이 아닌가 생각했다. 유지/보수도 우리 팀 안에서만 이루어졌기 때문에 함수는 자꾸만 복잡해졌고 인수를 몇 개고 늘려나갔다. 함수 안에 중첩문이 몇 개 있든 잘 돌아가기만 하면 되는 거 아닌가, 여러 복잡한 기술들을 적용해 함수의 덩치를 키워나간 것에 자부심마저 느꼈다. 참 부끄럽다.
아무리 장황한 문장과 적확한 단어들을 사용한 글이어도 작가 외에는 글을 이해하기조차 힘들다면, 그 글이 잘 쓰여졌다고 할 수 있는가. 목표가 생겼다. 깃헙에 프로젝트를 올릴 때, 처음 내 코드를 보는 개발자들도 쉽게 읽어나갈 수 있는 좋은 코드를 쓰고 싶다. (또 한가지 목표, nodejs만 썼었는데 java spring으로도 개발해봐야겠다! 책을 읽을수록 자바에 흥미가 생기는 중이다/)

 

 

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • SRP(Single Responsibility Principle):
  • OCP(Open Closed Principle):
  • 플래그 인수
  • 시간적인 결합(temporal coupling)
  • 순서 종속성(order dependency)
  • 출력인수
  • AOP(Aspect Oriented Programming)
  • COP(Component Oriented Programming)

'Book Review' 카테고리의 다른 글

[Clean Code] 4장. 주석  (0) 2022.02.26
[Clean Code] 2장. 의미 있는 이름  (0) 2022.02.20
[Clean Code] 추천사 ~ 1장. 깨끗한 코드  (0) 2022.02.19