본문 바로가기

전체 글

(207)
Access Control (feat. Framework) 접근제어가 왜 필요하고 왜 중요한지 프레임워크를 만들어보면서 알아보자. Framework Framework가 뭔데? iOS 앱을 개발할 때 외부 라이브러리를 import 해서 사용한다. 이런 식의 외부 라이브러리로 많이 사용하는 형태가 프레임워크이다. 프레임워크는 이미지, nib 파일, 다국어 문구, 문서, 공유 라이브러리, 헤더 파일 등을 포함하는 디렉토리이다. 프레임워크를 사용하는 이유는 코드와 리소스의 재사용성에 있다. static library의 경우는 코드만 공유하지만 프레임워크는 이미지 파일 및 다국어 파일 등의 리소스 파일, 헤더 파일을 프레임워크 하나로 공유할 수 있기 때문이다. (또한, 프로젝트 내부의 크기를 줄일 수 있다.) 디렉토리 구조는 아래와 같다. CustomFramework.f..
인터넷 네트워크 목차 - 인터넷 통신 - IP (Internet Protocol) - TCP, UDP - PORT - DNS 인터넷 통신 인터넷을 통한 통신을 말한다. 클라이언트가 요청을 보내서 서버가 응답을 보내는 상황이라고 할 때 클라이언트 -> 서버로 바로 보낼 수 있는 것이 아니라, 클라이언트 --- 인터넷 ---> 서버로 데이터가 이동한다. 이 때, 인터넷은 복잡한 망(복잡한 노드들의 구조)으로 되어 있기 때문에 IP가 필요하다. IP (인터넷 프로토콜) 복잡한 인터넷 망에서 한국에 있는 소깡이가 미국에 있는 히루에게 "똥방구"라는 메시지를 보내기 위해서는 최소한의 규칙이 필요하다. -> 이것이 IP를 통해서 가능해진다. 위의 그림과 같이 서버에 클라이언트와 서버의 IP 주소가 있어야 한다. IP(인터넷 프로토..
YPImagePicker UIImagePicker와 PHPicker로 앱을 만드려고 하다보면 .. 생각보다 제한이 많을 수 있다 .. 그래서 오픈라이브러리를 사용하게 되는데, 그 중 하나가 YPImagePicker다. Usage 자세한 설치 방법 및 사용법은 깃허브를 통해서 확인할 수 있다. 설치를 한 뒤에 제일 먼저 설정해야 하는 것이 있다. Info.plist에서 설정을 해야하는 세가지가 있다. 이 때 의문이 드는 것이 하나 있다. 만약 사진 촬영을 하지 않는 경우, Info.plist에서 사진 촬영 접근 권한을 삭제해도 되는 것인가? 라는 의문이다. 🤔 프로젝트에서 사용하지 않는 경우는 접근 권한을 추가 하지 않아도 괜찮지 않을까? 사실 이 내용때문에 이 글을 쓰게 되었다. 결론부터 말하자면 NOPE !! 안된다. 프로젝트..
0813 (토) 히루집 방문 히루가 커피를 안좋아한다. 그래서 샌드위치를 샀다. (thx to 쥐언냐) 둘이서 열심히 베이글이랑 샌드위치 먹었다. 배부르다. 솝트가 끝나고 솝트를 하지 않는 두번째 토요일이다. 근데 나는 히루를 만났다. 좋다. 진심이다. 그리고 인생 설계를 가장한 할 일 리스트 업을 했다. 근데 우리 왜 작업계획만 세운거지? 놀고 먹고 잘 계획도 세워야겠다. 히루는 앞에서 왈 서버를 붙이고 있는데 뭔가 잘 안되는 모양이다. ㅎㅇㅌ! 나는 오늘 - 알고리즘 풀기 (이미 풀었다.) - TIL .. 개념 정리 하기 - CS 강의 듣고 정리하기 - 왈 메인 오류처리하기 .. 를 하고 싶다. 아마 시간이 되면 날씨 앱을 조금 해봐야겠다 .. 그리고 싹 과제들도 한번 봐야지 .. 아자자
0812 Q&A 정리 1. Cell 안의 Cell 구조일 때, 로직 처리를 ViewController에서 하는 이유? 셀의 중첩 구조에서 UI 및 비즈니스 로직 처리를 할 수 있는 방법은 다양하다. 예를 들어서 테이블 뷰 안에 컬렉션 뷰가 들어가 있는 경우, 테이블 뷰의 셀 안에서 컬렉션 뷰에 대한 delegate와 datasource를 채택하고 컬렉션 뷰의 셀을 빼서 UI 및 로직 처리가 가능하다. 그러나, SeSAC에서 셀에 대한 관리를 모두 최상위 ViewController에서 담당하도록 코드를 구현했고, 그 이유는 아래와 같다. UI와 데이터는 분리되어야 한다. 물론 위에서 말한 것과 같이 관리할 수도 있지만, 그렇게 할 경우 몇가지 번거로운/비효율적인 코드가 발생한다. 데이터를 다룰 때 (ViewController에..
Attribute (@어쩌구) AppDelegate, SceneDelegate 또는 외부 라이브러리 등을 보면 종종 보이는 것 중에 하나가 어노테이션이다. 분명 나는 잘 모르는데 남들은 잘 사용하는 것 같은 기능이다. 역시나 보다 자세하고 정확한 정보는 공식 문서를 통해서 확인하는 것이 좋다. 여기서는 자주 사용하거나 .. 지금 생각나는 것을 위주로 정리할 예정이다. 아닐 수도 어떤 것들이 있는지 살펴보기 전에 무엇인지 먼저 알아보자. Attribute가 뭔데? 이름에서 알 수 있는 것처럼 Attribute는 일종의 속성을 명시한다. 클래스, 프로퍼티, 함수, 파라미터 앞에 위치해서 그것이 특정한 동작을 하도록 어떤 속성을 가질 수 있는 알려주는 것이다. @로 시작하며 아래와 같은 구조를 갖고 있다. @Attribute_Name @A..
required init VS override init 커스텀 뷰에 대한 작업을 할 때 필수적인 작업 중 하나는 초기화 과정이다. (초기화 과정은 커스텀 뷰가 아니더라도 필수적인 과정 중 하나다.) 초기화 작업 중에서 UIView를 다룰 때 많이 볼 수 있는 초기화 문법이 바로 required init?(coder: NSCoder) override init(frame: CGRect) 이 두가지이다. 이 둘의 차이를 제대로 알고 있어야 사용하는 방법에 맞는 초기화 구문을 작성할 수 있다. required init?(coder: NSCoder) xib 파일은 xml 형태로 인터페이스 빌더 구성 정보를 갖고 있다. 컴파일 시 이 파일은 nib 파일로 변환이 되기 때문에 사용자의 화면에서 출력하기 위해서는 init(coder: NSCoder)를 통해 객체를 생성해야..
Closure (클로저) 클로저에 대한 더 자세하고 정확한 정보는 공식 문서를 참고해주세요. 왜냐면 제 정보가 틀릴 수도 있으니까. 클로저 클로저의 의미 클로저란 간단하게 코드 블럭을 말한다. 이런 코드 블럭을 바탕으로 Swift만의 표현 방식을 작성할 수 있다. 보통 클로저를 익명함수라고 알고 있을 것이다. 클로저에는 크게 두 가지 종류가 있는데, 아래와 같다. 이름이 있는 클로저 (= named closure) 이름이 없는 클로저 (= unamed closure) 그동안에 우리가 자주 사용하는 이름이 있는 함수는 Named Closure이고 이를 우리는 함수라고 통칭하고 있었던 것이다. 그리고 이름이 없는 함수인, 코드 블럭을 우리는 클로저라고 부른다. 클로저는 Named Clousre & Unnamed Closure 둘다 ..