
Model-View-Controller MVC (Model-View-Controller) 디자인 패턴은 애플리케이션위 객체를 모델, 뷰, 컨트롤러의 세 가지 역할 중 하나의 역할로 할당한다. 이 패턴은 애플리케이션 내에서 객체가 수행하는 역할 뿐만 아니라 객체기 서로 통신하는 방식을 정의한다. 세 가지 유형의 객체는 각각 추상적인 경계에 의해 다른 객체와 구분되며, 그 경계를 넘어 다른 유형의 객체와 통신한다. 애플리케이션 내의 특정 MVC 유형을 한데 모아 "레이어" 라고 한다. 모델 객체 (Model Objects) 애플리케이션과 관련된 데이터를 캡슐화하고, 해당 데이터를 조작하고 처리하는 로직과 계산을 정리한다. 하나의 모델 객체는 다른 모델 객체와 일대일 또는 일대다 대응 관계를 맺을 수 있다. ..
디자인 패턴의 분류 1. 새로운 소프트웨어를 개발할 때마다 대부분 개발자는 어떤 클래스를 만들고 어느 시점에 객체를 생성하고 소멸시킬지, 데이터를 어떻게 받아서 처리할지, 구조 설계를 어떻게 할지 고민 2. 디자인 패턴 분류는 위와 같이 소프트웨어 코드를 작성할 때 자주 반복되는 특정 상황에서 설계를 용이하게 하며 코드의 재사용이 용이하도록 패턴을 정리해 놓은 것 GoF는 디자인 패턴을 목적과 범위로 분류 • 목적 패턴이 무엇을 하는지 정의하는 것으로 "생성", "구조", "행위" 중의 한 가지 목적을 갖습니다. ◦ 생성 (Creational Pattern) 객체의 생성 과정에 관여하는 패턴입니다. ◦ 구조 (Structural Pattern) 클래스나 객체의 구성을 통해 더 큰 구조로 만들 수 있게 해..

