1. 서론
이번 포스팅에서는 성능 & 안전을 고려한 Code에 대해 진행하려고 합니다.
Clean Code에서 말하는 성능 & 안전측면에서의 코드는 아래와 같습니다.
- Synchronized 부분은 가능한 작게.
- null 반환 X, null 전달 X
- 멀티 쓰레드 코드 시 유의
2. Synchronized 부분은 가능한 작게.
Java 에서의 Synchronized는 멀티 쓰레드 환경에서 데이터의 동시접근을 막아 데이터 정합을 지키기 위해 사용합니다.
방법은 Synchronized를 정의한 객체를 lock을 걸어 동시 접근을 막는것입니다.
객체에 lock을 걸게되어 성능은 당연히 좋지 않게됩니다.
그렇기 때문에, 최대한 Synchronized를 피하는 방식으로 개발을 하는것이 best입니다.
하지만, 부득이하게 Synchronized를 사용해야 하는경우에는 가능한 작게 만들어
성능에 큰 이슈가 나지 않도록 해야합니다.
3. null 반환 X, 메서드에 전달 X
null을 사용한다는 것은 매우 위험하고 깨끗하지 않은 코드입니다.
그 이유는 아래와 같습니다.
- NullPointerException 발생 여지를 만들게 됩니다.
- null 체크를 위해 코드가 난잡하게 됩니다.
Clean Code에서는 위와 같은 이유로 특수목적의 객체 혹은 빈 객체를 반환하는것을 추천합니다.
또한, Java 사용자의 경우에는 8 버전의 Optional을 통하여 간편하게 Null 체크 및 예외를 핸들링 할 수 있습니다.
4. 멀티 쓰레드 코드 시 유의
단일 쓰레드가 아닌 멀티 쓰레드의 경우에는 고려할 점이 많습니다.
위에서 언급한 Synchronized, dead lock 등이 대표적입니다.
그렇기 때문에 clean code에서는 아래와 같이 유의하라고 나옵니다.
- 문제를 발생시킬 만한 테스트를 작성하고 자주 수행하라.
- 시스템 오작동을 one-off("한번만 일어나는")로 판단해 무시하지 말라.
- 여러 환경에서 실행할 수 있게 하라.
- 스레드 관련 버그는 단일 스레드에서 먼저 잘 동작하는지 확인 후 멀티 스레도 코드로 작성하라.
- 프로세서 수보다 많은 스레드를 돌려 작업 전환이 잦게하여 critical section이나 dead lock을 찾을 확률을 높여라.
위 유의사항들을 한 마디로 요약하면, Error를 무시하지 말고 끝없이 테스트를 진행하라 입니다.
멀티쓰레드 환경에서는 수많은 케이스들이 존재하며 에러를 재현하기도 힘듭니다.
그렇기 때문에, 저의 경우에는 로컬에서는 단위 테스트 & 잡 테스트를 진행하며
개발망에서는 실제 배포하여 최소 3일정도의 결과를 모니터링 후 리얼에 배포를 진행하고 있습니다.
5. 마무리
성능 & 안전을 고려한 Code에 대해서 포스팅하였습니다.
다음에는 테스트 Code에 대해 포스팅하겠습니다.
'Programming > CleanCode' 카테고리의 다른 글
(3) Clean Code - 테스트 Code (0) | 2020.03.01 |
---|---|
(1) Clean Code - readability가 좋은 Code (0) | 2020.02.27 |