아이템 2 - 변수의 스코프를 최소화하라
아이템 2 - 변수의 스코프를 최소화하라를 정리한 내용입니다.
상태 정의시 변수, 프로퍼티의 스코프를 최소화하는 것이 좋다.
프로퍼티 보다는 지역 변수를 사용하도록 한다.
최대한 좁은 스코프를 갖게 변수를 사용하도록 한다.
코틀린의 스코프는 기본적으로 중괄호로 만들어진다.
스코프를 좁게 만들면 프로그램을 추적하고 관리하기 쉽다.
프로그램의 변경 포인트가 많으면 프로그램을 이해하기 어려워진다.
mutable 프로퍼티의 스코프가 넓어지면 코드를 이해하기 어려워진다.
변수는 if, when, try-catch, Elvis를 표현식들을 활용해 가능한 정의할 때 초기화 하는 것이 좋다.
캡쳐링
에라토스테네스의 체(소수를 구하는 알고리즘)를 구현해본다.
시퀀스를 활용해 소수 구하는 프로그램을 구현해본다.
1
없음
없음
2
2
drop(1).filter { it % 2 != 0 }
drop 2
3
3
drop(1).filter { it % 2 != 0 }
drop(1).filter { it % 3 != 0 }
drop 2, filter 4 drop 3
5
4
drop(1).filter { it % 2 != 0 }
drop(1).filter { it % 3 != 0 } drop(1).filter { it % 5 != 0 }
drop 2, filter 4, 6 drop 3, drop 5
7
5
drop(1).filter { it % 2 != 0 }
drop(1).filter { it % 3 != 0 } drop(1).filter { it % 5 != 0 } drop(1).filter { it % 7 != 0 }
drop 2, filter 4, 6, 8, 10 drop 3, filter 9 drop 5 drop 7
11
...
3, 17, 19, 23, 29
시퀀스의 지연연산으로 인해 prime 변수가 최종값으로 캡쳐 되었을때는 전혀 다른 결과가 나온다.
1
없음
없음
2
2
drop(1).filter { it % 2 != 0 }
drop 2
3
3
drop(1).filter { it % 3 != 0 }
drop(1).filter { it % 3 != 0 }
drop 2, filter 3 drop 4,
5
4
drop(1).filter { it % 5 != 0 }
drop(1).filter { it % 5 != 0 } drop(1).filter { it % 5 != 0 }
drop 2, filter 5 drop 3, drop 4,
6
5
drop(1).filter { it % 6 != 0 }
drop(1).filter { it % 6 != 0 } drop(1).filter { it % 6 != 0 } drop(1).filter { it % 6 != 0 }
drop 2, filter 6 drop 3, drop 4, drop 5,
7
...
8, 9, 10, 11, 12
정리
변수의 스코프는 좁게 만들어서 사용하는 것이 좋다.
var 보다는 val을 사용하는 것이 좋다.
람다에서 변수를 캡처한다는 사실을 꼭 기억해야 한다.
Last updated