본문 바로가기

Swift Study7

MVC 오늘은 디자인 패턴 중 하나인 MVC 패턴에 대해 알아보겠습니다. MVC는 (Model-View-Controller)의 약자입니다. 각각 무슨 역할을 하는지 어떤 관계에 있는지 알아보도록 하죠! Model Model은 앱의 데이터와 관련된 내용들을 담고 있습니다. 물론 데이터를 관리하는 로직도 포함하고 있습니다. Model은 UI와 직접적으로 연결되지 않게 하는 것이 기본입니다. Model은 받아온 데이터를 그에 맞춰 저장할 형태를 만드는 것이 우선이지 UI에서 어떻게 보일지는 일단 신경 쓰지 않는 것이 좋습니다. 예를 들어, School이라는 구조체에 학생 이름을 저장하는 것은 괜찮지만, 이 문자열을 어떤 식으로 파싱 해서 보여줄지는 고민하지 않아도 됩니다. struct Person { let name.. 2024. 2. 24.
Error Handling 오늘은 Swift의 에러처리(Error Handling)에 대해 알아보겠습니다!! 에러에는 두 가지 종류가 있습니다. 1. 컴파일 오류: 컴파일러가 코드가 잘못되었음을 알려줍니다(문법적 오류) 2. 런타임 오류: 다양한 이유로 앱이 실행하는 동안 발생합니다(앱 사망) 저희는 에러처리를 통해 런타임 오류를 해결하려고 합니다. 컴파일 오류는 실행 전 코드를 수정하면 되기 때문이죠. 근데 이게 왜 필요할까요? 예시를 들어보겠습니다. 대부분의 앱은 서버랑 통신을 합니다. 앱에서 정보를 서버에 요청하고, 서버는 데이터를 보내주는 상황이 많습니다. 하지만 실제 앱에서 데이터를 받아오지 못한다면 어떻게 될까요? 데이터를 요청하는 함수가 제대로 실행되어도 네트워크 상황이나 서버 이슈 등 수많은 이유로 데이터를 받아올 .. 2024. 2. 23.
Optional 오늘은 Swift의 옵셔널(Optional)에 대해 알아보겠습니다! 한 번 알면 쉬운데 처음에는 이해하기 어려운 내용 같습니다. 시작할게요! Optional이 뭐예요? let age: Int? 이런 물음표 많이 보셨죠? 물음표가 옵셔널입니다. 쉽게 말하자면 옵셔널은 nil을 값으로 사용할 수 있는 타입입니다. 그럼 또 궁금한 게 생기죠 그럼 nil은 뭔데요?? nil은 값이 없다는 것을 뜻 합니다. 이해가 안 되시죠? 예를 들어 오류가 나서 앱을 멈춰야 하는데 멈추면 심각한 오류로 되니까 오류는 안 낼 테니 nil 값을 넣어주고 개발자가 오류인 것을 알 수 있게 만들어 줍니다! 이러면 앱이 잘 꺼지는 일이 없이 되게 안정적이게 되겠죠? 하지만 옵셔널 타입을 사용할 때는 옵셔널이란 것을 벗겨주고 사용해야 .. 2024. 2. 21.
weak, unowned 지난 포스팅에 weak과 unowned는 ARC로 메모리관리를 할 때 참조 count를 증가시켜주지 않는다는 것을 확인했습니다. 이번 시간에는 weak과 unowned가 무엇이며, 이들이 어떻게 Reference Count를 증가시키지 않고 둘의 차이점이 뭔지 알아보겠습니다! weak과 unowned는 어떻게 사용하나요?? 지난 포스팅에서도 말씀 드렸지만 정리를 해드리면 변수나 상수를 사용하기 전 weak, unowned를 앞에 붙여줍니다. weak var test: Test? unowned var test2: Test? Reference Count를 증가시키지 않는 공통점이 있습니다! 근데 왜 같은 일을 하는데 두 개가 필요할까요? 차이점이 있을까요?? weak과 unowned의 차이점이 뭐예요? 1... 2024. 2. 20.
Strong Reference Cycle 이번 포스팅에서는 ARC의 Counting 방식으로 인해 생기는 Strong Reference Cycle에 대해 알아보겠습니다! Strong Reference(강한 참조)란? 변수, 상수 등으로 클래스 인스턴스에 할당할 때를 의미합니다. var strongRefernece = ChangbroClass() 해당 Refernece가 남아있는 한, 메모리에서 해제되지 않고 계속 메모리에 남아 있습니다. 이럴 때 Memory Leak이 발생합니다. 그럼 이제 Strong Reference Cycle이 일어나는 예제를 확인해 보겠습니다. 두 개의 클래스 객체가 서로 강한 참조를 하고 있고, 서로의 참조를 떼어놓지 못하고 있는 코드입니다. class Job { var name: Name? deinit{ print(.. 2024. 2. 20.
ARC 저번 포스팅에서 ARC를 몇 번 언급했었는데요 ARC가 무엇인지 알아보도록 하겠습니다. ARC(Automatic Reference Counting)란? ARC는 자동으로 메모리를 관리해 주는 방식입니다. 말 그대로 자동으로 참조관계를 카운팅 하는 것입니다! 참조를 카운팅 하는 것이니까 저번 포스팅에서 말했던 Struct에서는 사용하지 않겠죠? 참조 타입인 Class에서만 이 메모리 관리 방식을 사용합니다! 그럼 ARC는 어떻게 작동할까? 클래스의 새로운 인스턴스를 생성할 때마다 ARC는 그 인스턴스에 대한 정보를 저장하기 위해 메모리를 할당합니다. 시간이 지나 더 이상 메모리에서 사용하지 않는다고 판단이 되면 자동으로 ARC를 통해 메모리로부터 할당 해제를 시킵니다. 메모리에서 사용을 하지 않는다고 판단.. 2024. 2. 20.
Class vs Struct 다들 Class와 Struct에 대해 많이 들어보셨을 텐데 막상 말하려면 잘 못하게 되어서 오늘 확실하게 알아보고 기록하려 합니다! Class와 Struct의 주요 차이점은 무엇일까요?? 주요한 차이점은 Class는 참조 타입(상속 가능)이고 ARC를 사용하여 메모리 관리를 하고 Struct는 값 타입(상속 불가)!! 코드를 통해 가장 큰 차이점인 참조 타입 vs 값 타입을 알아봅시다! 먼저 Class를 생성하고 클래스의 인스턴스들을 생성하여 Class의 값들을 바꿔보겠습니다. broClass에서 test를 4로 변경해 주고 broClass2에서 test를 2로 변경해 주었습니다. 하지만 모든 Class에서 test의 값은 2로 변경된 것을 확인할 수 있습니다. 😇 이로 인해 참조 타입은 인스턴스의 값을.. 2024. 2. 19.