본문 바로가기
책/이펙티브 코틀린

2부 코드설계 > 3장 재사용성

by 정선한 2022. 7. 27.
728x90
반응형
2부 코드설계 > 3장 재사용성
 
1. 책에서 기억하고 싶은 내용
 
knowledge를 반복하여 사용하지말라.

- 모든 것은 변화하고, 우리는 이에 대비해야 합니다. 변화할 때 가장 큰 적은 knowledge가 반복되어 있는 부분입니다.
- knowledge의 반복은 프로젝트의 확장성(scalable)을 막고, 쉽게 깨지게(fragile)하게 만듭니다. 다행히도 개벌자는 knowledge 반복을 줄일 수 있는 도구와 기능을 사옹할 수 있습니다.
- 여러종류의 추상화를 표현할 수 있는 솔루션. (변화로부터 코드 보호하려면 추상화를 사용하라)
- 단일 책임 원칙이란 '클래스를 변경하는 이유는 단 한 가지여야 한다'라는 의미이다 
- 서로 다른 곳에서 사용하는 knowledge는 독립적으로 변경할 가능성이 많습나다. 따라서 바슷한 처리를 하더라도, 완전히 다른 knowledge로 취급하는 것이 좋습니다.
- 다른 knowledge는 분리해 두는 것이 좋습니다. 그렇지 않으면, 재사용해서는 안 되는 부분을 재사용하려는 유혹이 발생할 수 있습니다.

일반적인 알고리즘을 반복해서 구현하지 말라.

- 일반적인 알고리즘을 반복해서 만들지 말라. 우선 대부분 stdlib이 이미 정의되어 있을 가능성이 높습니다. 따라서 stdlib를 공부해 두면 좋습니다. stdlib에 없는 일반적인 알고리즘이 필요하거나, 특정 알고리즘을 반복해서 사용해야 하는 경우에는 프로젝트 내부에 직접 정의하기 바랍니다. 일반적으로 이런 알고리즘들은 확장 함수로 정의하는 것이 좋습니다

일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라.

- 프로퍼티 위임을 사용하면, 이외에도 변화가 있을 때 이를 감지하는 observable패턴을 쉽게 만들 수 있다. (프로퍼티 델리게이트)
- 프로퍼티 델리게이트는 프로퍼티와 관련된 다양한 조작을 할 수 있으며, 컨텍스트와 관련된 대부분의 정보를 갖습니다. 

일반적인 알고리즘을 구현할 때 제네릭을 사용하라.

- 타입 argument를 사용하는 함수(타입 파라미터를 갖는 함수)를 제네릭 함수라고 부른다.
- 타입 파라미터의 중요한 기능 하나는 구체적인 타입의 서브타입만 사용하게 타입을 제한하는 것이다.
- 코틀린 자료형 시스템에서 타입 파라미터는 굉장히 중요한 부분이다. 일반적으로 이를 사용해서 type-safe 제네릭 알고리즘과 제네릭 객체를 구현한다. 타입 파라미터는 구체 자료형(concrete type)의 서브 타입을 제한할 수 있다. 이렇게 하면 특정 자료형이 제공하는 메서드를 안전하게 사용할 수 있다.

타입 파라미터의 섀도잉을 피하라.

- 프로퍼티와 파라키터가 동일한 이름을 가질 수 있다. 이렇게 되면 지역 파라미터가 외부 스코프에 있는 프로퍼티를 가리게 되는데 이를 섀도잉(shadowing)이라고 부른다.

제네릭 타입과 variance 한정자를 활용하라.

- invariant(불공병성) : 제네릭 타입으로 만들어지는 타입들이 서로 곤련성이 없다는 의미
- varience 한정자를 붙임으로서 타입 파라미터를 covariant(공변성)으로 만들 수 있다.
- 코틀린 함수의 모든 파라미터 타입은 contravariant이다. 또한 모든 리턴 타입은 covariant이다.
- 함수 타입을 사용할 때는 자동으로 variance 한정자가 사용된다. 코틀린에서 자주 사용되는 것으로는 convariant(out 한정자)를 가진 List가 있다. 이는 variance 한정자가 붙지 않은 MutableList 와 다르다.
- 코틀린은 public in 한정자 위치에 convariant 타입의 파라미터 (out 한정자)가 오는 것을 금지한다. 가시성을 private로 제한하면 오류가 발생하지 않으며, 객체 내부에서는 업 캐스트 객체에 convariant (out 한정자)를 사용할 수 없다.
convariant (out 한정자)는 public out 한정자 위치에서도 안전하므로 따로 제한되지 않는다. 이러한 안정성의 이유로 생성되거나 노출되는 타입에만 convariant (out 한정자)를 사용한다. 이러한 프로퍼티는 일반적으로 producer 또는 immutable 데이터 홀더에 많이 사용된다.
- variance 한정자의 위치는 크게 두 위치에 사용할 수 있다. 첫 번째는 선언 부분, 두 번째는 클래스와 인터페이스를 활용하는 위치이다.

공통 모듈을 추출해서 여러 플랫폼에서 재사용하라.

- 코틀린 백엔드 프레임워크 Ktor
- 코틀린의 굉장한 점 중 하나는 코틀린이 자바스크립트로 컴파일될 수 있다는 것이다. 

- 코틀린/JVM을 사용한 백엔드 개발 : 스프링, Ktor
- 코틀린/JS를 사용한 웹 사이트 개발 : 리액트 등
- 코틀린/JVM을 사용한 안드로이드 개발 : 안드로이드 SDK등
- 코틀린/네이티브를 통해 Objective-C, Swift : IOS 프레임워크 개발
- 코틀린/JVM을 사용한 데스크톱 개발 : TornadoFX등
- 코틀린/네이티브를 사용한 라즈베리파이, 리눅스, macOS 프로그램 개발

2. 궁금한 내용 과 잘 이해되지 않은 내용에 대한 정리

@제네릭 타입과 variance 한정자를 활용하라.[추가 참고자료 필요]
@공변성, 반변성, 반공변성
@response

728x90
반응형