STUDY/Books 13

[Clean Code] 13장 동시성

Clean Code 내용 정리; 13장 동시성 여러 스레드를 동시에 돌리는 이유와 어려움, 이런 어려움에 대처하고 깨끗한 코드를 작성하는 방법을 제안하며 동시성(Concurrency)을 테스트하는 방법과 그 문제점에 대해 이야기한다. 동시성(Concurrency)이란? 동시성: '무엇'을 '언제'까지 돌릴지 하는 것에 대한 결합(Coupling)* 을 분리하는 전략. *결합도: 어떤 모듈이 다른 모듈에 의존하는 정도 동시성은 때로 성능을 높여준다. 프로그램이 거대한 루프가 아닌 작은 협력 프로그램으로 비춰지며, 시스템 자체를 이해하기 쉽고 문제를 분리하기도 쉬워지고, 응답 시간과 작업 처리량을 개선시킬 수도 있다. 그러나, 항상 성능을 높여주는 것이 절대 아니다. 오히려 동시..

STUDY/Books 2021.06.09

[Clean Code] 12장 창발성

Clean Code 내용 정리; 12장 창발성 착실하게 따르기만 하면 우수한 설계가 나오는 단순한 설계 규칙 네 가지에 대해 설명한다. 1. 모든 테스트를 실행하라 테스트가 불가능한 시스템은 검증도 불가능하다. 오류가 날 것이 두려워 리팩터링을 하기도 망설여진다. 테스트가 가능한 시스템을 만들면 크기가 작고 목적 하나만 수행하는 클래스가 나오기 때문에 설계 품질이 높아진다. '테스트 케이스를 만들고 계속 돌려라' 2. 리팩터링: 중복을 없애라 우수한 설계에서 중복은 추가적인 작업과 위험, 불필요한 복잡도를 뜻하기 때문에 없애야할 대상이다. 단 몇 줄이라도 중복을 제거하겠다는 의지로 소규모 재사용의 기회를 포착한다면 시스템 복잡도를 극적으로 줄일 수 있다. //size와 isEmpty 함수를..

STUDY/Books 2021.06.05

[Clean Code] 11장 시스템

Clean Code 내용 정리; 11장 시스템 깨끗한 코드로 구현함으로써 낮은 추상화 수준에서 관심사를 분리하는 것에서 더 나아가 높은 추상화 수준, 즉 시스템 수준에서도 깨끗함을 유지하는 방법을 살펴본다. 시스템 제작과 시스템 사용을 분리하라. 실제로 필요할 때까지 객체를 생성하지 않는 '초기화 지연', '계산 지연'기법 은 불필요한 부하가 걸리지 않고 어떤 경우에도 null 포인터를 반환하지 않는다는 장점이 있지만, 남발되었을 때는 모듈성이 깨지고 중복이 심각해지기에 전반적이고 일관적인 다른 방식을 취할 필요가 있다. 시스템 생성과 시스템 사용을 분리하는 방법에는 다음과 같은 것들이 있다. Main 분리 : 생성과 관련한 코드는 모두 main이나 main이 호출하는 모듈로..

STUDY/Books 2021.06.04

[Clean Code] 10장 클래스

Clean Code 스터디 내용 정리; 10장 클래스 이번 장에서는 깨끗한 클래스에 대해 이야기한다. 기본 클래스 체계 표준 자바 관례 public static 변수 -> private static 변수 -> private 인스턴스 변수 -> public 함수 -> private 함수 이때 private 함수는 자신을 호출하는 공개 함수 직후에 넣는다. 즉, 추상화 단계가 순차적으로 내려간다. 변수와 유틸리티 함수는 최대한 비공개로 유지하려고 노력하되, 때에 따라 protected로 테스트 코드의 접근을 허용한다. 깨끗한 클래스를 만들려면? 1. 단일 책임 원칙 (Single Responsibility Principle, SRP) 클래스는 하나의 책임을 맡게 하여 클래스를 변경하는 이유를 단 하나로 만들..

STUDY/Books 2021.05.30

[Clean Code] 9장 단위 테스트

Clean Code 스터디 내용 정리; 9장 단위 테스트 깨끗한 테스트 코드의 중요성과 테스트 코드를 작성할 때 신경 써야할 부분에 대해 다룬다. TDD 법칙 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 깨끗한 테스트 케이스의 중요성 테스트 코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화하기 때문에 매우 중요하다. 테스트 케이스가 있다면 코드가 아무리 부실하고 설계가 모호하여도 별다른 우려와 공포 없이 안심하고 아키텍쳐를 개선할 수 있다. 테스트 코드가 지저분하면 실제 코드를 변경하는 능력과 코드 구조를 개선하는 능력이 떨어진..

