클린코드 핵심 정리 (1장 깨끗한 코드, 2장 의미 있는 이름)
1. 나쁜 코드😒
나쁜 코드란 무엇인가?
성능이 나쁜 코드
불필요한 연산이 들어가서 개선의 여지가 있는 코드
의미가 모호한 코드
이해하기 어려운 코드, 네이밍과 그 내용이 다른 코드
중복된 코드
비슷한 애용인데 중복되는 코드들은 버그를 낳는다.
나쁜 코드가 나쁜 이유
깨진 유리창 법칙
나쁜 코드는 깨진 유리창 처럼 계속 나쁜 코드가 만들어지도록 한다.
생산성 저하
나쁜 코드는 팀 생산성을 저하시킨다. 기술 부채를 만들어 수정을 더 어렵게 한다.
새로운 시스템을 만들어야 한다.
현시스템을 유지보수하며 대체할 새로운 시스템 개발은 현실적으로 매우 어렵다.
일정이 촉박해서
일정 안에 새로운 기능을 완성해야 한다.(하지만.. 나쁜 코드는 생산성을 저하하기 때문에 오히려 일정을 못맞춘다.)
영향 범위가 넓어서
생각보다 영향 범위가 넓어서 건드렸다가 다른 부분에 버그가 발생할까봐(하지만.. 기술부채는 부메랑 처럼 우리에게 돌아온다.)
2. 클린 코드😊
클린 코드란?
1. 성능이 좋은 코드
2. 의미가 명확한 코드 = 가독성이 좋은 코드
3. 중복이 제건된 코드
전문가별 클린 코드란?
비야네 스트롭스트룹(C++ 창시자)
나는 우아하고 효율적인 코드를 좋아한다.
논리가 간단해야 버그가 숨어들지 못한다.
의존성을 최대한 줄여야 유지 보수가 쉬워진다.
오류는 명백한 전략에 의거해 철저히 처리한다.
성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로
코드를 망치려는 유혹에 빠지지 않는다.
깨끗한 코드는 한 가지를 제대로 한다.
그래디 부치(객체지향 대가)
깨끗한 코드는 단순하고 직접적이다.
깨끗한 코드는 잘 쓴 문장처럼 읽힌다.
깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다.
오히려 명쾌한 추상화와 단순한 제어문으로 가득하다.
3. 의미 있는 이름 짓기
의미가 분명한 이름 짓기
나쁜 케이스 👎
int a;
String b;
System.out.printf("User Requested %s. count = %d", b, a);
좋은 케이스 👍
class SalesItem {
ItemCode code;
String name;
int count;
}
// ..
SalesItem selectedItem = salesItemRepository.getItemByCode(purchaseRequest.getItemCode());
System.out.printf("User Requested %s. count = %d", selectedItem.getName(), selectedItem.getCount());
루프 속 i, j, k 사용하지 않기
forEach 문 사용하기
for (String message : messages) {
// ..
}
람다 사용하기
messages.stream().forEach(
message -> // ..
)
i, j, k 대신 맥락에 맞는 이름이있다.
i, j -> row, col / width, height
i, j, k -> row, col, depth
통일성 있는 단어 사용하기
Member / Customer / User
Service / Manager
Repository / Dao
설명
- 사용자를 뜻하는 Member, Customer, User 중 통일성 있게 하나의 이름만 사용하기
- 관리를 뜻하는 이름의 경우 Service, Manager 중 하나만 사용하기
- 저장소를 의미할 경우 Repository, Dao 중 하나의 이름만 사용하기
변수명에 타입 넣지 않기
불필요한 연산이 들어가서 개선의 여지가 있는 코드
이해하기 어려운 코드, 네이밍과 그 내용이 다른 코드
비슷한 애용인데 중복되는 코드들은 버그를 낳는다.
나쁜 코드는 깨진 유리창 처럼 계속 나쁜 코드가 만들어지도록 한다.
나쁜 코드는 팀 생산성을 저하시킨다. 기술 부채를 만들어 수정을 더 어렵게 한다.
현시스템을 유지보수하며 대체할 새로운 시스템 개발은 현실적으로 매우 어렵다.
일정 안에 새로운 기능을 완성해야 한다.(하지만.. 나쁜 코드는 생산성을 저하하기 때문에 오히려 일정을 못맞춘다.)
생각보다 영향 범위가 넓어서 건드렸다가 다른 부분에 버그가 발생할까봐(하지만.. 기술부채는 부메랑 처럼 우리에게 돌아온다.)
클린 코드란?
1. 성능이 좋은 코드
2. 의미가 명확한 코드 = 가독성이 좋은 코드
3. 중복이 제건된 코드
전문가별 클린 코드란?
비야네 스트롭스트룹(C++ 창시자)
나는 우아하고 효율적인 코드를 좋아한다.
논리가 간단해야 버그가 숨어들지 못한다.
의존성을 최대한 줄여야 유지 보수가 쉬워진다.
오류는 명백한 전략에 의거해 철저히 처리한다.
성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로
코드를 망치려는 유혹에 빠지지 않는다.
깨끗한 코드는 한 가지를 제대로 한다.
그래디 부치(객체지향 대가)
깨끗한 코드는 단순하고 직접적이다.
깨끗한 코드는 잘 쓴 문장처럼 읽힌다.
깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다.
오히려 명쾌한 추상화와 단순한 제어문으로 가득하다.
3. 의미 있는 이름 짓기
의미가 분명한 이름 짓기
나쁜 케이스 👎
int a;
String b;
System.out.printf("User Requested %s. count = %d", b, a);
좋은 케이스 👍
class SalesItem {
ItemCode code;
String name;
int count;
}
// ..
SalesItem selectedItem = salesItemRepository.getItemByCode(purchaseRequest.getItemCode());
System.out.printf("User Requested %s. count = %d", selectedItem.getName(), selectedItem.getCount());
루프 속 i, j, k 사용하지 않기
forEach 문 사용하기
for (String message : messages) {
// ..
}
람다 사용하기
messages.stream().forEach(
message -> // ..
)
i, j, k 대신 맥락에 맞는 이름이있다.
i, j -> row, col / width, height
i, j, k -> row, col, depth
통일성 있는 단어 사용하기
Member / Customer / User
Service / Manager
Repository / Dao
설명
- 사용자를 뜻하는 Member, Customer, User 중 통일성 있게 하나의 이름만 사용하기
- 관리를 뜻하는 이름의 경우 Service, Manager 중 하나만 사용하기
- 저장소를 의미할 경우 Repository, Dao 중 하나의 이름만 사용하기
변수명에 타입 넣지 않기
int a;
String b;
System.out.printf("User Requested %s. count = %d", b, a);
class SalesItem {
ItemCode code;
String name;
int count;
}
// ..
SalesItem selectedItem = salesItemRepository.getItemByCode(purchaseRequest.getItemCode());
System.out.printf("User Requested %s. count = %d", selectedItem.getName(), selectedItem.getCount());
for (String message : messages) {
// ..
}
messages.stream().forEach(
message -> // ..
)
i, j -> row, col / width, height
i, j, k -> row, col, depth
Member / Customer / User
Service / Manager
Repository / Dao
자료구조
List, Map 의 자료구조일 경우 표현할 이름이 없기 때문에 명시해줘도 괜팒다.
interface
인터페이스일 경우 과거에는 이름앞에 I 라는 뜻으로 인터페이스를 의미했지만 명시하지 않는것이 좋다.
구현체
interface 를 구현한 구체 클래스는 xxxxImpl 로 이름을 짓는것이 좋다.
4. Google Java Naming Guide
Package Naming Guide
모두 소문자로, 언더 스코어 금지!
Class Naming Guide
대문자로 시작하여 카멜케이스로 작성
Method Naming Guide
메서드는 동사, 동사구
참고
해당 포스팅은 제로 베이스 클린코드 한달한권을 수강 후 정리한 내용입니다.
Author And Source
이 문제에 관하여(클린코드 핵심 정리 (1장 깨끗한 코드, 2장 의미 있는 이름)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@coconenne/클린코드-1장-깨끗한-코드
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
모두 소문자로, 언더 스코어 금지!
대문자로 시작하여 카멜케이스로 작성
메서드는 동사, 동사구
해당 포스팅은 제로 베이스 클린코드 한달한권을 수강 후 정리한 내용입니다.
Author And Source
이 문제에 관하여(클린코드 핵심 정리 (1장 깨끗한 코드, 2장 의미 있는 이름)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@coconenne/클린코드-1장-깨끗한-코드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)