1.깊은복사 얕은복사,그리고 방어적 복사
1)얕은복사
주소값 자체를 복사하는 방식
따라서 복사된 객체의 인스턴스는 원본 객체의 인스턴스와 같은 '메모리 주소'를 참조하게 된다.
->복사된 값이 달라지면? 주소값을 공유하기 때문에 원본 객체값도 변화하게된다.
2)깊은복사
객체의 주솟값이 아닌 전체 값이 복사되는 방법.
복사한 객체의 값이 변하지 않는다!
이에 대한 대표적인 예시로는 data class가 있다.
그외
Cloneable
Copy()
Gson
3) 방어적 복사
방어적 복사란
생성자로 받은 가변 데이터들을 외부에서 변경하는 것을 막기 위해 복사본을 이용하는 방
방어적 복사를 할 때에는 3가지 룰을 수행해야한다.
1 일급 컬렉션 객체 내부로 들어오는 list에 대한 방어작 복사
2 컬렉션 내부 객체가 가변객체라면 컬렉션 내부 객체에 대한 방어적 복사 수행
3. 일급 컬렉션 객체 외부로 나가는 list에 대해 방어적 복사 수행
이게 무슨 말일까?
정말 모르겠다.
그래서 곰곰히 생각해보니 선발대 과제를 수행할 때 fragment의 binding 변수에 대해 생각하게 되었다.
private var _binding: TodoFragmentBinding? = null
private val binding get() = _binding!!
_binding의 값이 실제 바인딩 객체를 가르키며
binding은 _bindg의 복사본을 반환한다.
binding을 통해 반환되는 값은 이미 복사가 된 값이므로 외부에서 원본 데이터를 수정하는 일을 방지할 수 있다!
2.object class vs compnion object
object class는 class 자체를 싱글턴 방식으로 만든다.
class선언 할 필요 없이 바로 접근할 수 있다.
compnion object는 클래스 내에서 딱 하나만 선언할 수 있는,그 안에 정의된 멤버는 하나의 객체로 취급하게 해주는 방식이다. 클래스 인스턴스 없이 어떤 클래스 내부에 접근하고 싶을 때 선언한다.
3.frgment에 대해
내기 기존에 newInstance에 bundle을 실어나르는 방식은, 값이 변할 때 마다 frgment를 새로 그려주는 형식이었다.
adpater에서
override fun createFragment(position: Int): Fragment {
return fragments[position].fragment
}
시점에서 frgment는 이미 전부 그려진 상태이므로, instance를 추가를 감지할려면 이 작업을 다시 해줘야하는 것이다.
이에 대한 피드백의 결론은
'frgment'에 직접적으로 접근하여 데이터를 수정하는 방식을 고민해봐야 하는 것 이다.
registerForActivityResult
로 받은 객체를
fun setData(seTtitle: String?, setDetail: String?): Pair<String?, String?> {
title = seTtitle
detail = setDetail
return Pair(title, detail)
}
라는 함수로 값을 받고(해당 함수도 솔직히 제대로된 함수는 아닌 것 같다.)
이런 비슷한 함수를 fragment에서 값을 받아 그 함수 자체에서 notify를 해주는 방식을
fun todoSetData(){
//title과 detail을 받고 표시하기
//add item과 notify를 여기서 함
}
이런 함수를 구현할 예정이다.
참고블로그
1)깊은복사 얕은복사
[Kotlin] 깊은 복사(Deep Copy) 하는 3가지 방법
너 것도 내꺼, 내 것도 내꺼 / Cloneable, copy, Gson
velog.io
https://seosh817.tistory.com/1632
[Kotlin/Java] 얕은복사 vs 깊은복사, Collection의 방어적 복사
[이 글은 NextStep Kotlin TDD, Refactoring, Clean Code 수업 중 공부한 것을 복습하고자 정리한 글입니다.] 얕은 복사란? 주소값 자체를 복사하는 것이다. 복사된 객체의 인스턴스는 원본 객체의 인스턴스와
seosh817.tistory.com
2)object class vs companion object
https://velog.io/@jeongminji4490/Android-Object-vs-Companion-object
[Kotlin] Object vs Companion object
🙄 같은 object 같긴 한데 뭐가 다른지 ? 때는 코틀린을 배운지 얼마 안되었을 때다. 코틀린은 자바와 다르게 싱글톤 클래스를 사용하기 위해 Object 라는 것이 존재했다. 그래서 싱글톤 클래스로
velog.io
https://velog.io/@jeongminji4490/Android-Object-vs-Companion-object
Kotlin: Difference between object and companion object in a class
What is the difference between an object and a companion object in a class in kotlin? Example: class MyClass { object Holder { //something } companion object { //som...
stackoverflow.com
https://kotlinlang.org/docs/object-declarations.html#0
Object expressions and declarations | Kotlin
kotlinlang.org
'개발노트 > Kotlin' 카테고리의 다른 글
8주차 2일 item 클릭/ 레이아웃의 기능 (0) | 2023.08.29 |
---|---|
8주차 1일 Serializable 그리고 Parcelable (2) | 2023.08.28 |
7주차 3일 fragment에서 viewbinding과 fragment의 구?조? (0) | 2023.08.23 |
7주차 2일 activity->frament 그리고 adapter (0) | 2023.08.22 |
7주차 1일 팀프로젝트를 끝내며 (0) | 2023.08.21 |