Post

Day 22 - TIL

메모리 구조 및 문법 심화

Day 22 - TIL

📘 Day 22 - Today I Learned

🔍 Today Error or Issues

오늘은 Swift의 메모리 구조와 ARC, 제네릭에 대해 개념을 정리했지만,
ARC의 strong, weak, unowned 차이가 처음에는 다소 헷갈렸다.

🛠️ Troubleshooting

헷갈린 개념들을 다시 정리하면서 이해를 명확히 했다.

  • 메모리 구조
    • Code 영역: 컴파일된 코드 저장
    • Data 영역: 전역/정적 변수 저장
    • Heap 영역: 클래스와 같은 참조 타입 인스턴스 저장
    • Stack 영역: 지역변수, 매개변수 등 값 타입 저장
  • ARC (Automatic Reference Counting)
    • 참조 타입의 인스턴스를 자동으로 메모리 관리
    • 참조 카운트 증가/감소는 컴파일 타임에 삽입됨
  • 참조 방식
    • strong: 기본값, 참조 시 카운트 +1
    • weak: 카운트 증가 없이 참조, 해제 시 자동으로 nil
    • unowned: 카운트 증가 없이 참조, 해제된 객체 접근 시 crash
  • Generic (제네릭)
    • 코드의 재사용성과 유연성을 높이기 위해 사용
    • 함수나 타입에서 타입을 미리 정의하지 않고 사용하는 시점에 결정
1
2
3
4
5
func swap<T>(_ a: inout T, _ b: inout T) {
    let temp = a
    a = b
    b = temp
}

📝 Learning Summary

Swift의 메모리 구조를 다시 살펴보며 ARC의 동작 원리와 참조 방식의 차이를 이해했다.
제네릭의 개념과 활용 방식도 다시 정리함으로써, 더 유연하고 재사용 가능한 코드를 작성할 수 있는 기반을 다졌다.

📘 Lesson Learned

기본 문법을 넘어서 메모리 관리와 제네릭까지 이해하면서 Swift 언어가 왜 안전하고 강력한지 다시 체감했다.
ARCweak, unowned는 앞으로 클로저나 ViewModel 설계 시 꼭 고려해야 할 포인트이고, 제네릭은 코드를 추상화하는 데 매우 중요한 도구라 더 많이 연습해 봐야겠다.
작은 개념이라도 명확히 이해하고 넘어가는 습관을 계속 유지해야겠다. 💪

This post is licensed under CC BY 4.0 by the author.