[클린코드 - http://www.yes24.com/Product/Goods/11681152] 객체는 처리의 추상화다. 스레드는 일정의 추상화다. - 제임스 O. 코플리엔(James O. Coplien) 동시성과 깔끔한 코드는 양립하기 어렵다 동시성이 필요한 이유? 동시성은 무엇(what)과 언제(when)을 분리해서 결합(coupling)을 없애는 전략이다 무엇과 언제를 분리하면 애플리케이션 구조와 효율이 극적으로 나아진다 이점 구조적 이점 응답 시간과 처리량(throughput) 개선 미신과 오해 동시성은 항상 성능을 높여준다 -> 동시성은 때로 성능을 높여준다 동시성을 구현해도 설계는 변하지 않는다 -> 무엇과 언제를 분리하면 시스템 구조가 크게 달라진다 웹 또는 EJB 컨테이너를 사용하면 동시성을..
[클린코드 - http://www.yes24.com/Product/Goods/11681152] 창발적 설계로 깔끔한 코드를 구현하자 켄트 벡이 제시한 단순한 설계 규칙 모든 테스트를 실행한다 중복을 없앤다 프로그래머 의도를 표현한다 클래스와 메서드 수를 최소로 줄인다 단순한 설계 규칙 1: 모든 테스트를 실행하라 테스트를 철저히 거쳐 모든 테스트 케이스를 항상 통과하는 시스템은 '테스트가 가능한 시스템'이다 테스트가 불가능한 시스템은 검증도 불가능하다 "테스트 케이스를 만들고 계속 돌려라"라는 간단하고 단순한 규칙을 따르면 시스템은 낮은 결합도와 높은 응집력이라는 객체 지향 방법론이 지향하는 목표를 저절로 달성한다 => 테스트 케이스를 작성하면 설계 품질이 높아진다 단순한 설계 규칙 2~4: 리팩터링 코..
[클린코드 - http://www.yes24.com/Product/Goods/11681152] "복잡성은 죽음이다. 개발자에게서 생기를 앗아가며, 제품을 계획하고 제작하고 테스트하기 어렵게 만든다" - 레이 오지, 마이크로소프트 최고 기술 책임자 깨끗한 코드를 구현하면 낮은 추상화 수준에서 관심사를 분리하기 쉬워진다 시스템 제작과 시스템 사용을 분리하라 소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 '연결'하는) 준비 과정과 (준비 과정 이후에 이어지는) 런타임 로직을 분리해야 한다 시작 단계는 모든 애플리케이션이 풀어야 할 관심사(concern)다 관심사 분리는 우리 분야에서 가장 오래되고 가장 중요한 설계 기법 중 하나이다 public Service getService() { if ..
[클린코드 - http://www.yes24.com/Product/Goods/11681152] 클래스 체계 순서 가장 먼저 변수 목록이 나옴 정적 공개 상수 정적 비공개 변수 비공개 인스턴스 변수 공개 함수 비공개 함수는 자신을 호출하는 공개 함수 직후에 캡슐화 같은 패키지 안에서 테스트 코드가 함수를 호출하거나 변수를 사용해야 한다면 그 함수나 변수를 protected로 선언하거나 패키지 전체로 공개한다 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다 클래스는 작야아 한다! 클래스를 설계할 때는 '작게'가 기본 규칙이다 클래스가 맡은 책임으로 크기를 가늠한다 클래스 이름은 해당 클래스 책임을 기술해야 한다 작명은 클래스 크기를 줄이는 첫번째 관문이다 간결한 이름이 떠오르지 않거나 이름이 모호하다면 클래..
[클린코드 - http://www.yes24.com/Product/Goods/11681152] TDD 법칙 세 가지 TDD의 법칙 첫째 법칙 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다 둘째 법칙 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다 셋째 법칙 : 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다 이 규칙을 따르면 개발과 테스트가 대략 30초 주기로 묶인다 테스트 코드와 실제 코드가 함께 나올뿐더러 테스트 코드가 실제 코드보다 불과 몇 초 전에 나온다 깨끗한 테스트 코드 유지하기 지저분한 테스트 코드를 내놓으나 테스트르르 안 하는건 오히려 더 못하다 테스트 코드가 지저분할 수록 변경하기 어렵고 테스트 코드는 점점 복잡해지고 실패..
[클린코드 - http://www.yes24.com/Product/Goods/11681152] 외부 코드 사용하기 패키지 제공자나 프레임워크 제공자는 적용성을 최대한 넓히려 애쓴다 사용자는 자신의 요구에 집중하는 인터페이스를 바란다 -> 이로인해 시스템 경계에서 문제가 생길 소지가 많다 Map과 같은 경계 인터페이스를 이용할 때는 이를 이용하는 클래스나 클래스 계열 밖으로 노추되지 않도록 주의한다 Map 인스턴스를 공개 API의 인수로 넘기거나 반환값으로 사용하지 않는다 경계 살피고 익히기 우리의 편의를 위해 외부에서 가져온 코드를 테스트하는게 좋다 학습 테스트 : 곧바로 우리쪽 코드를 작성해 외부 코드를 호출하는 대신 먼저 간단한 테스트 케이스를 작성해 외부 코드를 익히기 프로그램에서 사용하려는 방식대..
[클린코드 - http://www.yes24.com/Product/Goods/11681152] 오류 코드보다 예외를 사용하라 오류 코드를 사용하면 함수를 호출한 즉시 오류를 확인해야 하기 때문에 호출자 코드가 복잡해진다 오류가 발생하면 예외를 던지는 편이 논리가 오류 처리 코드와 뒤섞이지 않아 호출자 코드가 더 깔끔해진다 Try-Catch-Finally 문부터 작성하라 try 블록에서 무슨 일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다 예외가 발생할 코드를 짤 때는 try-catch-finally 문으로 시작하는게 좋다 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 방법을 권장한다 자연스럽게 try 블록의 트랜잭션 범위부터 구현하게 되므로..
[클린코드 - http://www.yes24.com/Product/Goods/11681152] 자료 추상화 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다 인터페이스나 조회/설정 함수만으로는 추상화가 이뤄지지 않는다 자료/객체 비대칭 객체 : 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다 자료 구조 : 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다 객체 지향 코드에서 어려운 변경은 절차적인 코드에서 쉬우며, 절차적인 코드에서 어려운 변경은 객체 지향 코드에서 쉽다 (자료 구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽..
[클린코드 - http://www.yes24.com/Product/Goods/11681152] 프로그래머라면 규칙을 정해 형식을 깔끔하게 맞춰 코드를 짜야 한다 형식을 맞추는 목적 코드 형식은 의사소통의 일환이다 의사소통은 전문 개발자의 일차적인 의무다 적절한 행 길이를 유지하라 500줄을 넘지 않고 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다 신문 기사처럼 작성하라 이름은 간단하면서도 설명이 가능하게 짓는다 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다 아래로 내려갈수록 의도를 세세하게 묘사한다 마지막에는 가장 저차원 함수와 세부 내역이 나온다 개념은 빈 행으로 분리하라 각 행은 수식이나 절을 나타내고 이렬ㄴ의 행 묶음은 완..
[클린코드 - http://www.yes24.com/Product/Goods/11681152] 잘 달린 주석은 그 어떤 정보보다 유용하다 경솔하고 근거 없는 주석은 코드를 이해하기 어렵게 만든다 오래되고 조잡한 주석은 거짓과 잘못된 정보를 퍼뜨려 해악을 미친다 주석은 언제나 실패를 의미한다 코드로 의도를 표현하지 못해 실패를 만회하기 위해 주석을 사용함 주석은 거짓말을 한다 주석을 유지보수하기는 현실적으로 불가능이라 오래될수록 코드에서 멀어진다 주석보다 코드에 집중하여 주석이 필요 없는 방향으로 노력하는게 낫다 주석을 가능한 줄이도록 꾸준히 노력해야 한다 주석은 나쁜 코드를 보완하지 못한다 표현력이 풍부하고 깔끔하며 주석이 거의 없는 코드가 복잡하고 어수선하며 주석이 많이 달린 코드보다 훨씬 좋다 코드로..
- Total
- Today
- Yesterday
- 자바스크립트
- 도커
- kotlin
- kotlin In Action
- gradle
- k8s
- clean code
- JavaScript
- 코틀린
- springboot
- Kubernetes
- ddd
- IntelliJ
- docker for mac
- linuxkit
- 스프링
- 도메인주도설계
- Spring
- gasmask
- 클린코드
- docker
- back merge
- 스프링부트
- 자바
- cacheable
- docker pull limit
- 쿠버네티스
- ImagePullBackOff
- java
- QuickTimePlayer
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |