반응형

엘레강트 17

[엘레강트 오브젝트] 4-2장 체크 예외(checked exception)만 던지세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 Checked Exception vs Unchecked Exception 꼭 필요한 경우에만 예외를 잡자 항상 예외를 체이닝하자 단 한번만 복구하자 관전-지향 프로그래밍을 사용하자 하나의 예외 타입만으로도 충분하다 1. Checked Exception vs Unchecked Exception 두 Exception의 차이는 이 글을 참조해주세요. unchecked exception fun length(file: File): Int { if (!file.exists()) throw IllegalArgumentException..

Study/object 2021.10.06

[엘레강트 오브젝트] 4-1장 절대 NULL을 반환하지 마세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 무너진 신뢰 빠르게 실패하기 vs 안전하게 실패하기 NULL 대안 주관적인 생각 1. 무너진 신뢰 이전 글에서 메서드 인자에 Null을 전달하는 것은 매우 안좋은 방법이라고 소개하였습니다. 마찬가지로 NULL을 반환하는 방법 또한 안좋은 방법입니다. class Page( val title: String? ) { fun title(): String? { if (title == null) { return null // null return } return "Elegant Objects" } } 위와 같은 Page 클래스가 있..

Study/object 2021.10.05

[엘레강트 오브젝트] 3-7장 인트로스펙션과 캐스팅을 피하세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 인트로스펙션을 피하세요 캐스팅을 피하세요 정리 1. 인트로스펙션을 피하세요 타입 인트로스펙션은 리플렉션이라는 더 포괄적인 용어로 불리는 여러 가지 기법들 중 하나입니다. 리플렉션을 사용하면 메서드, 명령어, 구문, 클래스, 객체, 타입을 변경할 수 있습니다. 리플렉션은 매우 강력한 기법이지만 유지보수를 어렵게 만드는 안좋은 기법입니다. fun size(items: Iterable): Int { if (items is Collection) { return items.size } var size = 0 for (item in..

Study/object 2021.09.27

[엘레강트 오브젝트] 3-6장 부 ctor 밖에서는 new를 사용하지 마세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 잘못된 의존성 주입 올바른 의존성 주입 정리 1. 잘못된 의존성 주입 잘못된 의존성 주입은 종종 치명적인 결과를 초래합니다. 코드로 살펴보겠습니다. class Cash( private val dollars: Int ) { fun euro() = Exchange().rate("USD", "EUR") * this.dollars } euro() 메서드 안에서 Excahnge 인스턴스를 생성하고 있습니다. 이 코드의 문제는 '하드코딩된 의존성'입니다. Cash 클래스는 Exchange 클래스에 직업 연결되어 있기 때문에, 의존성..

Study/object 2021.09.26

[엘레강트 오브젝트] 3-5장 절대 getter와 setter를 사용하지 마세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 객체 대 자료구조 좋은 의도, 나쁜 결과 접두사에 관한 모든 것 1. 객체 대 자료구조 먼저 getter와 setter를 사용하지 말아야하는 이유를 알아보기 전에 객체와 자료구조에 대해서 짚고 넘어가겠습니다. 자료구조 class Cash( var dollars: Int ) // use val cash = Cash(20) // get val dollars = cash.dollars // set cash.dollars = 30 // print println("dollars:: ${cash.dollars}") 자료구조는 단순한..

Study/object 2021.09.25

[엘레강트 오브젝트] 3-4장 충성스러우면서 불변이거나, 아니면 상수이거나

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 상태와 데이터 가변 객체와 불변 객체 정리 1. 상태와 데이터 이전 2.6 섹션에서 불변성에 다루었습니다. 이번 섹션을 정리하기 전에 다시 한 번 불변성에 대해 명확하게 정리하려고 합니다. 먼저 상태(state)와 데이터(data)에 대해서 명확하게 짚고 넘어가겠습니다. class WebPage( private val uri: URI ) { fun content(): String { // 외부 연동하여 웹페이지의 Content을 읽어 반환 return "" } } 상태: uri 데이터: content() 메서드를 호출하여..

Study/object 2021.09.18

[엘레강트 오브젝트] 3-3장 인자의 값으로 NULL을 절대 허용하지 마세요.

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 객체를 존중하라 NULL Object를 이용하라 외부 영향 1. 객체를 존중하라 객체는 목표를 가지고 역할을 수행하고 있습니다. 하지만 객체의 인자값에 NULL을 허용한다면 객체가 역할을 수행하는 것을 무시하는 행위가 됩니다. // NULL 허용 fun find(mask: String?): Iterable { // 경로 탐색 // mask가 null일 경우 모든 파일 검색 // mask를 이용한 파일 검색 } // NULL 허용하지 않는 경우 fun find(mask: String): Iterable fun findAll..

Study/object 2021.09.17

[엘레강트 오브젝트] 3-2장 정적 메서드를 사용하지 마세요.

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 정적 메서드 vs 객체 선언형 스타일 vs 명령형 스타일 유틸리티 클래스 싱글톤 패턴 함수형 프로그래밍 조합 가능한 데코레이터 주관적인 생각 1. 정적 메서드 vs 객체 정적메서드는 어플리케이션이 실행될 때 메모리에 올라가기 때문에 새로운 클래스를 생성하지 않고 빠르게 실행할 수 있습니다. class WebPage { companion object { fun read(url: String): String { // HTTP 요청 생성 // UTF-8 문자열로 변환 return "" } } } // use val html =..

Study/object 2021.09.15

[엘레강트 오브젝트] 3-1장 5개 이하의 public 메서드만 노출하세요.

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 작은 객체 정의 작은 객체 정의 우아하고 유지보수가 가능하고 응집력이 높고 테스트하기가 용이한 객체는 작은 객체입니다. 작은 객체에 대한 자세한 정의는 적은 public메서드를 갖는 것입니다. 하나의 객체가 하나의 public 메서드와 20개의 private 메서드를 갖는다면 이 객체는 작은 객체로 분류합니다. 이 책에서 주장하는 public 메서드의 개수는 5개 이하로 주장하고 있습니다. ( 하지만 정확하게 5개로 주장하지 않는다 대체로 이정도? ) public private 큰 객체 10 0 작은 객체 1 20 클래스..

Study/object 2021.09.14

[엘레강트 오브젝트] 2-9장 인터페이스를 짧게 유지하고 스마트(smart)를 사용하세요.

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 인터페이스를 정의하는 방법 스마트 클래스 나중에 배울 데코레이터 1. 인터페이스를 정의하는 방법 인터페이스는 구현자에게 너무 많은 것을 요구하면 안됩니다. // Bad interface.. interface Exchange { fun rate(target: String): Float fun rate(source: String, target: String): Float } 위 코드는 나쁜 설계의 인터페이스입니다. 구현자에게 동일한 기능을 수행하는 rate() 메서드에서 속성값만 다르게 구현하라고 강요하고 있습니다. 이럴 경..

Study/object 2021.09.07

[엘레강트 오브젝트] 2-8장 모의 객체(Mock) 대신 페이크 객체(Fake)를 사용하세요.

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 Mock은 Bad Practice Fake 객체 사용 정리 1. Mock은 Bad Practice TDD 관련 블로그, 영상을 살펴본다면 Mock 방식은 매우 위험한 방식이라고 소개합니다. 이유는 너무 간편하게 사용할 수 있어 남용하기 편하기 때문입니다. Mock이 많아진다면 그만큼 객체 간 강한 결합력을 가지고 있다는 말입니다. 이 책에서도 Mock에 대해서는 비판적이게 평가하고 있습니다. 예제를 통해 살펴보겠습니다. class Cash( private val exChange: Exchange, private val c..

Study/object 2021.09.05

[엘레강트 오브젝트] 2-7장 문서를 작성하는 대신 테스트를 만드세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 문서를 작성할 수 밖에 없는 이유 코드는 깔끔하게 작성하라 단위 테스트를 추가하라 주관적인 생각 1. 문서를 작성할 수 밖에 없는 이유 코드를 이해하는 데 있어 추리(?)를 하게 되거나 복잡하게 작성했을 때 반드시 문서를 작성하게 됩니다. 문서를 작성해야만 하는 코드 class Study { // study를 시작한다. fun a() {} // study를 종료한다. fun b() {} } 위 코드에서 주석이 없다면 a(), b() 메서드가 하는 역할을 알아내려면 모든 로직을 분석해야합니다. 유지보수 최악!! 2. 코드는..

Study/object 2021.09.01

[엘레강트 오브젝트] 2-6장 불변 객체로 만드세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 불변이란? 식별자 가변성(Identity Mutability) 실패 원자성(Failure Atomicity) 시간적 결합(Temporal Coupling) 부수효과 제거(Side effect-free) NULL 참조 없애기 스레드 안정성 더 작고 더 단순한 객체 주관적인 생각 1. 불변이란? Immutable, 즉 변경할 수 없음을 의미합니다. 예시로 살펴보겠습니다. 가변 객체 먼저 가변 객체는 내부 속성값을 변경이 가능한 객체입니다. // 가변 객체 class Cash( private var dollars: Int ) ..

Study/object 2021.08.31

[엘레강트 오브젝트] 2-5장 퍼블릭 상수(Public Constant)를 사용하지 마세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 퍼블릭 상수 결합도 증가 응집도 저하 개선 클래스의 단위를 최소화하자 결론 주관적인 생각 1. 퍼블릭 상수 상수(Constant) 는 public static final 로 선언되며 객체 사이에서 데이터를 공유하기 위해 사용되는 메커니즘입니다. 하지만 객체지향에서는 객체들 간의 어떤 것도 공유해서는 안됩니다. 예제를 통해 살펴보겠습니다. 올바른 예 class Records( private val records: MutableList ) { companion object { private const val EOL = "\r..

Study/object 2021.08.21

[엘레강트 오브젝트] 2-4장 메서드 이름을 신중하게 선택하세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 빌더는 명사다 조정자는 동사다 빌더와 조정자 혼합하기 Boolean 값을 결과로 반환하는 경우 빌더와 조정자 Type Description Example 빌더 ( Builder ) 뭔가를 만들고 새로운 객체를 반환하는 메서드 반환타임은 절대 void가 될 수 없음 fun pow(base: Int, power: Int): Int fun speed(): Float fun employee(id: Int): Employee fun parsedCell(x: Int, y: Int) 조정자 ( Manipulator ) 객체로 추상화한..

Study/object 2021.08.18
728x90
반응형