[코틀린을 다루는 기술] 책에서 다루는 내용

timothy jeong·2022년 2월 25일
0

코틀린

목록 보기
18/20

책의 내용

추상화를 사용하기

여러 계산에 존재하는 공통 패턴을 인식해 이런 패턴을 추상화함으로써 같은 패턴을 쓰고 또 쓰는 일(boilerplate)을 피한다.

불변성 우선 사용

코틀린에서는 mutation point 를 제안하는 방법을 여럿 제시하는 등 프로그램을 만들때 불변성을 먼저 고려하는 것을 장려하고 있다. 구체적으로 어떻게 불변성을 먼저 이용할 수 있는지 책에서 살펴본다.

참조 투명성의 이해

참조 투명성은 결정적인 프로그램(deterministic program), 프로그램의 결과를 예측하고 추론 할 수 있는, 을 작성할 수 있도록 도와주는 기법이다. 결정적인 프로그램은 같은 입력에 대해서 같은 결과를 내놓는다. 이런 프로그램은 항상 동작을 알 수 있기 떄문에 더 안전하고 더 쉽게 조합하고 유지 보수하기 용이하며 테스트하기 쉽다. 그리고 테스트하기 쉬운 프로그램은 보통 더 많은 테스트가 이뤄지며, 그 결과 신뢰성이 더 높다.

상태 변이(state mutation) 공유 캡슐화

변경 불가능한 데이터를 사용하면 상태 변이를 실수로 공유하는 일을 막을 수 있다. 상태 변이를 공유하면 동시 처리나 병렬 처리에서 데드락, 라이브락, 스레드 기아, 최신 데이터 미반영 같은 문제가 발생할 수 있다. 하지만 상태 변이를 공유하지 못하게 만드면 오로지 상태 변이를 공유해야만 할때 문제가 발생한다.

애초에 상태 변이를 공유하지 않으면 프로그램이 더 안전해지겠지만, 애초에 병렬 프로그래밍을 한다는 것은 상태 변이를 공유한다는 것을 암시한다. 상태 공유가 일어날 때마다 사용되는 용례를 추상화하고 캡슐화해서 테스트함으로써 손쉽게 안전한 프로그래밍이 가능하도록 만든다.

Java 병렬 프로그래밍의 이해 : Lock 을 건다는 것은 한번에 하나의 쓰레드의 접근만 허용한다는 것이다.
Dead Lock : 데드락은 서로 다른 쓰레드가 서로가 필요한 자원에 대해 락을 획득하고 있어 둘 모두 필요한 자원을 획득하지 못하여 작업 처리가 끝나지 않고 무한 대기하게 되는 상황이다.
Live Lock : 라이브 락은 쓰레드들이 동시에 실행되어 락의 해제와 획득이 반복적으로 일어나지만 실제로는 어떤 작업도 처리하지 못하는 상황이다.
Thread Starvation : 쓰레드 기아 상태는 공유 자원에 대한 쓰레드들이 우선순위를 부여받은 상황에서 우선 순위가 낮은 쓰레드에게 순서가 돌아가지 않아 어떤 작업도 하지 못하는 상황이다.

제어 흐름과 제어 구조 추상화

전통적인 프로그램은 루프나 조건 테스트 같은 제어 구조로 구성된다. 이러한 구조는 잘못 사용되기 쉬워서 프로그래머들 이러한 제어를 추상화하고 싶어한다.

올바튼 타입 사용

전통적인 프로그래밍에서는 단위를 고려하지 않고 int 나 String과 같은 타입을 사용하여 양을 표현한다. 이로인해 많은 문제들이 발생할 수 있는데, 코틀린에서는 ㄱ밧 타입을 사용하면 이러한 문제를 방지할 수 있다.

지연 계산 활용

일반적으로 대부분의 언어는 즉시(strict) 계산을 수행한다. 이는 메서드나 함수를 호출하기 전에 전달되는 인자들을 먼저 계산한다는 뜻이다. 반대로 지연(lazy) 계산은 어떤 요소가 실제로 쓰일 때만 계산을 수행하는 방식이다.
예를 들어 if ~ else 문에서 조건식은 즉시 게산되지만, if 가 실행될지 else 가 실행될지는 지연하여 결정된다. 이러한 지연 계산을 명시적으로 이용할 수만 잇다면 더 효율적인 프로그래밍을 작성할 수 있다.

profile
개발자

0개의 댓글