『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
『이펙티브 디버깅』 디버깅 지옥에서 탈출하는 66가지 전략과 기법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
Obfuscation 101
: 난독화, 프로가드, R8, 트랜스포머 API
김용욱
카카오뱅크
영화와 커피를 좋아하는 은행원. 반지 원정대는 극장에서만 15번을 보았다. 데이터베이스를 전공했지만 급변하는 모바일 환경에 반해 안드로이드에 승선했고 Realm을 통해 모바일과 데이터베이스를 융합했다. 그후 새로운 가능성을 찾아 금융으로 왔다.
왜 프로그래머가 가독성을 향상시키는 수련을 평생 해야 하는지를 알려준다. 단지 상투적인 이유만 들먹이는 게 아니다. 좋은 가독성은 프로그래머를 프로로 만들어주고, 큰 기쁨을 주며, 성장할 기회를 준다고 역설한다. 가독성을 향상시키려면 눈에 보이는 것들부터 신경을 써야 하며, 코드 자체가 프로그램을 설명해야 하며, 흐름을 단순화하고 주석을 잘 쓰고 퇴고해야 한다는 간단한 원칙부터 지켜나가야 한다.
1. 이해하기 쉬운 코드 개발
Hong Hyo Sang
“ 이해하기 쉬운 코드는 버그가 적다. “
2. I. 이해 하기 쉬운 코드
Contents
1. 조건문
2. 매직 넘버
3. Collection 객체 사용
4. NullPointException
5. 유연한 추상 타입
6. 변경 할 수 없는 값에 대해서는 Final
7. Null 객체 반환
8. Collection객체는 Stream사용
9. 복잡한 조건은 메소드 참조
10. Optional 사용
3. 1. 조건문
불필요한 코드 제거, 부정 패턴, 표현식 간소화, NullPointExecption 피하기, 대칭적 방법으로 구조화 하면 코드가 짧아지고 이해하기 쉬워 진다.
If문은 항상 괄호를 사용하여 블록을 쉽게 알아 볼 수 있도록 한다.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/GoodCondition.java
4. 1. 조건문
불필요한 코드 제거, 부정 패턴, 표현식 간소화, NullPointExecption 피하기, 대칭적 방법으로 구조화 하면 코드가 짧아지고 이해하기 쉬워 진다.
If문은 항상 괄호를 사용하여 블록을 쉽게 알아 볼 수 있도록 한다.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/GoodCondition.java
NullPointExecption
5. 1. 조건문
불필요한 코드 제거, 부정 패턴, 표현식 간소화, NullPointExecption 피하기, 대칭적 방법으로 구조화 하면 코드가 짧아지고 이해하기 쉬워 진다.
If문은 항상 괄호를 사용하여 블록을 쉽게 알아 볼 수 있도록 한다.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/GoodCondition.java
public void 사용자권한 {
If (알수 없는 사용자 이면 ) {
권한 처리 ;
} else if (일반 사용자 이면 ) {
일반 사용자 처리;
} else if ( 슈퍼 사용자 이면 ) {
슈퍼 사용자 처리
}
}
public void 사용자권한 {
If (알수 없는 사용자 이면 ) {
권한 처리 ;
return;
}
if (일반 사용자 이면 ) {
일반 사용자 처리;
} else if ( 슈퍼 사용자 이면 ) {
슈퍼 사용자 처리
}
}
6. 2. 매직 넘버
코드안의 숫자 집합은 표현상 의미가 없는 숫자는 프로그램의 동작을 제어하게 되므로 의미를 부여 하기 위해서 상수로 대체 되어야 하고
의미 있는 집합의 상수는 열거형으로 표현 하면 이해하기 쉬운 코드가 된다.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/MagicNumber.java
7. 2. 매직 넘버
코드안의 숫자 집합은 표현상 의미가 없는 숫자는 프로그램의 동작을 제어하게 되므로 의미를 부여 하기 위해서 상수로 대체 되어야 하고
의미 있는 집합의 상수는 열거형으로 표현 하면 이해하기 쉬운 코드가 된다.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/MagicNumber.java
8. 3. Collection 객체 사용
Collection 객체를 사용 하는 경우 순환 처리 하기 위해서 For문을 사용하면 인덱스의 변경을 유발 할 수 있으면 순환 처리를 객체를 변경 하여 원
하지 않는 결과를 가지고 다른 방법으로 접근을 해야 함
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/MagicNumber.java
** 순환문 내부에 pattern을 사용 하는 경우는 compile 후 사용 하면 한번 컴피일 후 사용 할 수 있음
9. 4. NullPointException
NullPointException은 많이 발생 하는 오류로 여러 유형에서 발생을 하여 코드는 Null처리에 대한 방법을 제시 한다.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/NullProcess.java
10. 5. 유연한 추상 타입
구체 타입의 코드 보다는 추상 타입의 코드가 객체의 사용에 유연성을 제공 한다.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/AbstractTypeApproach.java
추상 타입
구체 타입
11. 6. 변경 할 수 없는 값에 대해서는 Final
변경 하면 안되는 값에 대해서는 불변(Final)객체를 사용 하여 보호 한다. 가변 객체를 사용 하면 중간에 값이 변경 되어 원하는 값을 얻을 수 없
는 경우가 발생 할 수 있다.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/UseFinal.java
서울 대전
거리 변경
12. 7. Null 객체 반환
메서드가 null을 반환 하면 코드에서 NullPointException 발생 할 수 있어서 매번 명시적으로 확인 하는 데 이것을 해결 하기 위한 방법
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/UseFinal.java
13. 8. Optional 사용
메서드가 null을 반환 하면 코드에서 NullPointException 발생 할 수 있어서 매번 명시적으로 확인 하는 데 이것을 해결 하기 위한 방법
.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/ComplicatedComtion.java
14. 9. Collection객체는 Stream사용
Collection처리는 함수형 프로그램 방식이 읽기 쉽다.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/CollectionToStream.java
15. 10. 복잡한 조건은 메서드 참조
Collection를 처리 할 떄 복잡한 조건은 메소드 참조로 코드를 간결히 작성 한다.
소스 : https://github.com/hyomee/JAVABASIC/blob/main/src/com/hyomee/cleancode/ComplicatedComtion.java