-
Deep dive!!!
[iOS] ARC의 개념, Class vs Struct 및 Memory Leak발생 이유 탐구하기 | ARC 진짜 뿌수기 #2
안녕하세요. 이번 포스트에서는 ARC의 기본 개념 및 class와 struct의 차이, GC's Mark and Sweep은 왜 메모리 릭을 예방하는지 등의 ARC와의 차이점, memory leack의 발생을 Debug Memory Graph를 통해 탐구하고 해결하는 과정까지 소개하려고 합니다: ] Class vs Struct ARC를 탐구하기 위해서 Value type, Reference type의 개념을 알아야 합니다. 대표적으로 Struct, Class가 있습니다. Value Type의 Struct 특징!! Potato 구조체가 있습니다. 그리고 thread에 의해 execute()가 호출되어 해당 함수의 scope에 들어왔을 때의 상황입니다. Memory(memory layout link)의 st..
-
Deep dive!!!
[iOS] Dynamic view를 추가하는 상황에서 layoutIfNeeded() 활용 및 개념 완벽 뿌수기 +_+ | UIView life cycle
안녕하세요. 이번 포스트는 UIView와 AutoLayout이라면 빠질 수 없는 layoutIfNeeded()의 개념과 언제, 왜 사용해야 하는지 등을 정리하려고 합니다. 또한 커스텀 뷰 내부에 특정 subview를 동적으로 추가 후 화면에 render 해야할 때, subview's layoutIfNeeded와 super view's layoutIfNeeded 중 무엇을 호출해야 하는지에 대해 간단한 프로젝트를 통해 다양하게 탐구하며 알게된 개념을 소개하려고 합니다. 기본적으로 main run loop와 update cycle 관련해서 설명하는 해외 포스트(관련 링크)를 우선 꼭 보셔야 좋습니다. 지금부터 버튼을 클릭하면 동적으로 애니메이션과 함께 고양이 사진이 나온 후에 간단한 레이블이 아래로 보여지는..
-
Deep dive!!!
[iOS] CALayer의 mask 프로퍼티와 gradient animation 파해치기!!
안녕하세요. 이번 포스트는 CALayer의 mask와 gradient 주는 방법과 CABasicAnimation으로 애니메이션 처리하는 방법에 대해서 소개하려고 합니다. 이런 느낌으로 말입니다!! 시작하기 전에 프로젝트 링크 참고해주시면 감사합니다.(깃허브 프로젝트 링크 바로 들여다보기) 위와같이 화면을 구성하기 위해 알아야 할 개념은 3가지 입니다. CALayer와 mask CABasicAnimation (keyPath: locations) UIGraphicsImageRenderer(size:) CALayer와 Mask CALayer는 UIView와 같이 아래 사진처럼 계층구조를 가질 수 있습니다. CALayer는 mask란 프로퍼티가 있습니다. 이는 alpha channel을 통해서 layer's c..
-
Deep dive!!!
[iOS] collectionView(_:cellForRowAt:)에서 중복 선언 및 호출되는 로직 간소화 | POP와 OOP, 프로토콜 composition
안녕하세요. 지난 포스트에서는 최근 진행중인 프로젝트에서 재사용 가능한 cell의 UI에서 특정 영역에만 UI가 서로 다른 경우, 하나의 cell에 데이터가 들어올 때마다 데이터에 맞게 레이아웃을 잡는 경우 vs 서로 다른 UI별로 cell을 만드는 경우 중 뭐가 성능상 좋은지 실험(관련 포스트 링크) 후 리빌딩 했었습니다. 이번 포스트에선 지난 포스트에서의 리빌딩 과정 중 collectionView(_:cellForRowAt:) 델리게이트에서 중복 코드가 너무 많이 보여서 프로토콜 지향적 + 객체지향 개념을 활용해 리빌딩한 경험을(리빌딩한 코드 관련 커밋 링크) 소개하려고 합니닷!! 프로젝트 구조 간단 소개 진행중인 프로젝트의 피드 화면입니다. 자세히 보면, 회색 영역은 ui가 같지만 이미지 영역은 서..
-
Deep dive!!!
[iOS] 컬랙션 뷰cell에서 특정 영역만 다른 ui를 갖는 경우 단일 cell or 여러 개의 cell 중 뭐가 좋을까..? | UI 성능 실험 static vs dynmaic
안녕하세요. 오늘은 한 섹션에서 사용되는 reusable cell이 특정 영역만 다른 ui를 갖을 때, 하나의 cell안에 분기처리를 통해 레이아웃을 구성하는 것 vs 여러개의 cell을 등록하고 재사용 큐에서 꺼내오는 것 중 뭐가 성능이 더 좋을지 분석한 것을 정리하려고 합니다. 현재 개발중인 프로젝트의 피드 화면입니다!! 피드에서는 컬랙션 뷰를 사용하고 있습니다. 위 사진에서 맨 왼쪽은 cell내부에서 사용되는 서브뷰들의 영역입니다. 포스트가 보여지는 하나의 섹션에서, 사용자가 올린 사진에 따라서 총 5개 정도의 사진 배치가 있습니다. 이렇게 회색 영역은 모두 같지만, 포스트 thumbnail 이미지에 개수에 따라 배치가 달라져야 합니다. 이때 궁금증은 하나의 cell타입만 등록 후 collectio..
-
Deep dive!!!
[iOS] Dynamic TableViewCell in Runtime(with animation) | 테이블뷰 Deep dive #1 사전 지식
안녕하세요. 테이블 뷰를 기반으로 Runtime 때 사용자의 터치에 따라 dynamic한 tableView cell을 만들어 볼 것입니다. 이번 포스트에선 dynamic tableViewCell을 만들기 전에 알아두어야 할 사전 개념을 소개하려고 합니다 +_+ 호호.. 재밌습니다. 이 화면을 구현할 때 중요한 키워드입니다. tableView contentView UIView's intrinsicContentSize view's priority + hugging | compression resistance performBatchUpdates(_:completion:) vs beginUpdates() | endUpdates() NSLayoutConstraint's priority in UILayoutPrio..
Database 이론
-
Database 이론
[Database] 11. 보안과 권한 관리 개념 정리
안녕하세요. CS지식 정리도 할 겸, 학교에서 배운 데이터베이스 개념 + "데이터베이스 개론-IT COOKBOOK" 의 책을 공부하며 알게 된 내용을 정리하려고 합니다. 지난 포스트"트랜잭션과 동시성관련 개념 정리"에 이어 이번 포스트는 데이터베이스에서의 보안과 권한 개념을 정리하려고 합니다. 주관적으로 작성된 글이기에 틀린 내용이 있을 수 있습니다.(댓글로 알려주시면 감사합니다 :) 데이터베이스 보안 데이터베이스는 중요한 정보나 개인정보같은 민감한 정보가 있습니다. 권한 관리를 통해 기밀성이 보호되오야 합니다. 데이터의 정확성과 일관성을 위해 무결성을 유지하는 것도 중요합니다. 데이터베이스 시스템은 항상 사용가능해야 합니다. 외부 공격, 시스템 장애 등등 으로부터 보호됨으로 가용성을 유지해야 합니다. ..
-
Database 이론
[Database]10. 트랜잭션 개념과 회복 기법. 동시성 문제와 수행. 2PL 개념 부수기 +_+ | 직렬 가능성 스케줄
안녕하세요. CS지식 정리도 할 겸, 학교에서 배운 데이터베이스 개념 + "데이터베이스 개론-IT COOKBOOK" 의 책을 공부하며 알게 된 내용을 정리하려고 합니다. 지난 포스트"정규화 개념 정리"에 이어 이번 포스트는 트랜잭션 개념과 회복 기법.Concurrency에서 발생할 수 있는 문제, 제어에 관한 개념. 트랜잭션의 concurrent execution 중 serial schedule과 같은 연산 결과를 보장할 수 있는 직렬 가능성과 로킹, 2단계 로킹 기법에 대해 개념을 정리하려고 합니다. 주관적으로 작성된 글이기에 틀린 내용이 있을 수 있습니다.(댓글로 알려주시면 감사합니다 :) 1. 트랜잭션(Transaction)이란? 데이터베이스에서 수행되는 하나의 논리적인 작업, 연산집합(SQL문들의..
-
Database 이론
[Database] 9. Normalization 정규화 개념 정리 | 정규형(1...BCNF), 함수 종속 개념 완전 뿌수기 +_+
안녕하세요. CS지식 정리도 할 겸, 학교에서 배운 데이터베이스 개념 + "데이터베이스 개론-IT COOKBOOK" 의 책을 공부하며 알게 된 내용을 정리하려고 합니다. 지난 포스트 "데이터베이스 설계 | 요구사항분석, 개념적, 논리적 설계 정리"에 이어 이번에는 데이터베이스의 논리적 설계 중 정규화 과정과 함수 종속에 관한 개념을 정리하려고 합니다. 주관적으로 작성된 글이기에 틀린 내용이 있을 수 있습니다.(댓글로 알려주시면 감사합니다:) 데이터베이스 논리적 설계 과정 중 하나인 정규화는 정말 중요한 작업입니다. E-R D를 Relational Schema로 변환 후에 정규화 과정을 거쳐야 데이터베이스의 데이터는 중복성이 줄어들고 일관성, 무결성 등이 향상되게 됩니다. "정규화 과정은 왜 거치는 것일까..
-
Database 이론
[Database] 8. 데이터베이스 설계 | 요구사항분석, 개념적, 논리적, 물리적 설계 개념 정리
안녕하세요. CS지식 정리도 할 겸, 학교에서 배운 데이터베이스 개념 + "데이터베이스 개론-IT COOKBOOK" 의 내용을 정리할 것입니다. 지난 포스트 "Database의 View에 관한 개념"에 이어 이번에는 데이터베이스의 설계( 요구사항 분석 -> 개념적 -> 논리적 -> 물리적 설계에 관한 개념을 정리하려고 합니다. 데이터베이스 설계 Db에서 원하는 데이터를 얻기 위해서는 특정 테이블이 필요합니다. 테이블의 열은 PK, FK, 후보키 등 다양한 속성으로 정의되어 있습니다. FK를 통해 다른 테이블의 PK와 연결됩니다. 이런 테이블의 속성들은 relational schema를 기반으로 만들어집니다. relational schema는 Entity-Relationship model로부터 정의됩니다..
-
구현
[백준/Swift] 16917: 양념 반 후라이드 반 | PS일지
문제 간단한 문제 요약 치킨은 양념 치킨, 후라이드 치킨, 반반 치킨 세 종류를 판매한다. 각각 A원, B원, C원이다. 파티를 위해 양념취킨 최소 X마리, 후라이드 치킨 최소 Y마리 구매해야한다. 반반 치킨 두마리를 구입하면 양념치킨 하나, 후라이드 치킨 하나를 만들 수 있다. 치킨을 구매하는 금액의 최소값을 구하자. 고려해야 할 사항 최소한으로 양념 X마리, 후라이드 Y마리를 구매해야 한다. X, Y를 구매할 수 있는 최소 가격을 찾어야한다. 문제 풀이, 했갈렸던 점 대박.. 접근 방법은 크게 두가지 였습니다. 첫째는 후라이드 X마리 + 양념 Y마리 구매하는 경우 두번째는 최소 X, Y중 작은 값 만큼 반반 * 2로 구매한 가격 + 남은 치킨 * 해당 치킨 가격 만큼 구매한 가격 이 두가지 중 비교를..
-
String
[백준/Swift] 모음의 개수: 1264 | PS일지
문제 간단한 문제 요약 영문 입력 받았을 때 모음 "a,e,i,o,u" 개수를 세시오!!!!!!!! 고려해야 할 사항 # 입력 받을 시 종료! 코드 while let input = readLine(), input != "#" { print( input .lowercased() .filter { "aeiou".map { String($0) }.contains(String($0)) }.count) }
-
BruteForce
[백준/Swift] 사탕 게임: 3085 | PS일지
문제 간단한 문제 요약 N*N 크기의 상자에 사탕을 채워 놓는다. 사탕색이 모두 같지 않을 수 있다. 상자 안 사탕의 색이 다른 인접한 두 칸을 골라 서로 교환한다. 모두 같은 색으로 이루어져 있는 가장 긴 연속 부분(행, 열)을 고른 다음 그 사탕을 모두 먹을 때, 그 최대 개수를 구하시오. 문제 풀이, 했갈렸던 점 맨 처음에 문제를 읽으면서 사탕 안 색이 다른 인접한 두 칸을 골라 서로 교환하는데.. "언제까지 이걸 교환하지?"라는 생각에 문제의 의도와는 다른 방향으로 생각을 계속 했었습니다... 말 그대로 정말 심플하게 사탕안에 색이 다르면서 인접한 두 칸을 골라 서로 교환하면 됩니다. 그리고 나서 모든 행. 모든 열을 탐색 후 가장 긴 연속 부분을 찾으면 됩니다. 또 하나 문제를 풀면서, 열 우선..
-
Greedy
[백준/Swift] 2217: 로프 | PS일지 | enumerated().map()에 관해..
문제 간단한 문제 요약 여러 개의 로프가 있다. 로프를 통해 물체를 들어올리는데 각각의 로프마다 중량이 있고, 병렬로 로프들을 연결할 수 있다. 그 대신 w/k 로 해서 로프들의 중량이 일치하도록 해야 병렬적으로 로프를 물체에 묶어 들어올릴 수 있다. 문제 풀이 정말 어려운 그리디.. 어떻게 풀어야 할지 곰곰이 생각해봤습니다. 1 2 4 7 10 의 로프가 있을 때, "어떻게 최대한의 무게를 들 수 있을것인가?..." 이때 든 의문점은 중량 1의 로프와 중량 10의 로프를 같이 사용해서 물체를 올린다면 (10 + 1) / 2 = 5? 최대한으로 5씩 중량을 나눠서 들 수 있는데, 최대 중량 1짜리가 5를 들 수 있을까? 그럴 수 없을 것 같아서 내린 결론은 1로프와 10 로프를 같이 병렬적으로 사용할 땐..
-
Greedy
[백준/Swift] 1789: 수들의 합 | PS일지
문제 간단한 문제 요약 서로 다른 N 개의 자연수의 합이 S일 때, 자연수 N의 최대 값은 얼마일까? 문제 풀이 최대한 많이 서로 다른 자연수를 더해주어 S를 만들어야 합니다. 가장 작은 자연수 1부터 더해가는게 최대한 많은 서로다른 N개의 자연수를 사용할 수 있습니다. 이때 이전 자연수들의 덧셈 + 특정 자연수를 더한 값이 S라면, 서로 다른 자연수는 특정 자연수 개수만큼 존재합니다. 예를들어 S = 3이고 자연수의 덧셈이 1부터 시작한다면, 1. 1+2 = 3 답은 2입니다. 만약 특정 자연수의 덧셈이 S를 초과한다면, 초과한 값 - S를 한 자연수만 빼면 됩니다. 그럼으로 특정 자연수 -1이 답입니다. 예를들어 S = 5이고, 자연수의 덧셈은 1부터 시작합니다. 1 + 2 = 3 3 + 3 = 6..
-
String
[백준/Swift] 1302: 베스트셀러 | PS일지
문제 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 간단한 문제 요약 오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오. 고려해야 할 사항 책은 가장(최대) 많이 팔린 책의 이름이 출력되야 하는데, 가장 많이 팔린 책의 개수가 같다면, 사전순(최소)으로 가장 앞서는 제목 출력해야 합니다. 문제 풀이, 새로 배운 개념 팔린 책들 중 이름이 같은 책이 있기에, 배열로 저장하기 보단 딕셔너리로 저장했습니다. 그리고 max함수를 통해, val..