3/3 수업

hyunji·2023년 3월 3일
0

GWT

  • 테스트 코드 쉽게 만들기

data class Car(
	val distance: Int,
    val name: String){
    
	fun move(): Car{
   		return this.copy( distance = distance + 1 )
    }
}
  • val은 불변이 일부만 맞다
    * 조작할 수 있는 방법은 추후에.......
  • copy를 큰 규모에서 많이 사용되면 문제가 될수 있다. 이걸 해결하고 싶을 땐 tree를 잘 공부해봐~

순수함수

  • 중간에 함수의 기능 제외 println 이런것도 포함되면 순수함수가 깨진다.
fun main(){
	val list = listOf(1,2,3)
    val newList = list + 4
    println(newList)
}

불변 프로그래밍을 하고 싶다면..

  • Cars(immutable) => Car(immutable) =. Distance(val)
  • Cars는 불변이 아니여도 됨. 얘까지 불변이면 어려워

시퀀스

  • 매 호출마다 인스턴스를 생성하는게 아니라 흐름으로 본다.
  • 필요할 때 계산된다.
data class Crew(
	val id: Int,
    val missionDone: Boolean
)

fun main(){
	val crews = (1..10).map { Crew(it, false) }
    
    val selected = crews
    	.filter { it.id % 2 == 0 }
        .map { it.copy(missionDone = true) }
        .take(1)
        
   	println(selecte) //의도된 결과가 출력됨
}
  • 하지만 이 코드를 돌릴 때 수많은 실행결과가 생성되었다.
  • filter,map은 매번 새로운 인스턴스를 생성함
data class Crew(
	val id: Int,
    val missionDone: Boolean
)

fun main(){
	val crews = (1..10).map { Crew(it, false) }
    
    val selected = crews
    	.asSequence()
    	.filter { it.id % 2 == 0 }
        .map { it.copy(missionDone = true) }
        .take(1)
        .toList()
        
   	println(selecte) //의도된 결과가 출력됨
}
  • sequence로 바뀌면 이렇게 된다! GOOD
  • 만약 sort가 쓰이면 의미 없어진다.
    * WHY?
    stateFull VS stateLess
    : sort : map, filter
    => Less는 독립적으로 사용가능, 상태가 필요 없음..
    => take()는 less지만 상태를 요구할 수 있음
    => Full은 상당한 양의 상태가 필요하다.
  • 만약 sort를 쓰고 싶으면..?
data class Crew(
	val id: Int,
    val missionDone: Boolean
)

fun main(){
	val crews = (1..10).map { Crew(it, false) }
    
    val selected = crews
    	.sortedByDescending{ it.id }
    	.asSequence()
    	.filter { it.id % 2 == 0 }
        .map { it.copy(missionDone = true) }
        .take(1)
        .toList()
        
   	println(selecte) //의도된 결과가 출력됨
}
  • sequence안에 sort를 하면 mutableList가 생성됨
  • 따라서 sequence 전에 sort를 해줘야함
  • suffled도 마찬가지....
  • 시퀀스 뒤에 sort를 쓰면 변환이 list->sequence->mutableList->sequence->list 이런 식으로 되기 때문에 너무 불필요함

0개의 댓글