프로그래밍/클린코드 <13>
- 오류 코드보다 예외를 사용하라. : 오류 코드를 사용하면 호출자 코드가 복잡해진다. - Try-Catch-Finally 문부터 작성하라. : try 블록의 트랜잭션 범위 내에서 트랜잭션의 본질을 유지하기 쉽다. - 예외에 의미를 제공하라 : 오류 메세지에 의미를 담아라. - 호출자를 고려해 예외 클래스를 정의하라 - null을 반환하지 마라 : 함수의 시작이 null check이라니.. 아주 나쁜 코드다. (프로그래머의 실수를 유발한다) : null 이 아니라 빈 list(empty data structure)를 반환하라. - 인수(parameter)로 null을 전달하지 마라. : 예외로 던지거나 assert 문으로 잡아내는 방법이 있지만...
자료 추상화 - 구현을 외부로 노출하지 않는다. - 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료를 조작할 수 있어야 한다. - 아무 생각 없이 get, set을 외부에 노출하지 말자. 자료 / 객체 비대칭 - 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. - 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. 디미터 법칙 - 객체는 자료를 숨기고 함수를 공개해야 한다.(조회 함수로 내부 구조를 공개하면 안 됨) - 모듈 간 결합도를 최소화해야 한다. 자료 전달 객체 - 공개 변수만 있고 함수가 없는 클래스 - 비공개 변수를 get/set 함수로 조작 (사이비 캡슐화) :private String street; public String g..
코딩 컨벤션 (Coding Convention) 입사하면 제일 먼저 확인해야 할 것 중에 하나이다. 코드를 짜는 스타일은 사람마다 조금씩 다르다. 하지만 이 형식을 맞춰 둔다면 다른 사람이 짠 코드도 내가 짠 것 같고, 내가 짰지만 어? 이거 내가 짰나 싶을 정도로 유사해지며 가독성에 날개를 달아준다. 팀마다 형식이 다 다르고, 이 형식은 팀원들끼리 조율해서 나은 방향으로 맞춰 가면 된다. 처음부터 익숙할 수는 없으니 문서로 만들어 둔다면 신규 투입자가 개발 시 참고하면 좋다. - 적절한 행 길이를 유지하라 : 신문 기사처럼 작성하라(큰 그림부터 세부 묘사 순으로) : 개념은 빈행으로 분리(개념 간 유사, 종속 함수 등은 붙여서) - 가로 형식 맞추기 : 가로 공백과 밀집도(할당 문은 공백으로 구분, 함..
주석은 항상 거짓말을 한다. : 코드는 살아 있는 생물체라 항상 변화하고 진화하지만, 주석은 계속 퇴화한다. - 주석은 나쁜 코드를 보완해서 안된다. 코드로 의도를 표현하라 좋은 주석 - 법적인 주석 - 정보 제공 주석 - 중요성 강조 주석 - 경고 주석 - TODO 주석 나쁜 주석 - 주절거리는 주석 - 코드와 중복된 내용 적는 주석 - 오해할 여지가 있는 주석 - 이력을 기록하는 주석 (버전 관리 시스템이 있어서 요즘은 안 하죠) - 주석으로 처리한 코드 (버전 관리 시스템이 있으니 그냥 지웁시다) - 너무 많은 정보 - 함수 헤더
- 작게 만들어라 :즉, 한 가지만 해라(SRP : Single Responsibility Principle) - Switch 문 쓰지 마라 : 한 가지 작업만 하는 switch문을 만들기는 어렵다.(물론, 정말 어쩔 수 없는 경우는 써야지요.) : OCP(Open Closed Prindiple)을 위반한다. (새 유형이 추가되면 계속 수정해야 함) : 다형성을 이용하라. - 이상적인 함수의 인수(Parameter)는 0개이다. : 불가피하게 parameter가 늘어나게 되면 클래스로 만들어 넘긴다. : bool 인수는 함수가 true면 A일 false면 B 일을 시키겠다는 짓이니 하지 말자. - 한 가지 일만 처리해라 (강조, 강조) : 예 1) set함수에서 return 값으로 bool 넘겨서 확인하..
게임 캐릭터 이름 짓기 다음으로 고민되는 거 = 함수 이름 짓기 - 함수 이름이 길어지더라도 함수의 수행 의도를 명확히 하라. - 발음하기 쉬운 이름 - 검색하기 쉬운 이름 (누구나 검색하고 싶은 것을 떠올렸을 때 바로 떠오르는 영단어) + 기발한 이름 피하시오. - 헝가리 표기법, 멤버 변수 접두어, 인터페이스라고 I로 시작하는 것을 피하라 : 모두 옛날의 잔재들임 요즘 IDE 너무 좋아서 굳이 표시할 필요 없다. - 클래스 : 명사, 명사구 - 함수 : 동사, 동사구 :함수명과 인수(parameter)의 관계는 동사 / 명사 = 동사 / 목적어 관계로 표현하면 의도를 명확히 알 수 있다.