클린코드 - 7.오류 처리
2022. 7. 5. 00:41
개발 서적/클린코드
1. 오류 코드보다 예외를 사용하라 public class DeviceController { ... public void sendShutDown() { DeviceHandle handle = getHandle(DEV1); // 디바이스 상태를 점검한다. if (handle != DeviceHandle.INVALID) { // 레코드 필드에 디바이스 상태를 저장한다. retrieveDeviceRecord(handle); // 디바이스가 일시정지 상태가 아니라면 종료한다. if (record.getStatus() != DEVICE_SUSPENDED) { pauseDevice(handle); clearDeviceWorkQueue(handle); closeDevice(handle); } else { logger..
클린코드 - 6.객체와 자료 구조
2022. 6. 5. 00:18
개발 서적/클린코드
1. 자료 추상화 public class Point { public double x; public doulbe y; } public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 두 클래스를 비교해보자 2차원 점을 표현하는 클래스인데 위 클래스의 경우 외부로 모두 노출되지만, 아래 클래스의 경우 구현을 완전히 숨긴 형태이다 또한 접근 시 좌표값을 읽을 때 위 클래스의 경우 각각 개별적으로 읽게 되지만 아래 클래스의 경우 두 값을 동시에 설정해야한다 구현을 감추기 위..
클린코드 - 5.형식 맞추기
2022. 6. 4. 16:32
개발 서적/클린코드
1. 형식을 맞추는 목적 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무! 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높다 처음 잡아 놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다 2. 적절한 행 길이를 유지하라 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다 소스도 신문 기사처럼 위에서 아래로 읽으며 첫 문단에 전체 기사의 내용을 요약하고 아래로 읽어 내려가면서 날짜, 이름, 발언, 주장 등 세세한 사실 알게된다 빈 행을 넣어 개념을 분리해야 한다 예를 들어 메서드와 메서드 사이에 빈 행이 없다면 가독성이 굉장히 떨어질 것 이다 반대로 같은 개념의 코드라면 공백 없이 밀접한 상태로 코드를 작성하는 것이 더 이해하기 좋다 private..
클린코드 - 4.주석
2022. 6. 4. 16:12
개발 서적/클린코드
나쁜 코드에 주석을 달지 마라. 새로 짜라 - 브라이언 w. 커니핸, P.J.플라우거 1. 주석은 나쁜 코드를 보완하지 못한다 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 코드를 작성하고 보니 짜임새가 엉망이고 알아보기 어렵다면 주석이 아니라 코드를 다시 정리해야 한다 주석으로 설명하기보다는 깔끔하고 정돈된 코드가 훨씬 보기 좋다 2. 코드로 의도를 표현하라! 코드만으로 의도를 설명하기 어려운 경우 메서드를 분리하여 표현할 수 있다 // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) { ... } if (employee.isEligibleForFullBenefits())..
클린코드 - 3.함수
2022. 2. 27. 15:27
개발 서적/클린코드
1. 작게 만들어라! 함수를 만드는 첫째 규칙은 '작게', 두 번째 규칙은 '더 작게' 최대한 작게 만드는 것이 이 책에서 이야기하는 함수의 포인트이다 특히 if문, while 문 등에 들어가는 블록은 한 줄로 작성하는 것을 권장할 정도로 작게 만드는 것에 집착한다 즉, 중첩 구조가 생길 만큼 함수가 커져서는 안 된다는 뜻 함수에서 들여 쓰기 수준은 1단이나 2단을 넘어서면 안 된다 이렇게 작성하기를 권장하는 이유는 당연히 읽고 이해하기 쉽게 하기 위해서 이다! 2. 한 가지 해라! 하나의 함수는 한 가지만 처리해야 한다 그렇다면 '한 가지'의 범위는 무엇을 의미할까? 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다고 말할 수 있다 단순히 다른 표현이 아..
클린코드 - 1.깨끗한 코드 & 2.의미있는 이름
2022. 2. 20. 15:00
개발 서적/클린코드
0. 깨끗한 코드 "나중은 결코 오지 않는다." - 르블랑의 법칙 나중에 돌아와서 다시 정리하겠다는 생각은 하지말자 나쁜 코드가 쌓일수록 생산성은 떨어지고 청소할 방법이 없어진다 그렇다면 깨끗한 코드란 무엇일까? 공통적으로 얘기하는 깨끗한 코드의 특징은 중복을 피하고, 한 기능만 수행, 제대로 표현, 작게 추상화 즉, 읽기 쉽고 유지보수성이 좋은 코드이다 1. 의도를 분명히 밝혀라 책에서는 의도가 분명한 이름은 정말로 중요하다는 사실을 거듭 강조한다 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다 변수, 함수, 클래스 등의 이름만으로 존재 이유, 수행 기능, 사용 방법을 유추할 수 있도록 신경 써서 지어야 한다 따라서 주석이 필요하다면 의도를 분명히 드러내지 못했다는 뜻..
7장. Spring Web Security를 이용한 로그인 처리
2022. 1. 22. 13:54
개발 서적/코드로 배우는 스프링 웹 프로젝트
7장. Part07_Spring Web Security를 이용한 로그인 처리 ch30. Spring Web Security 소개 스프링 시큐리티의 기본 동작 방식 서블릿의 여러가지 필터와 인터셉터를 이용하여 처리 필터 인터셉터 서블릿에서 말하는 단순한 필터를 의미 스프링에서 필터와 유사한 역할 스프링과 무관하게 서블릿 자원 스프링의 빈으로 관리되면서 스프링의 컨텍스트 내에 속함 Dispatcher servlet의 앞단에서 정보를 처리 Dispatcher servlet에서 Handler(Controller)로 가기 전에 정보를 처리 J2EE 표준 스펙에 정의 되어 있는 기능 Spring Framework에서 자체적으로 제공하는 기능 인코딩이나 보안 관련 처리와 같은 web app의 전역적으로 처리해야 하는..
6장. 파일 업로드 처리
2022. 1. 22. 13:22
개발 서적/코드로 배우는 스프링 웹 프로젝트
6장. 파일 업로드 처리 ch21. 파일 업로드 방식 파일 업로드 방식 태그를 이용하는 방식 브라우저의 제한이 없어야 하는 경우에 사용 일반적으로 페이지 이동과 동시에 첨부파일을 업로드하는 방식 을 이용해서 화면의 이동 없이 첨부파일을 처리하는 방식 Ajax를 이용한 방식 첨부파일을 별도로 처리하는 방식 을 이용하고 Ajax로 처리하는 방식 HTML5의 Drag And Drop 기능이나 jQuery 라이브러리를 이용해서 처리하는 방식 방식의 파일 업로드 uploadForm.jsp Submit UploadController.java package org.zerock.controller; import java.io.File; import org.springframework.stereotype.Controll..
5장. AOP와 트랜잭션
2022. 1. 22. 13:20
개발 서적/코드로 배우는 스프링 웹 프로젝트
5장. AOP와 트랜잭션 ch18. AOP라는 패러다임 AOP란? 관점 지향 프로그래밍 관점이라는 용어는 개발자들에게 관심사(concern)라는 말로 통용됨 즉, 코드를 작성하면서 염두(관심)에 두는 일들 파라미터가 올바르게 들어왔을까? 이 작업을 하는 사용자가 적절한 권한을 가진 사용자인가? 이 작업에서 발생할 수 있는 모든 예외는 어떻게 처리해야 하는가? 등등... 핵심 로직은 아니지만, 코드를 온전하게 만들기 위해서 필요한 고민들. AOP는 이러한 핵심 비즈니스 로직이 아닌 관심사들을 별도의 코드로 작성하여 컴파일 혹은 실행시점에만 결합시킬 수 있도록 괌심사를 분리 하는 것. 이로 인해 개발자는 핵심 로직에 조금 더 집중할 수 있음 기존의 코드를 수정하지 않고, 원하는 기능들과 결합할 수 있는 패러..
4장. REST 방식과 Ajax를 이용하는 댓글 처리
2022. 1. 22. 13:17
개발 서적/코드로 배우는 스프링 웹 프로젝트
4장. REST 방식과 Ajax를 이용하는 댓글 처리 ch16. REST 방식으로 전환 REST 데이터 처리를 위한 어노테이션 어노테이션 기능 @RestController Controller가 REST 방식을 처리하기 위한 것임을 명시 함 @ResponseBody 일반적인 JSP와 같은 뷰로 전달되는 게 아니라 데이터 자체를 전달하기 위한 용도 @PathVariable URL 경로에 있는 값을 파라미터로 추출하려고 할때 사용 @CrossOrigin Ajax의 크로스 도메인 문제를 해결해주는 어노테이션 @RequestBody JSON 데이터를 원하는 타입으로 바인딩 처리 @RestController JSP와 달리 순수한 데이터를 반환하는 형태이므로 다양한 포맷의 데이터 전송 가능 주로 많이 사용 형태 : ..