본문 바로가기

책 리뷰/엘레강트 오브젝트

(11)
엘레강트 오브젝트 [4장 - (2)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. 체크 예외만 던지세요 이 책은 역시나 java 를 기준으로 작성되어 있기 때문에, 체크 예외와 언체크 예외에 대해 얘기하고 있습니다. 간단하게 이에 대해 먼저 보자면 체크 예외는 복구 가능한 예외들이기때문에 에러 핸들링을 꼭 해줘야하고, 코드상에서 이를 해주지 않을 경우 컴파일 에러가 발생합니다. 언체크 예외는 에러 핸들링을 강제하지 않는 예외들이고, 프로그램에 오류가 있을 때 발생하도록 의도되었습니다. 결국 이 부분에서 저자가 얘기하는 바는 체크 예외는 반드시 잡아야하기 때문에, 이런 예외는 가시적이고 해로우면서 안전하지 않다는 ..
엘레강트 오브젝트 [4장 - (1)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. Chapter4. Retirement 절대 null 을 반환하지 마세요 이건 typescript 에선 null 혹은 undefined 를 반환하지 말라는 얘기로 가능할 것 같습니다. public title(): string | null { if (...) { return null; } return 'Elegant Objects'; } 굳이 객체 지향에 초점을 맞추지 않아도 이런식으로 반환 타입이 되어 있는 메서드나 함수는 참 쓰기가 불편했습니다. 이렇게되면 title 이 반환하는 객체에 우리는 신뢰를 할 수 없습니다. null 도 ..
엘레강트 오브젝트 [3장 - (3)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. 부 생성자 밖에서는 new 를 사용하지 마세요 의존성에 대한 얘기를 잠깐 해야할 것 같습니다. class Cash { private readonly dollars: number; public euro(): number { return new Exchange().rate('USD', 'EUR') * this.dollars; } } 위 예시는 의존성에 문제가 있는 코드의 모습을 보여주고 있습니다. 바로 euro 메서드 안에서 new 연산자를 이용해 Exchange 인스턴스를 생성하고 있기 때문인데요. 클래스가 작고 단순하며 값비싼 자원..
엘레강트 오브젝트 [3장 - (2)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. 인자의 값으로 Null 을 절대 허용하지 마세요 typescript 에 이것을 그대로 적용한다면 Null 또는 Undefined 를 절대 허용하지 말아야 할 것입니다. 하나의 메서드를 예시로 보도록 하겠습니다. public find(mask?: string | null): Iterable { // 디렉토리를 탐색해서 *.txt 와 같은 형식의 mask 에 일치하는 파일을 모두 찾음 // mask 거 null 혹은 undefined 일 경우 모든 파일을 반환 } 위 설계를 바탕으로 이제 null 또는 undefined 를 허용하는 f..
엘레강트 오브젝트 [3장 - (1)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. Chapter3. Employment 5개 이하의 public 메서드만 노출하세요 우아하고, 유지 보수가 가능하며 응집력이 높아 테스트하기에도 용이한 객체는 작은 객체입니다. 클래스의 크기를 정하는 기준으로 public 메서드의 개수를 사용하기를 권하며, 적절하다고 생각하는 public 메서드의 개수는 5개입니다. 당연히 저자의 개인 기준이죠. 4번째 메서드를 추가하고 5번째 메서드를 추가하기 전에 클래스의 크기에 대해 고민하기 바랍니다. 클래스가 작으면 메서드와 프로퍼티가 더 가까이 있을 수 있기 때문에 응집도가 높아집니다. 클래..
엘레강트 오브젝트 [2장 - (4)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. 문서를 작성하는 대신 테스트를 만드세요 문서화는 유지보수에 있어 중요한 구성요소입니다. 구체적인 문서 작성이 중요하다기보단, 클래스나 메서드에 관한 추가 정보에 얼마나 쉽게 접근할 수 있는지가 중요합니다. 내가 작성한 코드를 누군가가 읽을 때 세부 사항, 추가 정보 등 부가 설명이 필요하기 때문인데요. 더 읽기 쉬운 코드를 만들기 위해선 코드를 읽을 사람이 거의 주니어 프로그래머라고 가정해야 합니다. 나쁜 프로그래머는 복잡한 코드를 짜고, 훌륭한 프로그래머는 단순한 코드를 짭니다. 이 말은 회사에서의 경험을 같이 생각해보면 참 공감..
엘레강트 오브젝트 [2장 - (3)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. 퍼블릭 상수를 사용하지 마세요 class Records { private static readonly DELIMITER: string = "-"; convert(input: string): void { const list = input.split(Records.DELIMITER); ... } } 저자는 java 기준으로 이 책을 작성했고, java 의 public static final 프로퍼티를 강하게 반대합니다. typescript 에선 final 키워드가 없으니 이를 비슷하게 작성하면 static readonly 상수가 될 것..
엘레강트 오브젝트 [2장 - (2)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. 메서드 이름을 신중하게 선택하세요 네이밍.. 항상 개발 시간 중 상당한 시간을 잡아 먹는 부분입니다. 책의 저자가 얘기하는 경험에 의한 가장 간단한 법칙은 빌더 이름은 명사로, 조정자의 이름은 동사로 짓는 것입니다. 빌더는 뭔가를 만들고 새로운 객체를 반환하는 메서드를 가리키며, 항상 뭔가를 반환합니다. pow(base: number, power: number): number; speed(): number; employee(id: number): Employee; parsedCell(x: number, y: number): stri..