Jira: 사이드 프로젝트 협업 및 관리 툴로 선정 사이드 프로젝트를 시작하면서 프로젝트의 운영과 관리를 위한 도구로 지라를 선택했다. 지라는 프로젝트 이슈 추적 및 전반적인 운영 및 관리를 위한 소프트웨어로, 재직 중인 회사를 비롯해서 많은 회사들에서 사용하고 있다. 지라의 주요 기능 중 하나는 애자일 소프트웨어 개발을 지원한다는 것이고, 이런 애자일 개발 방식을 사용하는 프로젝트를 위해 다양한 템플릿 (칸반, 스크럼)을 제공해준다. 때문에 새로운 프로젝트를 시작하는 팀들은 지라에서 제공해주는 템플릿을 이용해서 쉽게 프로젝트를 관리하고 운용할 수 있다.👍 우리 팀이 지라를 선택한 이유는 다음과 같다. 애자일 하게 프로젝트를 운영하려고 하는데, 지라는 애자일 프로젝트를 위한 템플릿을 제공한다. 10명까지..
스택? 정의 스택(Stack): (보통 깔끔하게 정돈된, 차곡차곡 쌓은) 더미 스택 메모리에는 함수 호출시 생성되는 ‘스택 프레임’이 쌓인다. (Stack Memory Allocation) 스택 프레임에는 해당 함수의 지역 변수, 매개변수, 함수 실행 완료시 돌아갈 주소가 저장된다. LIFO 구조로, 마지막에 들어온 스택 프레임(Top에 있는 스택프레임)이 가장 먼저 제거된다. 동작 함수 호출시 스택 영역에 스택 프레임을 쌓는다 함수를 실행한다. 함수가 실행을 끝마치면 해당 스택프레임을 스택에서 제거한다. 특징 스택 영역에서 스택 프레임 생성 (변수 메모리 할당 등) 및 해제는 컴파일러에 정의된 루틴을 통해서 수행된다. 연속적인 공간에 메모리가 할당된다. 크기가 매우 작다… (윈도우: 1mb, 리눅스: ..
인터넷이란? 하드웨어 / 소프트웨어 구성 요소 전 세계적으로 수십억 개의 컴퓨팅 장치(호스트 or 종단 시스템)을 연결하는 컴퓨터 네트워크 컴퓨팅 장치: 데스크탑, 서버, 워크스테이션, 노트북, 스마트본, 태블릿, TV.... 종단 시스템은 통신 링크, 패킷 스위치 네트워크로 연결된다. 한 종단 시스템이 다른 종단 시스템으로 데이터를 보낼 때, '패킷'이란 형태로 전달한다. 네트워킹 인프라 구조 애플리케이션에 서비스를 제공하는 인프라 구조로서의 인터넷 한 종단 시스템에서 수행되는 애플리케이션이 다른 종단 시스템에서 수행되고 있는 다른 애플리케이션에게 데이터를 보낼 때, '소켓 인터페이스'라는 규약을 따라야 한다. 패킷? Pack + Bucket 종단 시스템 간 데이터를 송수신 하기 위한 통신 단위 한 종..
스위프트에서 초기화 메소드 init()은 객체가 메모리에 load 될 때 내부적으로 호출되는 메소드로, 생성자(Constructor)라고도 불린다. 초기화 메소드 init()은 클래스와 구조체에 모두 제공된다. 스위프트의 중요한 특징은 객체가 생성될 때 모든 저장 프로퍼티의 값이 초기화 되어 있어야 한다는 것인데, 저장 프로퍼티의 자동 초기화는 옵셔널 타입으로 선언된 경우에만 제한적으로 허용된다. 이외의 경우는 명시적으로 저장 프로퍼티를 초기화 해주어야 한다. 모든 저장 프로퍼티는 적절한 초기값을 가지고, 누락없이 완전히 초기화 되어야 한다. 저장 프로퍼티의 명시적 초기화는 두가지 방법이 있다. 저장 프로퍼티 선언시 초기화 하는 방법 초기화 메소드 init() 내에서 저장 프로퍼티의 값을 할당하는 방법 ..
스위프트의 String은 다른 언어들의 String과는 많이 다르다. 대게 C#, Java와 같은 언어들은 '[ ]'를 이용하여 인덱싱하여 문자열의 원소 하나하나에 접근할 수 있다. 하지만 스위프트에선 일명 서브스크립트(Subscript)라 불리는 [ ]를 이용하여 문자열을 구성하고 있는 문자 하나하나에 접근할 수 없다. // C# var str = "Hello"; var first = str[0]; Console.Write(first); // H // Swift var str "Hello" var first = "H" // 'subscript(_:)' is unavailable: cannot subscript String with an Int, use a String.Index instead. prin..
고차함수 Swift는 함수형 언어이기 때문에, 어떤 함수를 객체로 취급하여 다른 함수의 인자로 전달할 수 있다. (https://dew-it.tistory.com/65) [iOS] 함수형 언어 Swift - 일급 함수 Swift는 객체지향 언어이자 함수형 언어이다. 함수형 언어가 되기 위해서는 일급 함수의 조건을 만족해야 한다. Swift에서 Closure는 매우 중요한 개념인데, 이를 이해하기 위해서는 일급함수의 개념 dew-it.tistory.com 고차함수는 이러한 특성을 이용하는데, 다른 함수를 인자로 전달 받거나 함수의 실행 결과를 함수로 반환하는 함수를 고차함수라고 부른다. Swift의 고차함수 종류로는 map, filter, reduce 등이 있고, 표준 라이브러리 컨테이너 타입인 Array..
XCode에서 Storyboard에 ViewController를 추가하면 'Safe Area'란 객체가 자동으로 같이 추가된다. Safe Area는아이폰8 모델 이후에 등장한 개념이다. 아이폰8 모델 이후부턴 홈버튼도 사라지고 상단 영역에 노치가 생겼다. 노치 영역에는 배터리, 와이파이 정보, 시간 정보 등 시스템에서 제공해는데, 앱이 해당 영역을 가리면 해당 정보의 가독성이 떨어지기 때문에 가리지 않도록 조치가 필요했다. 그래서 등장한 개념이 Safe Area이다. 결론적으로 말하면, Safe Area는 View가 시스템 정보를 제공하는 아이폰의 노치영역과 홈바영역을 침범하지 않도록 마진을 설정한 영역이다. 그러니깐 노치영역이랑 홈바 영역을 보호하기 위한 보호하는 영역이 Safe Area인 것이다! S..
저장하기 1. Image를 Base64로 인코딩한다 func EncodeImageToBase64(image: UIImage) -> String { let imageData = image.jpegData(compressionQuality: 1)! as NSData let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters) return strBase64 } 이때, image를 jpeg 형식의 데이터로 변환해야 한다. png 형식은 이미지의 방향 정보를 갖고있지 않기 때문에, png로 저장하게 되면 나중에 load 할 때 원본 이미지 방향이 잘못될 수 있다! ( 이미지가 90도, 180도 회전할 수 있다) 2. INSERT Q..
- UIImage객체를 downsampling 작업을 통해 메모리 사용량을 줄이는 작업을 하는 중, downsampling된 UIImage를 UIImageView에 렌더링 하면 이미지 방향이 원본과 다른 문제가 발생했다. - 세로로 표현되어야 할 이미지가 downsampling 후 가로로 표현되었다. func downSample(scale: CGFloat) -> UIImage { let data = self.pngData()! as CFData let imageSource = CGImageSourceCreateWithData(data, nil)! let maxPixel = max(self.size.width, self.size.height) * scale let downSampleOptions = [ k..
UIImagePickerController를 이용해 앨범에서 사진을 가져왔을 때, 사진의 위치정보(위도, 경도)를 파싱할 수 있다. 1. Photos 프레임워크를 import 한다. Photos 프레임워크는 iOS에서 사진, 동영상, 라이브포토를 보여줄 때 사용한다. import Photos 2. UIImagePickerControllerDelegate의 메소드 imagePickerController(didFinishPickingMediaWithInfo: )에서 선택된 이미지의 위치정보를 읽는다. func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerContr..