값 타입에 대한 글을 읽다가 CoW에 대해 언급하는 걸 봤어요 사실 이전에도 종종 들었는데 흠 이런게 있군... 하고 넘겼거든요 이번에는 뭔지 한 번 확인해보겠습니다 🩵 Copy on Write 수정 가능한 리소스에 대한 복사 작업을 효율적으로 구현하기 위해 사용되는 리소스 관리 기술 사전적 정의를 보고 있으면 뭔소리임? 싶지만 생각보다 단순하더라구요 아주 큰 Value Type 유형을 전부 복사한다고 가정해볼게요 이런 경우 아마도 데이터의 크기만큼 거대한 리소스가 들어갈 겁니다 "모든 데이터"를 "복사"해야 하기 때문이죠 이런 불상사를 막기 위해서 값 타입이어도 변경이 일어나지 않았다면 단순히 원본 데이터를 참조만 하고 있다가 값이 변경되는 시점에 메모리를 복사한 다음, 수정한다는 소리입니다 좀 더 깔..
전체 글
static하면 어떤게 떠오르시나요 저는 tableView의 identifier 설정하는 게 떠오르네요... 아니면 싱글톤? 어쨌든 여러곳에 사용할 수 있는 좋은 키워드죠 🩵 Static 인스턴스가 아니라 타입 자체에 속하게 될 메서드, 프로퍼티 등을 선언하기 위해서 사용합니다 Static으로 선언된 메서드와 프로퍼티는 인스턴스를 생성하지 않아도 그냥 접근해서 사용할 수 있어요 구조체, 열거형, 클래스 전부 다요! 🩵 특징 ✔️ 타입 속성 + 타입 메서드 static 키워드를 통해서 선언하면 모든 인스턴스가 공유하는 값이 됩니다 예를 들어 원주율을 제공하는 프로퍼티와과 사각형의 넓이를 구하는 메소드를 제공해주는 구조체가 있다고 해 볼까요? 위에서 설명했듯이 어떠한 인스턴스에 속하는 것이 아니라 타입 그 ..
피곤하고 작성할 것도 많긴한데 정리가 안되어서 쉬어가는 til..... 요즘은 유닛 테스트를 공부중입니다 캠프 극초반부터 코어데이터를 사용해봐서 다행이에요 코어데이터 수정하면서 테스트 코드도 짜볼 수 있으니까요... 나름대로 TDD를 해 본답시고 열심히 구현하다 튜터님께 한번 체크받으러 갔었는데 역시나 잘못된 방향으로 하고 있었어요 TDD를 완전히 이상하게 이해하고 있던 수준? 입력값과 출력값에 대한 것만 정해놓고 진행을 하는 것 같은데... 아직 잘 모르겠네요 내가 짠 코드가 올바르지 않음을 증명하는 건 얼마나 많은 케이스를 만들어야 하는 걸까여 테스트 더블의 더미, 목 등 이런게 오히려 리소스 손해 아닌가 싶은 생각도 들어요 작은 프로젝트이기 때문에 이 정도의 필요성을 느끼지 못하는 것 같기도 합니다..
디자인패턴이란 뭘까요? 프로그램 설계를 할 때 많이 발생했던 문제점을 객체 관계를 활용해서 해결할 수 있도록 하나의 "규약"처럼 정해둔 패턴을 말해요! iOS 개발을 공부하고 있는 지금으로서는 Delegate 패턴이 가장 친숙하네요~ :D 하지만 오늘은 싱글톤에 대해 공부해봤습니다ㅎㅎ 🩵 싱글톤 패턴 특정한 객체의 인스턴스가 오직 1개만 생성된다고 정해둔 패턴 1개의 인스턴스를 프로젝트 전역에서 사용할 수 있게 하는 패턴이에요 이미 생성된 인스턴스를 가져다가 쓰기 때문에 인스턴스를 또 생성하지 않고 바로 프로퍼티, 메서드를 사용할 수 있어요! 이렇게 1회만 생성되고 전역으로 사용할 수 있기 때문에 데이터 공유가 쉽고 메모리를 절약하는데 도움이 되어요 실제 코드로는 이런 정도의 영향을 가지고 있다고 해볼게..
프로젝트를 1차적으로 완성하고 실제 기기로 빌드를 돌려서 테스트하려는데 이게 웬걸 빌드가 안되는겁니다!! 엄청나게 많은 이슈가 있었지만 그 중 핵심이었던 몇가지를 가져왔어요 Bundle Identifier가 이미 다른 계정에 의해 사용 중 /Users/t2023-m0035/Desktop/todwoong/ToDwoong/ToDwoong.xcodeproj Failed Registering Bundle Identifier: The app identifier "com.yenny42.ToDwoong" cannot be registered to your development team because it is not available. Change your bundle identifier to a unique str..
2024.03.06 - [iOS/SWIFT] - [Swift]Unit Test (1) 코드 테스트의 원칙 2024.03.07 - [iOS/SWIFT] - [Swift] Unit Test (2) 유닛 테스트 시작하기 이번에는 유닛테스트를 위해 타겟을 추가하고 설정하는 법에 대해 알아볼게요 생각보다 간단하더군요 🩵 Test 타겟 생성 어디서든 타겟 생성하는 창으로 들어가시면 됩니다ㅎㅎ 1번 방법 2번 방법 3번 방법 Unit Testing Bundle 이라는 걸 추가해주시면 테스트폴더가 하나 자동으로 생길 거에요 만약 처음부터 테스트 코드 작성을 염두에 두고 프로젝트를 만든다면? Include Tests를 체크하고 해주시면 됩니다ㅎㅎ 🩵 타겟과 번들? 유닛 테스트 타겟(Unit Test Target) 특정..
2024.03.06 - [iOS/SWIFT] - [Swift]Unit Test (1) 코드 테스트의 원칙 2024.03.07 - [iOS/SWIFT] - [Swift] Unit Test (2) 유닛 테스트 시작하기 테스트 코드라는 거 많이 들어보셨죠? Integration Test, UI Test, Unit Test, End-to-End Test... 등등 그 중에 유닛 테스트, 단위 테스트란 무엇일까요? 사용하려는 개별 기능이 개발자의 의도에 맞게 동작하는지 작은 단위로 테스트 하는 것을 의미합니다! 단위 테스트는 보통 이런 과정을 거쳐 작성합니다 테스트 대상을 선택하기 테스트 케이스를 작성하기 테스트 실행하기 예상한 결과와 테스트 실행 결과가 일치하는지 확인하기 위의 1-4를 반복! 개발자는 이런 ..
Git reset은 Git에서 커밋의 위치를 변경하거나 스테이징된 변경 사항을 취소하는 데 사용됨. 이 명령어는 주로 다음과 같은 세 가지 모드로 사용함 Soft Reset git reset --soft HEAD를 특정 커밋으로 이동 인덱스(Staging Area)와 워킹 디렉터리(Working Directory)에는 영향x 이전 커밋의 변경 내용이 스테이징 영역에 남아 있기 때문에 이후에 새로운 커밋으로 스테이징하여 다시 커밋할 수 있음 Mixed Reset git reset --mixed HEAD를 특정 커밋으로 이동 인덱스(Staging Area)는 해당 커밋의 상태로 되돌림 변경 내용을 워킹 디렉터리(Working Directory)에 유지하지만 스테이징 영역에서 취소하고 싶을 때 사용 Hard ..
열거형 Enum은 한정된 범위에서 가능한 값(케이스)를 정의하기 위해 사용하는 타입입니다 특히 스위프트의 열거형은 단순히 값의 목록을 나타내는 걸 넘어선 강력한 기능을 제공한다고 하는데요 코드의 가독성, 안전성, 유지보수성을 크게 향상시킬 수 있다고도 하네요 특히 "타입 안정성"을 보장한다고도 하는데요.. 타입 안정성이라는 건 뭘까요? 🩵 타입 안정성 "타입 안정성을 보장한다" 라는 표현은 프로그램이 실행되는 동안에 타입에 대한 오류가 발생하지 않도록 하는 것을 의미합니다 개발자가 작성한 코드가, 시스템이 예상한 타입의 데이터만을 사용하도록 강제하여 런타임에 발생할 수 있는 타입 관련 오류를 최소화 해주는 것이죠 예를 들면, 정수형 타입 변수에 문자열을 할당하려고 하는 경우 타입 안정성을 지원한다면 컴파..
최근 애플리케이션에서 "알림"이라는 기능이 없는 앱.. 혹시 보셨나요? 전 못본 것 같아요 아주 간단한 투두 어플도 푸시 알림을 보내주더군요... iOS 환경에서 개발자는 두가지 종류의 알림을 보내줄 수 있어요 서버에서 원격으로 알림을 생성하여 APNs(Apple 푸시 알림 서비스)가 기기에 전달해주는 방법, 로컬에서 알림 콘텐츠를 생성하고 트리거(조건)에 맞게 알림을 띄워주는 방법이 있습니다 사실 이런 알람을 설정하기 전, 반드시 해야하는 작업이 있죠? 네... 사용자 기기에 알림을 보낼 수 있게 권한 허용받기 이게 설정되지 않으면 어떤 방식도 쓸 수 없어요!!!!! 요거 허용받는 설정과 관련된 부분을 간단히 적어볼게요 🩵 NotificationCenter NotificationCenter 하면 어떤게..
팀플 작업중, 버튼으로는 도저히 CollectionView cell 크기를 동적으로 변경하기가 어렵다는 연락을 받았습니다 이 부분을 위해 버튼을 열심히 구현했던 저는 슬픔에 빠졌었죠.. (10초 정도) 다시 생각해보니 저는 이걸 구현하는 방법을 알고 있어요 저는 다이나믹하게 동작하는 ui를 제법 좋아하기 때문에 공부하면서 찾아본 적이 있었기 때문이죠 직접 구현한 적은 없었지만.. 지금 하면 되는 거 아님? 🩵 동적 Cell 크기 계산의 장점셀의 크기를 콘텐츠의 크기에 기반해서 결정하면 다양한 크기의 콘텐츠를 유연하게 표시할 수 있습니다! 이런 유연한 콘텐츠는 앱의 UI를 조금 더 풍부하고 상호작용적인 느낌으로 만들어줘요 콘텐츠에 기반한 셀 크기는 사용자에게 뭔가 "맞춤형"이라는 느낌을 주고 각각의 콘텐츠..
2024.02.23 - [iOS/SWIFT] - [Swift] iOS 커스텀 프레임워크 생성하고 사용하기 2024.02.26 - [iOS/SWIFT] - [Swift] 프레임워크와 라이브러리 (1) 2024.02.27 - [iOS/SWIFT] - [Swift] 프레임워크와 라이브러리 (2) UIKit SnapKit으로 비교하기 2024.02.29 - [iOS/SWIFT] - [Swift] 프레임워크와 라이브러리 (3) 접근제한자 프레임워크와 라이브러리를 개발하거나 사용할 때, 접근제한자는 아주 중요한 역할을 해요 이 접근제한자를 어떻게 사용하느냐에 따라서 만들어둔 프레임워크/라이브러리의 사용 가능 범위가 달라진답니다!! 🩵접근제한자 open 클래스, 클래스의 멤버에서만 사용 가능 open으로 선언된 클래..