Frame & Bounds iOS의 좌표체계의 시작은 왼쪽 위부터 시작이다. 즉, 제일 왼쪽의 제일 위의 지점이 (0, 0)이다. 또, 수평축은 x로, 수직축은 y로 표현한다. 뷰의 프레임(Frame) 은 뷰의 크기와 위치를 슈퍼뷰의 좌표계를 기준으로 나타낸다. 바운드(Boubds) 는 뷰의 크기와 위치를 해당 뷰 자신의 좌표계를 기준으로 나타낸다. 뷰의 사각형을 정의하기 위해선 뷰는 어디에 그려져야 할지 알아야 하고, 위치로부터 어떤 크기로 그려져야 할지를 알아야함. 뷰의 프레임과 바운드는 CGRect라는 구조체를 통해서 표현된다. CGRect는 사각형의 크기와 위치에 대한 정보를 담고 있다. CGRect의 origin 프로퍼티는 CGPoint 타입으로 사각형의 시작점을 나타낸다. CGRect의 siz..
View hierarchy 뷰 계층구조와 서브뷰 관리 뷰는 자신의 콘텐츠를 보여주는 것과 더불어, 다른 뷰를 위한 컨테이너로써의 역할도 함. 하나의 뷰가 다른 뷰를 포함할 때, 두 뷰 사이에 부모-자식 관계가 생성 자식뷰는 subView로, 부모뷰는 superView 부모-자식 관계 형성은 애플리케이션의 시각적 모습과 동작 모두에 영향을 미침. 뷰 계층의 생성과 관리 코드 작성 서브뷰를 부모부에 추가하기 위해, 부모뷰의 addSubView(_:) 메서드를 호출 이 메서드는 해당 서브뷰를 서브뷰 목록의 마지막에 추가함. 부모뷰의 서브뷰를 제거하기 위해서는 서브뷰의 removeFromSuperview() 메서드를 호출 이 외에도 서브뷰를 부모뷰 목록의 중간에 삽입하기 위해 insertSubview(_:at:..

// UIView+Extension.swift // Journey import UIKit extension UIDevice { var hasNotch: Bool { let bottom = UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0 return bottom > 0 } } 디바이스가 노치가 있는 것인지 없는 것인지 판별하기 위해 Extension으로 따로 빼서 만듦. // ChallengeViewController.swift // Joureny notchCase 라는 함수를 만들어 주었고 (viewDidLoad에 넣어줌) 옆에 이미지에서 보이듯이 노치가 있을 때는 스탬프가 삼각형 구조로 배열되어 있고, 노치가 없을 때는 스탬프가 일렬로 배열되어 ..
UIKit 프레임워크 UIKit은 iOS 애플리케이션 개발시 사용자에게 보여질 화면을 구성하고 사용자 액션에 대응에 관련된 다양한 요소를 포함 애플리케이션을 구현할 때 필수적인 부분이다. UIKit 소개 UIKit은 iOS 애플리케이션의 사용자 인터페이스를 구현하고 이벤트를 관리하는 프레임워크 UIKit 프레임워크는 제스처 처리, 애니메이션, 그림 그리기, 이미지 처리, 텍스트 처리 등 사용자 이벤트 처리를 위한 클래스를 포함 테이블뷰, 슬라이더, 버튼, 텍스트 필드, 얼럿 창 등 애플리케이션의 화면을 구성하는 요소를 포함 UIKit 클래스 중 UIResponder에서 파생된 클래스나 사용자 인터페이스에 관련된 클래스는 애플리케이션의 메인 스레드(혹은 메인 디스패치 큐)에서만 사용 UIKit은 iOS와 ..

코코아 터치 계층 (Cocoa Touch Layer) iOS 애플리케이션 개발에 주 축을 이루는 개발환경으로, 애플리케이션의 다양한 기능 구현에 필요한 여러 프레임워크를 포함하는 최상위 프레임워크 계층이다. 코코아 계층은 macOS 애플리케이션 제작에 사용함 '코코아'라는 단어는 Objective-C 런타임을 기반으로 하고, NSObject를 상속받는 모든 클래스 또는 객체를 가리킬 때 사용 '코코아 터치' 또는 '코코아' 는 iOS 또는 macOS의 전반적인 기능을 활용해 애플리케이션을 제작할 때 사용하는 프레임워크 계층 '코코아 터치' 는 핵심 프레임워크인 UIKit와 Foundation을 포함
AVFoundation AVFoundation은 Apple 플랫폼에서 사운드 및 영상 미디어의 처리, 제어, 가져오기 및 내보내기 등 광범위한 기능을 제공하는 프레임 워크 주요 기능 미디어 재생 및 편집 디바이스 카메라와 마이크를 이용한 영상 녹화 및 사운드 녹음 시스템 사운드 제어 문자의 음성화 AVAudioPlayer Class AVAudioPlayer 클래스는 파일 또는 메모리에 있는 사운드 데이터를 재생하는 기능을 제공 AVAudioPlayer 주요기능 파일 또는 메모리에 있는 사운드 재생 (네트워크에 있는 사운드 파일은 재생 불가) 파일 재생 시간 길이의 제한없이 사운드 재생 여러 개 사운드 파일 동시 재생 사운드의 재생 속도 제어 및 스테레오 포지셔닝 앞으로 감기와 뒤로 감기 등의 기능 지원해..
Commit Type 1.feat 새로운 기능 추가 (new feature) 2.fix 버그 수정 (bug fix) 3.docs 문서 작성, 수정 (documentation) 4.style 코드 포맷팅, 세미콜론 누락 등 코드 변경이 없는 경우 5.refactor 코드 리팩토링 (refactoring) 6.test 테스트 코드, 리팩토링 테스트 코드 추가 7.chore 빌드 업무 수정, 패키지 매니저 수정 등 (production code 변경이 없는 경우) 8.perf 성능 개선 Issue Title [Commit Type] 이슈 제목 그리고 Commit Type 라벨, 각자 이름 라벨 추가 이슈 body는 체크리스트 타입으로 작성. 비워두진 말기 커밋 메세지 Description [#이슈번호] 해당 ..
Git-Flow main 제품으로 출시될 수 있는 브랜치, 배포 Release(Prod) 버전의 소스가 들어있는 branch 기본적으로 github 저장소를 생성하면 있는 branch이다. 배포이력을 관리하기 위한 용도로 사용한다. develop 다음 출시 버전을 개발하는 브랜치, 개발버전의 소스가 들어있는 branch 일반적으로 Master branch에 병합하기 전 최종 개발버전의 소스가 들어있다. 다음 Release될 버전의 소스라고 생각하면 된다. feature 기능을 개발하는 브랜치 개발자들이 기능개발을 위하여 생성/이용 하는 branch이다. 개발이 완료되면 develop와 병합하여 다른 사람들과 공유한다. release 이번 출시 버전을 준비하는 브랜치 hotfix 출시 버전에서 발생한 버그..