# weak

19개의 포스트
post-thumbnail

iOS 메모리에 관하여

메모리 구조 기초 프로그램이 실행되면 운영체제는 메모리에 이 프로그램을 위한 공간을 할당한다. 이때, 그 공간은 Code, Data, Heap, Stack으로 나뉘어져 있다. Heap heap에선 데이터의 크기가 확실하지 않을 때 사용하는 영역이다. 즉, 메모리 크기에 대한 제한이 없으며, 본질적인 범위가 전역이기에 프로그램의 모든 함수에서 액세스할 수 있다. 주로 class 객체나 closure 같은 참조 타입들이 할당된다. 또한, swift에서는 참조 계산을 통한 메모리 해제를 ARC에서 한다. heap은 스레드들이 공유하는 영역이기도 하기에 thread-safety하지 않는다. 이때, thread-safety는 멀티 스레드 프로그래밍에서 어떤

2023년 3월 18일
·
0개의 댓글
·
post-thumbnail

[야우쓰] 2주차(4) strong, weak, unowned, 순환참조

ARC의 단점 중 하나는 순환 참조가 발생 시 영구적으로 메모리가 해제되지 않을 수 있다. 아니 근데 저기요 순환 참조가 뭐죠? 그걸 알아보러 가보자잉~ 강한참조 우리가 지금까지 했던 힙의 할당하는 방식이 강한 참조 방식이다! >즉 인스턴스의 주소값이 변수에 할당될 때, RC가 증가하면 강한 참조! 애초에 default 값이 strong~ 하지만 strong에 문제는 바로 순.환.참.조 순환참조 예시를 들어보자! 요즘 내가 킹받고 있는 꽃보다 남자로 예시를 들어보겠다. 먼저 준표랑 잔디를 등장시켜보겠다 그리고 이 둘은 서로가 서로의 남친 여친임을 표시해준다. 메모리에서 볼 때 둘의 관계는 아래 그림과 같다. 그러면서 이 둘의 RC도 하나씩 증가했다. 순환참조의 문제점

2022년 11월 22일
·
0개의 댓글
·
post-thumbnail

[iOS] Strong, Weak에 대하여

