본문 바로가기
프로그래밍 놀이터/Kotlin, Coroutine

[Effective Kotlin] Item 11 : Design for readability

by 돼지왕 왕돼지 2022. 3. 8.
반응형

이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서
Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다.

 

#
어떤 멍청이도 컴퓨터가 이해할 수 있는 코드를 작성할 수 있다. 그러나 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 작성한다.

 

#
프로그래머들이 코드를 작성하는데 1분 쓴다면, 읽는데 10분을 사용한다는 통계가 있다.
프로그래밍은 대부분이 '쓰기' 보다는 대부분 '읽기' 라고 할 수 있다.

 

 

Reducing cognitive load

#

if (person != null && person.isAdult){
	view.showPerson(person)
}else{
	view.showError()
}

vs

person?.takeIf { it.isAdult }
	?.let(view::showPerson)
	?: view.showError()

 

#
코드 가독성은 우리가 얼마나 idiom 에 익숙한가에 달려 있다.
Kotlin expert 에게 위의 두 코드는 동일한 난이도로 익힐 수 있다.
하지만 Kotlin beginner 에게 두번째 코드는 퍼즐을 푸는 것일 수 있다.

모든 사람이 Kotlin 만 쓰는 것이 아니기 때문에 모든 언어에서 general 하게 받아들일 수 있는 첫번째 것이 가독성이 좋다고 말할 수 있겠다.

 

#
수정의 측면에서도 첫번째 것이 선호된다.

if (person != null && person.isAdult){
	view.showPerson(person)
	view.hideProgressWithSuccess()
} else{
	view.showError()
	view.hideProgress()
}

vs.

person?.takeIf { it.isAdult }
	?.let{
		view.showPerson(it)
		view.hideProgressWithSucceess()
	} ?: run {
		view.showError()
		view.hideProgress()
	}

 

#
디버깅도 앞선 것이 더 쉽다.

 

#
덜 일반적이며, 더 창의적인 구조는 보통 유연성이 떨어지곤 한다.
예를 들어 if(person == null){ } 블락을 구분하고 싶다면, 첫번째 녀석은 if, else 분기만 하면 되지만, 2번째 것은 구조가 또 틀어진다.

 

#
여기서 잠깐!
심지어 2개의 동작은 다르다!!

 

#
더 적은 양의 코드도 좋다.
하지만 인지 부하(cognitive load)를 줄이기 위해 익숙하고 더 잘 읽히는 패턴, 구조를 사용하는 것이 좋다.

 

 

Do not get extreme

#
얼마나 balance 를 잘 이루는가가 art 이다.

 

 

Conventions

 

 

 

반응형

댓글