의도는 메시징이다. 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 커뮤니케이션하는가에 달려 있다. 군중 속에서 책임이 분산되어 흩어지면 책임을 무시하려고 합니다. 이를 책임감 분산이라고 부릅니다. 명확한 책임이 존재하지 않으면 이를 타인의 책임으로 회피해버립니다. 실제 응급 환자 발생 시 훈련했을 때 도움을 청할 대상을 특정하여 도움을 요청하라고 교육받은 경험이 있습니다. '도와주세요'라고만 말하면 이는 타인의 책임으로 인식하여 개인의 실질적인 행동으로 이어지지 않을 수도 있기에 이처럼 교육하는 것 같습니다. 여기서 중요한 점은 명확한 책임과 역할을 가지고 협력에 참여해야 한다는 점입니다. 자율적인 책임 객체지향 공동체를 구성하는 기본 단위는 자율..
이번 장에서는 오픈 소스로 공개한 코드의 리팩토링을 진행하고 있었습니다. 읽으면서 유용했던 내용들만 정리해보고자 합니다. 경계값 검사를 확실하게 진행해야 한다. 추상 클래스에서는 구현을 숨기는 편이 좋기에 명명할 때도 주의해서 결정한다. 불필요한 주석은 제거한다. 일반적으로 상위 클래스는 하위 클래스를 몰라야 바람직하다. ENUM은 독자적인 소스 파일로 옮긴다. 정적 변수와 정적 메서드는 새 클래스로 옮긴다. 마치며 코드가 깨끗해지고 명확해지면 코드가 가지는 가치가 높아집니다. 그 가치는 연쇄적으로 영향을 주기에 처음부터 가치 있는 코드를 작성하도록 많은 시간 투자가 필요합니다.
JUnit 프레임워크 JUnit은 저자가 많지만, 시작은 켄트 벡과 에릭 감마, 두 사람으로부터 시작된다. 두 사람은 비행기를 타고 가다가 JUnit을 만들었다고 한다. 만든 모듈을 훌륭하지만 몇 가지 리팩토링 상황을 소개하고 있다. 의도를 명확히 표현하려면 조건문을 캡슐화해야 한다. 부정문은 긍정문보다 이해하기 약간 더 어렵다. 첫 문장 if를 긍정으로 만들어 조건문을 반전한다. 마치며 보기에 깨끗하고 훌륭한 코드라도 개선이 불필요한 코드는 존재하지 않습니다. 코드를 깨끗하게 만드는 책임은 우리 모두에게 있기에 코드를 깨끗하게 작성하도록 노력하는 습관이 필요합니다.
Args 구현 매개변수에 파싱에 관한 인터페이스를 정의하고 구현체를 구현한 것인데 좋은 스타일인 것 같아 정리해보았습니다. public interface ArgumentMarshaler { void set(Iterator currentArgument) throws ArgsException; } public class BooleanArgumentMarshaler implements ArgumentMarshaler { private boolean booleanValue = false; public void set(Iterator currentArgument) throws ArgsException { booleanValue = true; } public static boolean getValue(Argumen..
동시적인 문제를 생각하지 않고 스레드를 하나만 실행하는 코드는 작성하기 쉽습니다. 스레드를 동시에 돌리는 코드 작성은 고려해야 할 사항들이 많기에 어려움이 존재합니다. 이번 장에서는 스레드를 동시에 돌리는 이유와 어려움에 대처하고 깨끗한 코드를 작성하는 방법을 제안합니다. 또한 동시성을 테스트하는 방법과 문제점에 관해 얘기합니다. 동시성이 필요한 이유? 동시성은 무엇과 언제를 분리하는 작업입니다. 이를 분리하게 되면 애플리케이션 구조와 효율이 극적으로 나아집니다. 하나의 작업이 끝나야만 다음 작업으로 넘어가게 된다면 응답 시간이 매우 길어지는 문제가 발생합니다. 동시성을 사용하면 응답 시간도 줄일 수 있는 장점이 존재합니다. 동시성은 어렵기에 미신이 존재하기도 합니다. 동시성은 항상 성능을 높여준다. 웹..