210220_B책_항상 괄호 사용하기

정재현·2021년 2월 20일
0

TIL

목록 보기
72/80

오늘도 계속해서 B책을 진행.
1.7<항상 괄호 사용하기> 차례이다.

다행히도 나는 항상 괄호를 사용하는 습관을 가지고있다.
(if문에서의 한줄이라도..)

CruiseControl cruiseControl;

void authorize(User user) {
	Objects.requireNonNull(user);
      if (user.isUNKOWN())
          cruiseControl.logUnauthorizedAccessAttempt();
      if (user.isASTROANUT())
          cruiseControl.grantAccess(user);
      if (user.isCOMMANDER())
          cruiseControl.grantAccess(user);
          cruiseControl.grantAdminAccess(user);
}

앞서 진행했던 switch문을 if문 여러개로 바꾼 코드이다.
그런데 중괄호를 사용하는 나로써는 딱 한줄의 문제가 보인다.
cruiseControl.grantAdminAccess(user) 이다.
if문은 중괄호 없이 사용하면 바로 밑에 줄 한줄만 적용되기 때문이다.
만약 이렇게 배포된다면 메소드 명처럼 모든 사용자에게 권한이 허용된다.
치명적인 버그가 아닐 수 없다.
코드상에서는 들여쓰기가 잘못되어있어 그냥 보면 들여쓰기가 잘못된 것처럼 보일 수 있으나,
근본적인 원인은 역시 중괄호이다.
마감을 앞두고 정신없이 바쁠 때는 아무도 버그를 알아채지 못할 수 있다.
그래서 중괄호를 항상 사용하는 것이 좋다고 한다.
=> 나는 다행히 항상 중괄호를 사용한다. ㅎ_ㅎ

이제 올바른 코드를 한번 보자면,

CruiseControl cruiseControl;

void authorize(User user) {
	Objects.requireNonNull(user);
      if (user.isUNKOWN()) {
          cruiseControl.logUnauthorizedAccessAttempt();
          }
      if (user.isASTROANUT()) {
          cruiseControl.grantAccess(user);
          }
      if (user.isCOMMANDER()) {
          cruiseControl.grantAccess(user);
          }
          cruiseControl.grantAdminAccess(user);
}

이제 이렇게 되면 상당히 쉽게 cruiseControl.grantAdminAccess(user) 를 알아챌 수 있다.
코드 라인은 늘어났지만 읽기 쉬워졌다.
항상 기억해야할 것은! 코드가 적다고 항상 좋은 것이 아니라, 더 나은 코드란 읽기 쉬운 코드라는 것.
=> (내 생각엔 음.. 그 조직에 속한 팀원들의 수준에 맞춘 코드 센스가 중요하지 않을까? 싶다.)

실제로, 2014년 애플 ios의 SSL/TLS 프로토콜에 매우 유사한 버그가 있었다고 한다.
공격자가 버그를 교묘히 활용했다면 애플 장치의 어떤 보안 연결이든 뚫렸을 수 있었다.

결론은, 중괄호를 항상 습관처럼 사용하는 것이 버그를 예방하는 훌륭한 대비책이다.

오늘의 코멘트: 다행히 나는 중괄호를 항상 사용하고 있고, 앞으로도 꾸준히 이어가야겠다. ^_^

profile
"돈받고 일하면 프로다"

0개의 댓글