3과 5 모두로 나누어 떨어지는 것이 더 적은 경우의 조건이기 때문에 이 조건을 가장 먼저 작성해야 함.
만약 3으로 나누어 떨어지는 수를 먼저 걸러주면 3과 5 모두로 나누어 떨어지는 조건에 걸리지 않음.
반대로 3이나 5로 나누어 떨어지지 않는 경우는 가장 많은 경우이므로 맨 아래로 빼주어야 함.
가장 적은 경우의 수를 먼저 if 및 else if로 걸러주고, 가장 많은 경우의 수를 else로 걸러내서 코드를 간단하게 만들기.
등급 분류와 기호 분류라는 두 가지 기능을 하나의 함수에 담지 말 것.
객체지향 5대 원리 SOLID 중 하나인 SRP(단일 책임 원칙)에 따라, 작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어야 함.
처음 작성한 코드에서 등급 분류와 기호 부여라는 두 가지 일을 수행했지만, 등급 분류 함수와 기호 부여 함수 두 가지로 나누는 것이 실무에서 유지보수에 용이함.
세 가지 방법을 사용하라는 조건에 따라 변1, 변2, 변3이 각각 가장 긴 변일 때를 가정하였음.
즉, 3개의 if문을 만들고 그 안에 3개의 거듭제곱 식을 작성했음. 하지만 이는 의미없는 코드의 나열이자 코드의 가독성을 떨어뜨림. 정확한 문제의 의도 파악에 따라 세 가지 방법을 모두 사용하면 됨.
아래와 같이 시분초 변화를 중첩 조건문으로 만들 필요없었음.
if(second === 59){
if(minute === 59){
...
가장 작은 단위부터 각 parameter별로 독립된 if문을 만들어 해당 사항이 있는지 체크하면 됨.
또한, 할당해야 하는 부분에 일치연산자를 사용했는데, 항상 어떤 동작을 구현하고 싶은지 의도를 생각하고 코드를 작성할 것.
NaN을 입력 받은 경우 true를 리턴해야 하는데, 이 부분에서 계속 통과 조건을 만족하지 못했다. 알고보니 NaN은 모든 값과 일치하지 않는다. 그래서 NaN === NaN의 결과는 false이다.
그렇기 때문에 조건을 만족해야 값을 return하는 if문 자체를 아예 통과하지 못했고, true를 반환할 수 없었다.
내장함수 boolean을 사용하여 임의의 값을 true/false로 바꾸고, 이를 부정하여 원하는 값을 찾아낼 수 있다.