자바 46

클린코드 3장 - 함수

작게 만들어라! 함수는 작을 수록 좋다. 20라인도 긴 편이며, 짧은 함수로도 멋진 프로그램을 구현가능하다. if 문 / else 문 / while 문 등에서 들여쓰기가 2단이상으로 중첩구조가 생겨야 하면 함수를 분리하는게 좋다. 한 가지만 해라! 하나의 함수는 한 가지 일만을 해야 하며, '한 가지'만 하는지 판단하는 방법으로는 함수 내의 일부 로직을 의미 있는 다른 이름으로 추출할 수 있다면, 그 함수는 여러 작업을 하는 셈이다. 함수 당 추상화 수준은 하나로! 함수 내 모든 문장들의 추상화 수준은 동일해야 한다. 한 함수에서 호출되는 내부 함수는 추상화 수준이 한 단계 낮은 함수가 나오는 식이다. 이것을 내려거기 규칙이라 부를 수 있다. Switch문 switch문이나 if ~ else 문을 이용하..

클린코드 - 2장 의미있는 이름

의도를 분명히 밝혀라 변수의 존재 이유, 기능, 사용법 등이 변수, 메소드, 클래스명에 드러나야 한다. 따로 주석이 필요하지 않을 정도로 // Bad public List getThem() { List list1 = new ArrayList(); for (int[] x : theList) { if (x[0] == 4) { list1.add(x); } } return list1; } // Good public List getFlaggedCells() { List flaggedCells = new ArrayList(); for (int[] cell : gameBoard) { if (cell[STATUS_VALUE] == FLAGGED) { flaggedCells.add(cell); } } return fla..

클린코드 1장 - 깨끗한 코드

코드가 존재하리라 혹자는 코드를 자동으로 생성하는 시대가 올 거라는 말과 함께, 모델이나 요구사항에 집중해야 한다고 얘기한다. 프로그래밍 언어의 추상화 수준은 점차 높아지겠지만, 요구사항을 상세하게 명시하여 기계가 이해하고 실행할 정도로 정확하고 상세하게 정형화하는 코드는 없어질 수 없다. 모호한 요구사항에서 정형화된 표현과 제대로 명시된 요구사항을 뽑아내는 것은 개발자의 역할이다. 나쁜 코드 나쁜 코드는 개발 속도를 크게 떨어뜨린다. 코드를 고칠 때마다 엉뚱한 곳에서 문제가 생기기 때문이다. 팀의 생산성은 계속해서 떨어진다. 이에 새로운 인력을 추가로 투입하지만, 새 인력은 나쁜 코드를 더 양산하며 결국 생산성은 거의 0이 된다. 이에 대해, 새로 차세대 프로젝트를 시작하지만, 기존 시스템에서 계속해서..

클린코드 목차

클린코드의 정의 1장. 깨끗한 코드 좁은 범위의 클린코드 2장 - 의미있는 이름 3장 - 함수 4장 - 주석 5장 - 형식 맞추기 넓은 범위의 클린코드 6장 - 객체와 자료구조 7장 - 오류처리 8장 - 경계 9장 - 단위테스트 10장 - 클래스 더 넓은 범위의 클린코드 11장 - 시스템 12장 - 창발성 13장 - 동시성 14장 - 점진적인 개선 추가적인 클린코드 15장 - JUnit 들여다보기 16장 - SerialDate 리팩토링 17장 - 냄새와 휴리스틱

자바의 정석1

정리차원에서 훓어보면서 기억할 만한 부분만 남겨봅니다. Chapter 1. 자바언어의 특징 : 운영체제에 독립적, 자동 메모리 관리, 멀티쓰레드 지원, 동적 로딩 Chapter 6. 객체 지향 프로그래밍1 - 메서드 호출시 매개변수가 기본형일 경우 복사해서 넘겨지고, 클래스이면 주소값이 넘겨진다. - static 메서드에서는 일반 인스턴스 메서드나 변수를 사용할 수 없다. - 기본 생성자는 클래스에 정의된 생성자가 하나도 없을때 컴파일러가 만들어 준다. Chapter 7. 객체 지향 프로그래밍2 - 상속관련하여, 생성자와 초기화블럭은 상속되지 않는다. 멤버만 상속된다. - 다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받는다. - 부모 클래스와 같은 이름의 sta..

자바 2022.04.11

자바 코딩의 기술 - 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..

반응형