[Objective-C] 클래스에서 깊은 복사 구현해보기
·
iOS/Objective-C
레거시 코드를 공부하면서 옵젝씨 공부 내용 좀 정리하려고 했는데..어쩌다보니 첫 글이 다 건너뛰고 복사로 넘어와버렸다... 요즘에는 뭐 대부분 Swift로 코드를 짜기 때문에 옵젝씨는 공부할 필요가 없지 않을까 싶었는데뭐.... 회사에서 레거시가 옵젝씨로 쓰여져있다면 어쩔 수가 없다... 공부해야지... 얕은 복사와 깊은 복사이는 Swift를 공부해도 많이 접하는 개념이다. 내가 가장 먼저 접했던건 Class와 Struct의 객체 할당 시 복사 방식의 차이를 공부할 때 알게 됐다. Class는 참조 타입이다. 그래서 Class 타입의 인스턴스를 다른 변수에 할당하게 되면 참조 값이 복사된다. 값 자체가 복사되는 것이 아니기 때문에 원본 값의 내부 정보를 변경하게 되면 동일한 참조 주소가 복사된 변수의 내..
[Core Image]Tip: CIFilter 편하게 불러오기
·
iOS/Image
CIFilter는 종류가 굉장히 많다SepiaTone, PhotoEffectTransfer, PhotoEffectTonal.... 이 많은 것들을 보통은 다음과 같이 불러온다let photoEffectTransfer = CIFilter(name: "CIPhotoEffectTransfer")근데 이렇게 불러오면 타입이 CIFilter의 옵셔널 타입이라 사용할 때마다 언래핑을 해줘야 한다.그래서 난 다음과 같이 사용했다enum Filter { case photoEffectTransfer case photoEffectTonal case randomGenerator case multiplyBlendMode case vignette case sepiaTone var c..
[Core Image] CIFilter 체이닝 가독성 개선하기
·
iOS/Image
https://rongios.tistory.com/14 [Core Image] CIImage, CIContext, CIFilterhttps://rongios.tistory.com/1 Swift의 다양한 이미지 - UIImage, CGImage, CIImageCIImage..? CGImage...?iOS 개발을 하면서 이미지를 다루다 보면 다양한 이미지 타입들을 보게 된다. UIImage, CGImage, CIImage 그리고 SwiftUIrongios.tistory.com앞선 포스팅에서 우린 CIImage에 CIFilter를 체이닝 방식으로 적용하는 걸 배웠다코드는 다음과 같다func applyFilters(to image: CIImage) -> CIImage? { // 1️⃣ 세피아 필터 적용 ..
[Core Image] CIImage, CIContext, CIFilter
·
iOS/Image
https://rongios.tistory.com/1 Swift의 다양한 이미지 - UIImage, CGImage, CIImageCIImage..? CGImage...?iOS 개발을 하면서 이미지를 다루다 보면 다양한 이미지 타입들을 보게 된다. UIImage, CGImage, CIImage 그리고 SwiftUI의 Image까지..!(여기서는 SwiftUI의 Image까지 다루진 않는다!!) 이 많rongios.tistory.com예전에 한 번 Swift에서 사용하는 다양한 이미지 타입들에 대해 다뤄본 적이 있다. 그 때 가장 생소했던 이미지 타입은 CIImage였다아무래도 CIImage는 UIImage, CGImage와 다르게 이미지 데이터 자체를 저장하는 타입은 아니기 때문에 그런 것이 아닐까? 그래..
[Core Graphics]CGAffineTransform 2편 - 기울기와 회전
·
iOS/Image
https://developer.apple.com/documentation/coregraphics/cgaffinetransform?language=objc CGAffineTransform | Apple Developer DocumentationAn affine transformation matrix for use in drawing 2D graphics.developer.apple.comhttps://rongios.tistory.com/12 [Core Graphics]CGAffineTransform 1편 - Scale, AnchorPointhttps://developer.apple.com/documentation/coregraphics/cgaffinetransform?language=objc CGAffi..
[Core Graphics]CGAffineTransform 1편 - Scale, AnchorPoint
·
iOS/Image
https://developer.apple.com/documentation/coregraphics/cgaffinetransform?language=objc CGAffineTransform | Apple Developer DocumentationAn affine transformation matrix for use in drawing 2D graphics.developer.apple.com UIView의 회전, 좌우반전개발을 하다보면 UIView를 이리 저리 회전시킬 때도 있고 어떨 땐 좌우 반전을 줘야하는 경우가 있다.그 때 사용하는 기능이 CGAffineTransform이다.  좌우 반전하는 코드 예시를 보자import UIKitclass SampleViewController: UIViewControl..
[Swift]픽셀 데이터 다루기 3편 - 다운샘플링, 이미지 자르기
·
iOS/Image
1편: https://rongios.tistory.com/9 [Swift]픽셀데이터 다루기 1편 - RGBA란?RGBA?RGBA란 무엇일까? RGB는 우리가 흔히 아는 색상 표현 방식 중 하나이다.RGB는 3개의 숫자로 이루어져 있고 각 숫자는 0에서부터 255까지의 숫자이다.그리고 각 숫자는 순서대로 빨강, 초록, 파랑rongios.tistory.com2편: https://rongios.tistory.com/10 [Swift]픽셀 데이터 다루기 2편 - Grayscale1편: RGBA란? 1편에서는 UIImage로부터 픽셀 데이터를 추출하고 색상을 반전시키는 작업을 했다. 오늘은 아주 짧게 Grayscale을 적용하는 코드를 작성해볼까 한다.시작하기 전 오늘도 나를 도와줄 이rongios.tistory..
[Swift]픽셀 데이터 다루기 2편 - Grayscale
·
iOS/Image
https://rongios.tistory.com/9 [Swift]픽셀데이터 다루기 1편 - RGBA란?RGBA?RGBA란 무엇일까? RGB는 우리가 흔히 아는 색상 표현 방식 중 하나이다.RGB는 3개의 숫자로 이루어져 있고 각 숫자는 0에서부터 255까지의 숫자이다.그리고 각 숫자는 순서대로 빨강, 초록, 파랑rongios.tistory.com주의) 여기서 다루는 내용은 실전에서 사용하는 방식을 사용하지 않음 1편에서는 UIImage로부터 픽셀 데이터를 추출하고 색상을 반전시키는 작업을 했다. 오늘은 아주 짧게 Grayscale을 적용하는 코드를 작성해볼까 한다.시작하기 전 오늘도 나를 도와줄 이상해씨를 소개하고 시작하겠다. 먼저 그레이스케일을 어떻게 적용할까 고민을 해봤다.  내가 생각한 아이디어는..
[Swift]픽셀데이터 다루기 1편 - RGBA란?
·
iOS/Image
RGBA?RGBA란 무엇일까? RGB는 우리가 흔히 아는 색상 표현 방식 중 하나이다.RGB는 3개의 숫자로 이루어져 있고 각 숫자는 0에서부터 255까지의 숫자이다.그리고 각 숫자는 순서대로 빨강, 초록, 파랑을 의미하고 숫자가 클수록 색이 짙어진다.알기 쉽게 예를 들어보면 (255, 0, 0)라는 색상은 아래와 같이 아주 빨갛다이렇게 세가지 색상의 혼합으로 우리는 모든 색상을 나타낼 수 있다. 그렇다면 RGBA는 무엇일까?우리가 알던 RGB에 Alpha 값이 더해진게 RGBA다. Alpha 값은 해당 이미지의 투명도를 결정하는 역할을 한다. 그럼 실제 이미지에서 RGBA 픽셀 데이터를 추출해보면 어떤 형태일까?? 한 번 실험해보자Swift로 RGBA 픽셀 데이터 추출하기오늘의 실험을 도와줄 친구는 이..
[Swift] 최장 증가 부분 수열 구하기(LIS, 백준 12015)
·
CS/Algorithm
LIS - Longest Increasing Subsequence최장 증가 부분수열을 구하는 알고리즘백준 - 12015 가장 긴 증가하는 부분 수열 2해당 문제는 단순하게 완전탐색으로 풀면 단순하게 풀리는 문제이다. 하지만 문제점은 역시나 시간 복잡도...완전 탐색으로 풀게되면 시간 복잡도는 O(n^2)으로 매우매우매우 느린 편이다.이 방식의 문제를 더 효율적으로 푸는 방법이 두 가지 있는데 하나는 dp를 이용한 방식이고 하나는 이분 탐색을 이용한 방식이다. 나는 여기서 이분 탐색을 이용한 방식을 다뤄보려 한다.이분 탐색을 이용한 방식의 시간 복잡도는 O(nlogn)이다. 이제 어떤 방식으로 최대 증가 부분수열을 찾는지를 알아보자.(정확히는 이 방식은 부분수열의 크기만을 찾아내는 알고리즘이다. )개괄적인..