STUDY/Books 2021.05.25

[Clean Code] 8장 경계

Clean Code 스터디 내용 정리; 8장 경계 오픈 소스, 외부 패키지 등의 외부 코드를 우리 코드에 깔끔하게 통합하는 기법과 기교에 대해 설명한다. 1. 새로운 클래스로 경계를 감싼다. 경계 인터페이스를 이용할 때 여기 저기 인수로 넘기고 반환값으로 사용하면 인터페이스가 변할 경우 수정할 코드가 상당히 많아진다. 따라서 경계 인터페이스의 인스턴스는 이를 이용하는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의해야 한다. 새로운 클래스로 경계 인터페이스를 캡슐화하면 해당 클래스 안에서 객체 유형을 관리하고 변환하기 때문에 인터페이스의 변경에 따른 영향을 통제할 수 있다. // 1. Object를 변환하는 코드가 여러 번 중복되기에 깨끗한 코드가 아님. Map sensors = new HashMap(..

STUDY/Books 2021.05.24

[Clean Code] 7장 오류 처리

Clean Code 스터디 내용 정리; 7장 오류 처리 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라고 볼 수 없기 때문에, 이번 장에서는 우아하고 고상하게 오류를 처리하는 기법과 고려 사항 몇 가지를 다룬다. 미확인 예외를 사용한다. 오류 코드보다는 예외를 사용하여 프로그램 논리와 오류 처리 코드를 분리하는 게 좋다. 확인된 예외도 유용한 때가 있긴 하지만, 일반적인 애플리케이션에서는 이익보다는 연쇄적인 수정때문에 일어나는 비용이 더 크므로 쓰지 않는 편이 낫다. 예외를 던질 때는 오류 메시지에 전후 상황에 대한 정보를 담아 함께 넘겨준다. try-catch-finally 부터 작성한다. 예외가 발생할 코드를 짤 때는, 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스..

STUDY/Books 2021.05.23

[Clean Code] 6장 객체와 자료 구조

Clean Code 스터디 내용 정리; 6장 객체와 자료구조 이 장에서는 객체와 자료구조의 차이와 특징 그리고 바람직한 구현방법을 소개한다. 객체 추상화 뒤로 자료를 숨긴다. 구현을 외부로 노출하지 않는다. 자료를 다루는 함수만 공개한다. 객체 지향 코드는 새로운 함수를 추가하려면 모든 클래스를 고쳐야 하기 때문에 어렵지만, 기존 함수를 변경하지 않으면서 새 클래스를 추가하기는 쉽다. public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } public class..

STUDY/Books 2021.05.21

[Clean Code] 5장 형식 맞추기

Clean Code 스터디 내용 정리; 5장 형식 맞추기 프로그래머라면 코드 형식을 맞추기 위한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 코드 형식은 의사소통의 일환이기에 너무도 중요하다. 코드는 바뀌고 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다. 이번 장에서는 원활한 소통을 돕는 코드 형식에 대해 다룬다. 1. 적절한 길이를 유지한다. 한 행은 120자 미만으로, 한 파일은 200줄 정도로 유지하도록 하자. 일반적으로 긴 것보다는 짧은 게 이해하기 쉽다. 2. 공백으로 개념을 분리한다. 가로 공백으로 별개의 개념이라는 것을 강조할 수 있고, 일련의 행 묶음을 빈 행으로 분리함으로써 완결된 생각을 분리할 수 있다. 들여쓰기 또한 범위로 이뤄진 계층을 표현하는 데에 사용되므로 짧고 간단한 ..

STUDY/Books 2021.05.18

[Clean Code] 4장 주석

Clean Code 스터디 내용 정리; 4장 주석 주석의 불필요성과 좋은 주석, 나쁜 주석의 구체적인 예시에 대해 다룬다. 이 글에서는 그 중에서 주석과 좋은 주석의 내용에 대해 정리하였다. 주석은 필요악 코드 자체로 의미가 충분히 전달된다면 주석은 전혀 필요하지 않다. 주석은 코드만으로 표현할 방법을 찾지 못해 할 수 없이 사용하게 되는 것이다. 따라서 주석이 필요한 상황에 처하면 코드로 의도를 표현할 방법이 정말 없는지 곰곰이 생각해보자. 주석은 가능한 줄이도록 노력하자. // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) if (employee.isEligibleForFullBenefits..

STUDY/Books 2021.05.16