Goal > - Swift 문법 중 Strong과 Weak의 차이점을 이해한다. 소개 Swift 공부를 진행하면서 Interface Builder에 붙여놓은 객체를 뷰 컨트롤러 클래스의 프로퍼티와 연결하는 과정에서 Storage 설정에 있는 Strong과 Weak이 정확하게 어떤 역할을 하는지 궁금해졌다. Outlet 어노테이션 객체에 대해 Connection할 때 변수를 strong과 weak으로 세팅하게 되면, weak은 키워드가 들어가지만 strong은 키워드 없이 선언되는 것을 볼 수 있다. 대체 어떤 효과를 지녔길래, 이렇게 두 가지 기능으로 분류해놓은걸까? ![](https://velog.velcdn.com/images/whitehyun/post/29e98

2022년 10월 31일
·
0개의 댓글
·
post-thumbnail

[TIL]10.11

Architecting legacy monoliths for modular iOS app featuers 상황 : 15명의 iOS 개발자, 새 모듈을 만들고 싶음. 각자의 바운더리를 디자인 하는 방법, monolith pack 과 통신하는 방법을 모름. 또 8분의 긴 빌드시간이 존재함. -> 모듈성을 염두에 두고 구축되지 않은 모놀리식 앱에 모듈을 추가하려고 함 > 실제 문제가 무엇인지? 내가 얻는 것은 ? 이런 점들을 염두에 두고 질문을 해야한다. 솔루션이 무엇인지에 대한 명확한 요구사항 목록이 없다면 더 안 좋아질 수도 있다. 현재 위 이미지와 같이 의존하고 있는데 여기서 새롭게 광고(AD) 모듈과 관련된 셀을 추가하려고 한다. if else를 사용하여 추가하는 경우 ![](https:/

2022년 10월 11일
·
0개의 댓글
·
post-thumbnail

[Swift] 강한 순환 참조와 해결 방법 (weak, unowned)

- 📚 Swift Documentations - ARC > - 🚀 https://velog.io/@parkgyurim/Swift-ARC Swift 는 ARC (Automatic Reference Counting) 라는 방식으로 메모리 관리를 하고 있습니다. 개발자가 직접 메모리 할당과 해제를 하지 않고 자동으로 해주기 때문에 편리함도 있지만, ARC 로 부터 발생할 수 있는 문제점 또한 존재합니다. 바로 강한 순환 참조 (Strong Reference Cycle) 인데요, 오늘은 강한 순환 참조가 무엇인지, 그리고 이를 해결할 수 있는 방법이 무엇인지 알아보겠습니다. 💪 Strong Refer

2022년 7월 24일
·
0개의 댓글
·
post-thumbnail

ARC, Weak, Strong, Unowned

1. ARC(Automatic Reference Counting) 스위프트는 ARC를 사용하여 앱의 메모리 사용량을 추적하고 관리한다. ARC는 해당 인스턴스가 더 이상 필요하지 않을 때 클래스 인스턴스에서 사용하는 메모리를 자동으로 해제한다. 클래스 인스턴스가 더이상 필요하지 않을때 해당 메모리를 자동으로 비워준다. 참조 될때마다 참조횟수가 +1이 되고 nil을 할당해주면 참조 횟수가 -1이 된다. ARC의 메모리 수거 대상으로는 참조타입인 클래스에만 적용되고 값 타입인 구조체나 열거형 등은 수거 대상에서 제외된다. init은 초기화 함수이고 deinit함수는 클래스 인스턴스의 메모리가 해제되었을 때 호출되는 함수이다. p1이라는 인스턴스 변수를 생성하여 초기화 하고, p2 변수에 p1을 할당, p3에 p2를 할당했다. 즉 p1과 p2 p3에 Person 인스턴스가 할당된 것(강한참조==Strong)이다. 그러면 Refere

2022년 7월 14일
·
0개의 댓글
·
post-thumbnail

[iOS] 클로저(Closure) 순환 참조 문제

Closure를 작성할 때, 우리는 지역변수를 참조할 때마다 순환참조 문제에 부딪히게 된다. 순환 참조의 이슈는 근본적으로 strong으로 서로 동시에 참조하고 있기 때문에 ARC가 0으로 안내려 가는 것이다. 원래 클로저가 종료되면 self로 선언해준 Reference Count도 0으로 내려가야 하지만, 다른 곳에서 클로저를 불러준 시점에서 Reference Count가 1이 증가하여 발생한 문제이다. 간혹 지역변수가 아니더라도 해당 Class에서 정의된 Property나 Method에 접근할 때도 마찬가지다. 그래서 그 해결방안으로 다음과 같은 코드로 순환참조를 해결할 수 있다는 것은 널리 알려진 사실이다. 하지만 근본적인 이유에 들어가서 왜 이것이 순환참조를 일으키고 도대체 [unowned self]라는 것은 어떤 것인가를 알아보도록 하자. 우선 이것을 알기 위해서는 ARC의 개념과 Strong, Weak 변수의 의미를 정확하게 알고 있어야 한다. 인스턴스의

2022년 5월 5일
·
0개의 댓글
·
post-thumbnail

[Swift] Closure

처음에 이해하기 매우 까다로웠던 Closure에 대해서 드디어 정리해보고자 한다. Swift의 함수는 1급 객체함수이다. 변수나 상수에 함수를 대입할 수 있다. 이 뜻은 결과값이 대입되는 것이 아닌 함수 그 자체가 변수에 할당이 가능하다. 함수의 return값으로 함수를 사용할 수 있다. 함수의 파라미터로 함수를 전달할 수 있다. Closure는 함수이다. Closure란? 우선 함수를 말한다. 코드의 블럭. (보통 익명함수(Unnamed Function을 가르키는데, 기본 함수도 사실 Named Closure라고 표현 할 수 있지만 보통 이름이 없는 함수를 Closure로 지칭한다) 이것 역시 힙 메모리(동적으로 할당되는 메모리 영역) 안에 저장된다 그래서 기본적으로 참조 타입이다. 왜냐하면 클로저는 함수이고 함수는 Swift에서는 일반 타입이다. 클로저 내부에서는 기본적으로 그 주변에 있는 범위 안의 모든 변수를 참

2022년 3월 8일
·
0개의 댓글
·
post-thumbnail

Automatic Reference Counting

오래 기다렸다. ARC가 무엇일까? 자바의 Garbage Collector와는 무엇이 다를까? 장단점은 무엇일까? 어떤 원리로 동작하는 것일까? 발생하는 문제점은 무엇일까? 어떻게 해결할 수 있을까? 이러한 내 궁금증들을 담았다. 즐겁게 읽어주길 바란다. 개요 Reference Type의 메모리 관리/추적을 Reference Count라는 참조 카운트로 함 Swift는 대부분 ARC가 메모리 관리해줌 하지만 특정 관계에서 compiler에게 추가 정보를 제공함 ARC는 Class instance에 대해서만 적용됨 (reference type) 동작 방식 Instance를 만들 때마다, ARC는 메모리 청크(덩어리?)를 할당한다. 이건 그 인스턴스에 대한 정보를 저장하기 위한 것이다. 이 메모리는 인스턴스의 타입에 대한 정보를 가지고 있다. 또한 그 인스턴스와 관련된 property도 함께 저장한다. 그냥 인스턴스가 생성되면 ARC가

2022년 2월 5일
·
0개의 댓글
·
post-thumbnail

Clousure

대망의 Closure다. 처음 공부할 때 정말 어려웠던 경험이 있다. 그 당시 생각을 하면서 찬찬히 적었으니 잘 이해가 되었으면 좋겠다. ARC의 개념은 후반 포스팅에 작성하였는데, 해당 단어가 궁금하다면 먼저 읽고 와도 상관없다. closure에서 다루는 대부분의 개념을 하나의 포스팅에서 다루고 싶어 불가피하게 흐름을 변경했다. 그럼 즐겁게 읽어주시길 바란다! Closure 개요 함수는 클로저에 포함된다. Global function 이름이 있음 value를 capture하지 않는 closure Nested function 이름이 있음 해당 함수를 포함하는 function의 value를 capture하는 closure closure 이름이 없음 둘러썬 context의 value를 capture Capture란? closure or nested function 코드 밖에서 사용

2022년 2월 5일
·
0개의 댓글
·
post-thumbnail

[iOS] 메모리 참조 방법 (Strong, Weak, Unowned)

(할때마다 오랜만이어서 민망한 iOS 포스팅,,ㅎ) 오늘은 메로리 참조 방식에 대해 공부 해 보았다. 크게 강한 참조, 약한 참조, 미소유 참조로 나뉘게 되는데 비록 본격적으로 사용해본 적은 없지만 몇번 면접에서 마주했던 내용이니 알아두자! ARC (Auto Reference Counting) 먼저 ARC 에 대해 간단히 정리해보면 ARC, Auto Reference Counting 은 iOS 앱 내에서 발생하는 메모리 누수 현상을 자동으로 관리해주는 시스템이다. 컴파일시 코드를 분석해 자동으로 retain, release 코드를 생성하며 참조된 횟수를 추적해서 더 이상 참조되지 않는 인스턴스를 메모리에서 해제해 메모리가 낭비되지 않도록 한다. 또한 ARC 는 클래스 인스턴스에만 적용되는데 구조체나 열거형은 값 타입이기 때문에 참조에 의해 전달되거나 저장되지 않으므로 ARC 의 대상이 아니기 때문이다. 이때 ARC 의 관리

2021년 11월 17일
·
0개의 댓글
·
post-thumbnail

파싱_weak_closure

공공데이터 RESTful api 를 가져오는 간단한 코드를 작성했다. resultCode와 resultMsg를 가져와보자. ![] (https://images.velog.io/images/kyustudyo/post/fa0b4ced-b2df-4863-9df5-a5ae892bb2cf/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-09-22%20%EC%98%A4%EC%A0%84%2012.05.10.png) 사실 이렇게 생겼는데,, 쉬운거 부터 가져와보자.. ![](https://images.velog.io/images/kyustudyo/post/b7

2021년 9월 21일
·
0개의 댓글
·
post-thumbnail

[iOS / Swift] 메모리 참조 방법 (strong, weak, unowned)

안녕하세요 오늘은 저번 시간에 이어서 메모리에 관한 공부를 해보겠습니다. 저번 포스팅에서는 메모리 관리인 ARC에 대해서 공부를 했다면 이번에는 메모리 참조 방법에 대한 내용을 다루겠습니다. 그럼 자세히 알아보도록 하죠! 메모리 참조? 저번 포스팅에서 공부했듯이 iOS에서는 ARC를 활용해 앱의 메모리 사용을 추적하고 관리합니다. 메모리가 참조 되고 해제 될때 ARC는 자동으로 이것을 관리해준다는 내용도 다 확인해 보았구요! ARC에 대해 간략히 정리하면 객체에 대해 강한 참조가 남아 있는한 해당 객체는 메모리 해제가 되지 않게 됩니다. 하지만 이렇게 강한 참조만 쓴다면 일일이 메모리 해제를 위해 신경 써야하고 그러지 못하게 된다면 엄청난 메모리가 낭비될 것입니다. 그래서 iOS에는 weak, unowned을 이용하여 조금 더 효율적이게 메모리를 관리 할 수 있습니다. 그럼 이 내용에 대해 더 자세히 알아보도록 하겠습니다. strong (강한 참조) >

2021년 6월 3일
·
0개의 댓글
·

ARC #3

안녕하세요, dvHuni 입니다 ! ARC #1과 ARC #2에 이어 ARC에 대해 알아보는 마지막 포스트 입니다! 이제 ARC에 대한 내용을 마무리 지으러~ 마지막으로 힘내서 가보자구요! 아자아자💪 본 글은 swift docs를 참조하여 개인의 이해를 적은 글입니다. 🤓 Strong Reference Cycles for Closures ARC #1과 ARC #2에서 알아본 Strong Reference Cycle은 class instance간 발생할 뿐만 아니라,

2021년 5월 25일
·
0개의 댓글
·

ARC #2

안녕하세요, dvHuni 입니다 ! ARC #1에 이어 ARC에 대해 알아보는 두번째 포스트 입니다! ARC를 정복하기 위해 다시한번 힘차게 !! 고고 🤜 본 글은 swift docs를 참조하여 개인의 이해를 적은 글입니다. 🤓 Strong Reference Cycle ARC Action의 예시로 미루어보아 Strong Reference는 참조가 모두 사라진 뒤에 ARC에서 deallocate 시킵니다. 그렇다면 예를들어 서로 다른 class의 instance가 서로를 Strong Reference하고있다면 어떻게 될까요 ? 코드를 통해 해당 상황을 재현 해 보겠습니다.

2021년 5월 1일
·
0개의 댓글
·

ARC #1

안녕하세요, dvHuni 입니다 ! iOS 관련 게시글은 오랜만이네요 😅 (이번 글을 위해 열심히 공부했다고 생각해주세요 .. ) 오늘은 swift를 공부한 사람이라면! 사용하는 사람이라면! 한번쯤 들어봤을 ARC! 도대체 ARC가 무엇인지 ! 어떻게 동작하는지 ! 한번 알아보겠습니다. 고고 👨🏻‍🏫 본 글은 swift docs를 참조하여 개인의 이해를 적은 글입니다. 🤓 What is ARC? ARC(Automatic Reference Counting) : To track and manage your app’s memory usage > In most cases, this means that memory management “just works” in Swift, and y

2021년 4월 14일
·
0개의 댓글
·
post-thumbnail

ARC(Automatic Reference Counting) - 1

Swift에서 ARC(Automatic Reference Counting) 는 앱의 메모리 사용을 추적하고 관리한다. 즉, class객체에 의해서 사용되는 memory들을 더 이상 class객체가 사용되지 않을때 자동으로 수거한다. 따라서 C언어처럼 우리가 직접 메모리를 할당하고, 수거하지 않아도 된다. 그러나 몇몇의 case들은 직접 신경을 써주어야한다. Reference counting은 struct와 class를 비교했던 글을 보면 class의 instance에게만 적용된다는 것을 알 수 있다. 단어 그대로 reference counting은 참조 타입(reference type)에게만 해당하므로 구조체(struct)와 열거형(enum)과 같은 값 타입(value type)들은 참조 값을 저장하거나 전달하지 않으므로 이에 해당되

2021년 1월 2일
·
0개의 댓글
·
post-thumbnail

Closure - Capture List

What is Capture List ? 주변 환경의 범위에서 참조한 변수들을 얼마나 강하게 캡쳐해야하는지를 명시하는 것으로, 캡쳐리스트를 사용하여 메모리 누수를 일으키는 강한 참조 순환을 피할 수 있게 된다. 캡쳐리스트는 참조 방식과 참조할 대상을 대괄호([])로 둘러싼 목록 형식으로 작성하고, 캡쳐리스트 뒤에는 in 키워드를 써준다. 캡쳐리스트에 명시한 요소가 참조타입이 아니라면 해당 요소들은 클로저가 생성될때 초기화된다. **참고로 얼마나 강하게 캡쳐할지 지정하는 옵션 키워드(weak, unowned)는 참조타입을 캡쳐할 때만 사용

2020년 2월 27일
·
2개의 댓글
·
post-thumbnail

ARC(Automatic Reference Counting)

Swift는 ARC를 사용해 앱의 메모리 사용량을 추적하고 관리한다. 대부분의 경우 메모리 관리란 swift에서 작동하므로, 사용자가 메모리 관리에 대해 생각하지 않아도 된다. ARC는 해당 인스턴스가 더 이상 필요하지 않을 때 클래스 인스턴스가 사용하는 메모리를 자동으로 해제한다. > ARC는 클래스 인스턴스에만 적용된다. 구조체와 열거형은 참조 유형이 아닌 값 유형이므로 참조로 저장,전달되지 않는다. ARC와 가비지 컬렉션의 차이 | 메모리 관리 기법 | ARC

2020년 2월 20일
·
2개의 댓글
·