자바/자바 코딩의 기술 9

자바 코딩의 기술 - 9장 ( 실전 준비 )

코드의 첫 90%에 개발 시간의 첫 90%가 쓰인다. 코드의 나머지 10%에 개발 시간의 마지막 90%가 쓰인다. - 톰 카길 9-1 정적 코드 분석 도구 - SpotBugs( https://spotbugs.github.io/) 자바에서 가장 오래된 정적 코드 분석도구이다. - Checkstyle(https://checkstyle.sourceforge.io/), PMD(https://pmd.github.io/) 도 유명하나, 다소 장황하고 특정 코드 방식을 고집하는 등 선호도를 탄다. - Error Prone(https://errorprone.info/) 은 ConcurrentHashMap 내 버그를 감지하면서 유명해 졌는데, 구글이 자체 개발했다. - Code Inspection( https://www..

자바 코딩의 기술 - 8장 ( 데이터 흐름 )

객체 지향 프로그래밍은 동작부를 캡슐화해 코드를 이해하기 쉽게 만든다. 함수형 프로그래밍은 동작부를 최소화해 코드를 이해하기 쉽게 만든다. - 마이클 페더스 8-1. 익명 클래스 대신 람다 사용하기 Map values = new HashMap(); Double square(Double x) { Function squareFunction = new Function() { @Override public Double apply(Double value) { return value * value; } }; return values.computeIfAbsent(x, squareFunction); } 위와 같이 익명클래스(squareFuction)을 만드는 것보다 람다 표현식이 낫다 Map values = new H..

자바 코딩의 기술 - 7장 ( 객체 디자인 )

컴퓨터 과학의 모든 문제는 또 다른 간접 게층을 추가해 풀 수 있다. 하지만 대부분 또 다른 문제를 양산한다. - 데이비드 휠러 7-1. boolean 매개변수로 메서드 분할 void log(String message, boolean classified) throws IOException { if (classified) { writeMessage(message, CAPTAIN_LOG); } else { writeMessage(message, CREW_LOG); } } 위는 기장(Captain)과 승무원(Crew)로그 처리 부분과 같이 서로 연관 없는 부분을 메서드를 각각 분리하는게 좋다. void writeToCaptainLog(String message) throws IOException { write..

자바 코딩의 기술 - 6장 ( 올바르게 드러내기)

코드는 꼭 테스트하라. 아니면 사용자가 하게 된다. - 데이브 토마스, 앤드류 헌트 6-1. Given-When-Then으로 테스트 구조화 @Test void setPlanetarySpeedIs7667() { CruiseControl cruiseControl = new CruiseControl(); cruiseControl.setPreset(SpeedPreset.PLANETARY_SPEED); Assertions.assertTrue(7667 == cruiseControl.getTargetSpeedKmh()); } 주석을 추가하고, 띄워쓰기를 넣어서 Given, When, Then을 확실히 인지할 수 있다. void otherTest() { // given CruiseControl cruiseControl..

자바 코딩의 기술 - 5장 ( 문제 발생에 대비하기 )

오류가 없는 프로그램을 작성하는 두 가지 방법이 있는데 사실 세 번째 방법만 통한다. - 앨런J 펄리스 5-1. 빠른 실패 void setTargetSpeedKmh(double speedKmh) { if (speedKmh < 0) { throw new IllegalArgumentException(); } else if (speedKmh SPEED_LIMIT) { throw new IllegalArgumentException(); } targetSpeedKmh = speedKmh; } 5-2. 항상 가장 구체적인 예외 잡기 예외를 단순히 가장 큰 개념인 Exception으로 받기 보다는, 구체적인 예외인 NumberFormatException 등으로 받아라. 그 외에 예외(ex. NullPointExcep..

자바 코딩의 기술 - 4장 ( 올바르게 명명하기 )

컴퓨터 과학에서 어려운 문제는 딱 두 가지, 캐시 무효화(Cache invalidation)와 명명(naming)이다. - 필 칼튼 4-1. 자바 명명 규칙 사용하기 클래스는 대문자로 시작하고, 메소드는 동사형태의 소문자, 변수는 명사형태의 소문자로 시작하는 등 자바 코드 규칙을 준수하라. https://www.oracle.com/technetwork/java/codeconventions-150003.pdf 4-2. Getter/Setter는 규칙을 적용하라. 필드명이 foo이면 getFoo(), setFoo()와 같이 명명하며, boolean필드는 isFoo()와 같이 명명한다. 4-3. 변수명에 한 글자(i, l, m 등)를 사용하지 마라. 명시적으로 변수의 의미를 알 수 있는 이름을 사용하라. 4-..

자바 코딩의 기술 - 3장 ( 슬기롭게 주석 사용하기 )

훌륭한 코드는 그 자체로 최고의 설명서다. 주석을 추가하기 전에 "주석이 필요없도록 코드를 향상시킬 방법이 없을까?"하고 자문해 보라. - 스티브 맥코넬 3-1. 코드만 봐도 알 수 있는 당연한 내용은 주석으로 작성하지 마라. class Inventory { // Fields (we only have one) List supplies = new ArrayList(); // The list of supplies. // Methods int countContaminatedSupplies() { // TODO: check if field is already initialized (not null) int contaminatedCounter = 0; // the counter // No supplies => n..

자바 코딩의 기술 - 2장 ( 코드 스타일 레벨 업 )

훌륭한 코드는 짧고 단순하고 대칭을 이룬다. 문제는 어떻게 그렇게 하느냐다. - 숀 파렌트 2-1. 로직 내에 매직넘버(특정 숫자나 문자)를 사용하지 말고, 상수(static final)로 분리시켜라. 2-2. 매개변수로 받는 값이 몇개의 유효한 값만 가능하다면, 매개변수를 정수와 같은 변수가 아닌 enum타입을 사용해서 호출할 수 있는 값을 제한하라. 2-3. For 루프는 반복문을 잘못 구현할 우려가 있으니, 특별한 이유(명시적으로 인덱스 i를 사용해야 할 때)가 아니면 For-Each문을 사용하라. 2-4. 반복문에서 컬렉션 수정시 주의사항 : 반복문 순회 중에 수정/삭제가 필요시 주의사항 private List members = new ArrayList(); void checkMember(){ f..

자바 코딩의 기술 - 1장 ( 우선 정리부터 )

현장에서 뽑은 70가지 예제로 배우는 코드 잘 짜는법 : 개발자는 대부분의 시간을 기존 코드의 유지보수에 사용한다. 따라서 코드는 명료함을 추구하여 가독성을 높이는 노력을 하여야 한다.(본인만 알 수 있게 짧게(또는 복잡하게) 짠다고 좋은게 아니다. 본인도 6개월이 지나면 이해하기 어렵다.) 바보도 컴퓨터가 이해하는 코드는 작성할 수 있다. 훌륭한 프로그래머는 인간이 이해하는 코드를 작성한다. - 마틴 파울러 1-1. 쓸모없는 비교는 피하라 : boolean으로 리턴하는 조건을 다시 true/false와 비교할 필요없다. 1-2. 부정표현보다 긍정표현이 이해하기 쉽다. if조건문 등에서 긍정표현문을 쓰도록 노력하자. 1-3. 조건 비교 후 boolean값을 리턴하는 구조는 if조건문 없이 바로 리턴도 가..

반응형