구현 3

[Kotlin] 클래스 위임과 by, Decorator(데코레이터) 패턴

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 보통 객체지향 시스템을 설계할 때 시스템을 취약하게 만드는 것은 구현 상속(implementation inheritance)에 의해 발생한다. 이와 관련해서는 이 글과 이 글에서 설명한다. 그래서 코틀린은 기본적으로 클래스를 `final` 로 하여 기본적으로 상속을 금지하고 있다.(not `open`) Decorator(데코레이터) 패턴 하지만 종종 상속을 허용하지 않는 클래스에 새로운 동작을 추가해야 할 때가 있다. 이럴 때 사용하는 일반적인 방법이 Decorator(데코레이터) 패턴이다. 이 패턴의 핵심은 상속을 허용하지 않는 클래스(기존 클래스) 대신 사용할 수 있는 새로운 클래스(데..

Kotlin 2024.01.10

[Kotlin] 코틀린 인터페이스 & 상속 제어 변경자

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이전에 코틀린 클래스와 프로퍼티 기초를 배웠다. 이제부터 코틀린 클래스, 객체, 인터페이스에 대해 더 깊이 다룰 것이다. 먼저 코틀린의 클래스 계층을 정의하는 방식과 자바의 방식을 비교하자. 코틀린 인터페이스 코틀린 인터페이스는 자바 8 인터페이스와 비슷하다. 코틀린 인터페이스 안에는 추상 메서드 뿐 아니라 구현이 있는 메서드도 정의할 수 있다. (자바 8 의 디폴트 메서드처럼) 하지만 아무런 상태도 들어갈 수는 없다. 간단한 인터페이스 `Clickable` interface Clickable { fun click() } 이 인터페이스를 구현하는 구현 클래스(추상 클래스가 아닌)는 `cli..

Kotlin 2024.01.04

설계 품질과 트레이드오프 - 코드로 이해하는 객체지향 프로그래밍

이전 글 https://sh1mj1-log.tistory.com/133 에서 객체지향 설계의 핵심은 역할, 책임, 협력 이라고 했습니다. 협력: 애플리케이션의 기능을 구현하기 위해 메시지를 주고받는 객체들 사이의 상호작용. 책임: 객체가 다른 객체와 협력하기 위해 수행하는 행동. 역할: 대체 가능한 책임의 집합. 책임이 객체지향 애플리케이션 전체의 품질을 결정합니다. 책임 할당은 응집도와 결합도와 같은 설계 품질과 깊이 연관되어 있습니다. 설계는 변경을 위해 존재하고 변경에는 비용이 발생합니다. 좋은 설계는 비용을 최소화하는 것이지요. 응집도가 높고 결합도가 낮은 것이 좋은 설계입니다. 그를 위해서 객체의 상태가 아닌 행동에 집중합니다. 또 그를 위해 객체의 책임에 초점을 맞추는 것이 좋습니다. 이번 장..