반응형

Study/object 22

[엘레강트 오브젝트] 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

[엘레강트 오브젝트] 2-3장 항상 인터페이스를 사용하세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 토론하기 항상 인터페이스를 사용하세요..? 너무 비현실적인거 아닌가? 결합한다. 객체들은 서로를 필요로 합니다. 설계 시작단계에서는 객체가 어떤 일을 수행하고 다른 객체에게 어떤 서비스를 제공하는 지를 알아야하기 때문에 결합이 유용합니다. 하지만 시간이 지나면서 객체 사이의 강한 결합도가 심각한 문제가 되곤 합니다. 인터페이스는 상호작용하는 다른 객체를 수정하지 않고도 해당 객체를 수정할 수 있도록 만들 수 있습니다. 객체가 다른 객체와 의사소통하기 위해 따라야하는 계약을 일컫습니다. interface Cash { fun mu..

Study/object 2021.08.17

[엘레강트 오브젝트] 2-2장 최소한 뭔가는 캡슐화하세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 토론하기 아무것도 캡슐화하지 않은 클래스 정적 메서드와 동일하며 객체지향 프로그램 관점에서는 잘못된 설계입니다. class Year { fun read() = System.currentTimeMillis() / (1000 * 60 * 60 * 24 * 30 * 12) - 1970 } 예제에서 클래스의 모든 객체는 동일 아무런 상태를 가지고 있지 않으며 행동만을 포함 read() 메서드에서 정적 메서드를 사용 ( 순수한 OOP에서는 정적 메서드를 사용하지 않음 ) 실행으로 부터 인스턴스 생성 고립 생성자에서만 new 연산자를 허..

Study/object 2021.08.16

[엘레강트 오브젝트] 2-1장 가능하면 적게 캡슐화하세요.

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 이 책에서는 4개 또는 그 이하의 객체를 캡슐화할 것을 권장합니다. 내부에 캡슐화된 객체 전체를 가리켜 객체의 '상태' 또는 ' 식별자' 라고 부릅니다. class Cash( private val digits: Int, private val cents: Int, private val currency: String ) Cash 클래스는 3개의 객체를 캡슐화하고 있습니다. 반대로 3개의 객체가 모여서 Cash 클래스의 객체를 식별할 수 있습니다. 상태 관점으로 바라보는 객체 val CashA = Cash(29, 92, "USD")..

Study/object 2021.08.12

[엘레강트 오브젝트] 1-3장 생성자에 코드를 넣지 마세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 토론하기 인자에 손대지 말라 인자에 손대는 클래스 먼저 인자에 손대는(?) 코드를 살펴보겠습니다. class Cash( private val dollars: Int ) { constructor(dollars: String): this(Integer.parseInt(dollars)) } 객체 초기화에는 코드가 없어야하고 인자를 건드리면 안됩니다. 필요하다면 인자를 다른 타입의 객체로 감싸거나 가공하지 않은 형식으로 캡슐화해야합니다. 위 코드를 수정한 예시를 살펴보겠습니다. 인자에 손대지 않는 클래스 class Cash( priv..

Study/object 2021.08.11

[엘레강트 오브젝트] 1-2장 생성자 하나를 주 생성자로 만드세요.

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 토론하기 이 책의 방법론대로 클래스를 작성한다면 메서드 수보다 생성자 수가 많아질 것 입니다. Method Count < Construct Count 이 책에서 권장하는 메서드의 수는 2 ~ 3개이고 생성자는 5 ~ 10 개입니다. 예시를 통해서 자세히 살펴보겠습니다. 먼저 임의의 Cash 클래스를 생성합니다. class Cash( private var dollars: Int ) { } 생성자가 많아질수록 클래스를 더 유연하게 사용할 수 있습니다. Cash(30) Cash("$29.5") Cash(29.5f) Cash(29.5..

Study/object 2021.08.11

[엘레강트 오브젝트] 1-1장 -er로 끝나는 이름을 사용하지 마세요.

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 토론하기 클래스 먼저 클래스에 대해서 간략하게 알아봅니다. 일반적으로 클래스가 객체를 인스턴스화합니다. 클래스를 객체의 템플릿으로 설명하지만 잘못된 설명입니다. 클래스는 객체의 팩토리이다. 클래스는 객체를 꺼내거나 반환할 수 있는 위치이기 떄문에 클래스를 저장소 또는 웨어하우스라고 불러야 합니다. 객체가 살아있는 생명체라면 클래스는 객체의 어머니 본론 클래스 명 짓기에 대해 살펴보겠습니다. class CashFormatter( val dollars: Int ) { fun format(): String { return Strin..

Study/object 2021.08.10
728x90
반응형