본문 바로가기

Study

(35)
클린코드 7장_오류 처리 깨끗한 코드와 오류 처리는 확실히 연관성이 존재한다. 상당수 코드 기반은 전적으로 오류 처리 코드에 좌우된다. 좌우된다는건 여기저기 흩어진 오류 처리 코드 때문에 실제 코드가 하는 일을 거의 불가능 하다는 의미이다. 오류 처리 코드는 중요하지만, 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다. 오류 코드보다 예외를 사용하라 public class DeviceController { ... public void sendShutDown() { DeviceHandle handle = getHandle(DEV1); // 디바이스 상태를 점검한다. if (handle != DeviceHandle.INVALID) { // 레코드 필드에 디바이스 상태를 저장한다. retrie..
클린코드 6장_객체와 자료구조 변수를 비공개로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서이다. 그렇다면 어째서 수많은 프로그래머가 조회함수와 설정함수를 당연하게 공개하여 비공개 변수를 외부에 노출할까? 1. 자료 추상화 한 클래스는 구현을 외부로 노출하고, 다른 클래스는 구현을 완전히 숨긴다. public class Point{ public double x; public double y; } public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 추상적인 Point 코..
클린코드 5장_형식 맞추기 5장 형식 맞추기 1. 형식을 맞추는 목적 코드 형식은 의사소통의 일환이다 2. 적절한 행 길이를 유지하라 500줄을 넘지 않고도 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있는 사실이다. 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다 3. 신문 기사처럼 작성하라 소스 파일도 신문 기사와 비슷하게 작성한다. 이름은 간단하면서도 설명이 가능하게 짓는다. 이름만 보고도 올바른 모듈을 살펴보고 있는지 아닌지를 판단할 정도로 신경 써서 짓는다. 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다. 마지막에는 가장 저차원 함수와 세부 내역이 나온다. 4. 개념은 빈 행으로 분리하라 거의 모든 코드는 왼쪽에서 오른쪽으로 그리고 위에서 아래로 읽힌다..
스프링 부트 테스트 코드 작성 방법 목차 TDD의 정의 Controller 테스트 코드 작성 JUnit 소개 Junit Annotation 객체 생성 테스트 assert 메서드 TDD “테스트 주도 개발: 테스트가 개발을 이끌어 나간다.” 라고 정의할 수 있다. 메소드나 함수같은 프로그램 모듈을 작성할 때, 작성 종료조건을 먼저 정해놓고 코딩을 시작한다’는 의미로 받아들이면 편하다. RED: 항상 실패하는 테스트를 먼저 작성 GREEN: 테스트에 통과하는 프로덕션 코드 작성 REFACTOR: 테스트가 통과하면 프로덕션 코드를 리팩토링 위의 레드 그린 사이클처럼 테스트 코드를 작성하고 그걸 통과하는 코드를 만드는 과정을 반복하면서 제대로 동작하는지에 대한 피드백을 적극적으로 받는다. TDD를 사용하는 이유 개발 단계 초기에 문제를 발견하게 ..
클린코드 4장_주석 주석 1. 주석은 나쁜 코드를 보완하지 못한다. 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 표현력이 풍부하고 깔끔하며, 주석이 거의 없는 코드가, 복잡하고 어수선하며 주석이 많이 달린 코드보다 훨씬 좋다. 2. 코드로 의도를 표현하라. 확실히 코드만으로 의도를 설명하기 어려운 경우가 존재한다. 그래서 많은 개발자가 이걸 설명하는데 코드는 훌륭한 수단이 아니라는 의미로 해석한다. // 직원에게 복지혜택을 받을 자격이 있는지 검사한다. if((employee.flags & HOURLY_FLAG) && employee.age > 65)) if(employee.isEligibleForFullBenefits()) 위 코드와 아래 코드를 비교했을 때 아래 코드가 더 알기 쉽다. 3. 좋은..
클린 코드 3장 정리 #1 1. 함수를 ‘작게’ 만들고, ‘더 작게’ 만들어라. 함수는 얼마나 짧아야 좋을까? - 최대한 간결하게 나타내고 모든 함수가 명백한게 좋다. if문/else문, while문 등에 들어가는 블록은 한 줄이어야 한다는 의미이다. 대개 거기서 함수를 호출한다. 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서는 안된다. 그래야 함수는 읽고 이해하기 쉬워진다. 2. 함수는 한 가지를 잘해야한다. 함수는 한 가지를 해야한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면, 그 함수는 한 가지 작업만 한다. 함수가 ‘한 가지’만 하는지 판단하는 방법은 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면, 그 함수는..
Spring MVC 패턴 MVC 패턴이란 소프트웨어 디자인 패턴 중 하나 M (Model) / V (View) / C(Controller) Model: 어플리케이션 정보나 데이터, DB등을 의미함 View: 사용자에게 보여지는 화면, UI를 말함 Controller 데이터와 비즈니스 로직 사이의 상호 동작을 관리함. 즉, 모델과 뷰를 통제한다. MVC패턴에서 View와 Model이 직접적인 상호 소통을 하지 않도록 관리함 MVC 패턴은 MVC1 패턴과, 스프링이 사용하고 있는 MVC2 패턴으로 나눌 수 있음 MVC1 위 패턴의 경우 View와 Controller를 JSP가 담당하는 형태를 가짐 구현 난이도는 쉬우나, 내용이 복잡하고 거대해질수록 이 패턴은 힘을 잃는다. (유지보수에 있어서 문제가 발생한다) MVC2 위 패턴은 널..
클린 코드 2장 정리 #2 인코딩을 피하라 헝가리식 표기법을 피하라 멤버 변수 접두어를 피하라 public class Part{ private String m_dsc; // 설명 문자열 void setName(String name){ m_dsc = name; } } public class Part{ String description; // 설명 문자열 void setDescription(String description){ this.description = description; } } 접두어를 사용한 코드는 옛날에 작성한 구닥다리 코드라는 징표가 되어버린다. 인터페이스 클래스와 구현 클래스 인터페이스 클래스 이름과 구현 클래스 이름 중 하나를 인코딩 해야 한다면, 구현 클래스 이름을 택하는게 좋다. ShapeFactoryImpl..