객체 7

의인화 & 정보 전문가 패턴 & 리팩터링 _feat(우테코 - 로또)

우테코 2단계 level 2 로또 미션 중에 나는 매우 재미있는 경험을 했다. 이전에는 책에서 봤던 이론적인 내용을 말로는 표현할 수 있었지만, 나의 코드로는 적용하기가 어려웠다. 나는 무언가를 안다는 것은 아래 세가지 단계로 나뉜다고 생각한다. (내 생각이 아니라, 어디서 봤던 것 같기도 하고...) 개념을 알고 설명한다. 그 개념을 똑같이 사용할 수 있다. 그 개념을 다르게 활용할 수 있다. 나는 책에서 보았던 내용을 1단계 정도밖에 알지 못하는 것 같았다. 내가 읽었던 책은 조영호 저자의 객사오('객체지향의 사실과 오해') 와, '오브젝트 - 코드로 이해하는 객체지향 설계', 그리고 마틴 파울러 저자의 '리팩터링 2판' 이다. 의인화 - 객사오 이 책의 66, 67 페이지에서는 아래와 같은 내용이 ..

[Kotlin] 프로퍼티 접근자 로직 재활용: 위임 프로퍼티

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 위임 프로퍼티(delegated property)는 코틀린이 제공하는 convention(관례)에 의존하는 독특하면서 강력한 기능이다. 이를 사용하면 값을 backing property 에 단순히 저장하는 것보다 더 복잡한 방식으로 작동하는 프로퍼티를 쉽게 구현할 수 있다. 또 그 과정에서 접근자(getter/setter)로직을 매번 재구현할 필요도 없다. 예를 들어 자신의 값을 필드가 아닌, DB TABLE 이나 브라우저 세션, 맵 등에 저장할 수 있다. 위임은 객체가 직접 작업을 수행하지 않고 다른 도우미 객체가 그 작업을 처리하게 맡기는 디자인 패턴이다. 이 때 도우미 객체를 위임 객..

Kotlin 2024.01.25

[Kotlin] 객체 타입의 배열 & 원시 타입의 배열

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린 배열 사용하기 자바 `main` 함수의 표준 시그니처에는 배열 파라미터가 들어있다. 코틀린의 `main` 함수에도 배열 파라미터가 들어갈 수 있다. (kotlin 1.3 이후에는 문자열 배열이 들어가지 않아도 된다.) 코틀린 `main` 함수에서 배열 사용 fun main(args: Array) { for (i in args.indices) { // 배열의 인덱스 값의 범위에 대해 iteration (array.indices 확장 함수 사용) println("Argument $i is: ${args[i]}") // array[index] 로 인덱스를 사용해 배열 원소에 접근 } } ..

Kotlin 2024.01.22

[Kotlin] 자바 함수형(SAM) 인터페이스 활용

kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린으로 개발을 할 때 대다수의 API 는 코틀린이 아닌 자바로 작성된 API 일 것이다. 그런데 코틀린 람다를 자바 API 에 사용해도 아무 문제가 없다. 코틀린에서는 자바 메서드에 람다를 넘길 수 있다. 안드로이드 개발시 많이 사용하는 `Button` 클래스는 `setOnClickListener` 메서드를 사용하여 버튼의 리스너를 설정한다. public class Button { public void setOnClickListener(OnClickListener l) { ... } } 여기서 `OnClickListener` 인터페이스는 `onClick` 이라는 메서드만 선언된 인터페이..

Kotlin 2024.01.16

[Kotlin] object 객체: 객체 선언, 동반 객체, 객체 식

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린에서는 `object` 키워드를 다양한 상황에서 사용할 수 있다. 객체 선언(object declaration): 싱글턴을 정의하는 방법 동반 객체(companion object): 주로 어떤 클래스와 관련있는 메서드와 팩토리 메서드를 담을 때 사용 객체 식: 자바의 익명 내부 클래스(anonymous inner class) 대신 사용 모든 경우 클래스를 정의하면서 동시에 인스턴스(객체)를 생성한다. 객체 선언(object declarationi) 인스턴스가 하나만 필요할 때 Singleton(싱글턴) 패턴을 사용하여 이를 구현한다. 자바에서는 보통 클래스의 생성자를 private 으..

Kotlin 2024.01.11

객체 분해 - 코드로 이해하는 객체지향

프로시저 추상화와 데이터 추상화 프로그래밍 언어의 두가지 추상화 메커니즘은 프로시저 추상화(procedure abstraction) 와 데이터 추상화(data abstraction) 입니다 . 각각 소프트웨어가 무엇을 해야 할지를 추상화하고, 소프트웨어가 무엇을 알아야 하는지를 추상화합니다. 시스템을 분해하는 방법을 결정하려면 프로시저 추상화를 중심으로 할 것인지, 데이터 추상화를 중심으로 할 것인지를 결정해야 합니다. 프로시저 추상화를 중심으로 하면 기능 분해(functional decomposition) == 알고리즘 분해(algorithmic decomposition) 을 하는 것이며, 데이터 추상화를 중심으로 하면 데이터를 중심으로 타입을 추상화(type abstraction) == 추상 데이터 ..

프로그래밍 패러다임과 객체, 설계 - 코드로 이해하는 객체지향 설계

지난 1년 간 스프링을 공부하고 안드로이드 앱 개발 프로젝트를 하면서 dependency(의존성)을 관리하는 것이 굉장히 중요하다는 이야기를 계속해서 접했고 공부했습니다. Spring boot 에서 bean 과 @Autowired 라는 어노테이션을 통해 의존성을 주입하고, 안드로이드 코트린에서는 hilt 라는 의존성 관리 라이브러리를 사용하여 의존성을 관리했습니다. 이 의존성은 결국 객체지향의 핵심일 것이다. 실무적인 관점에서 의존성을 공부하고 다루어 보니 객체지향을 더 깊게 공부해야 할 때가 온 것 같습니다. 그래서 '오브젝트 : 코드로 이해하는 객체지향 설계 - 조영호' 책을 읽으면서 정리해보고자 합니다. 책의 머릿말에서 이 책은 실무 경험이 있으며 설계에 대한 고민을 충분히 한 사람들이 읽으면 좋을..