## Cocoa Touch Framework
개발환경, 애플리케이션의 다양한 기능 구현에 필요한 여러 개발 도구를 포함하는
최상위 레벨의 프레임 워크
-> Shared Library(or API)와 비슷한 개념, 어떤 기능에 관련된 함수를 모아둠
1. UIKit - IOS의 UI 담당
-> MVC 패턴 사용 (Model : 무엇을, Controller : 어떻게, View : 보여줌 )
-> 사용자 인터페이스를 관리하고, 이벤트를 처리하는 프레임워크
2. Foundation - 프로그램의 중심을 담당
-> Application의 모든 object를 관리하는 기본적인 틀 제공
-> 메모리 할당 혹은 반환하는 기본적인 규칙 정의
-> 리스트나 딕셔너리와 같은 클래스들은 모두 "NS"로 시작
(!) Foundation이 샤옹하는 CoreFoundation은 "CF"
-> GUI와 관련된 Foundation (원시 바이트, 유니코드, 숫자, 달력 날짜, 배열, 사전, 딕셔너리 등 )
3. CoreData
-> 응용프로그램에서 모델 계층 개체를 관리하는 데 사용하는 Framework
-> 지속성을 포함하여 객체 수명주기 및 객체 그래프 관리와 관련된 일반작업에 일반화되고
자동화 된 솔루션 제공
-> 구현, 테스트 또는 최적화 할 필요 없는 기본 제공 기능 (코드 양 감소)
4. MapKit - 앱의 인터페이스에 직접 지도 or 위성이미지 표시
-> 관심있는 장소를 호출하며 지도좌표에 대한 장소 표시 정보를 결정할 수 있는 도구모음
5. Core Animation - 그래픽 렌더링으로 영상 제작
-> 애니메이션의 각 프레임을 그리는 데 필요한 대부분의 작업을 자동 수행
### UIView : 화면의 직사각형 영역에 대한 내용을 관리하는 개체
-> 화면을 구성하는 기본 베이스
-> 여러 UI Componet에게 상속을 지원함
### ViewController : 앱의 근간을 이루는 객체
-> 전체적인 인터페이스의 레이아웃을 관리, 다른 뷰 컨트롤러와 앱을 구성
-> 화면 하나를 관리하는 단위
-> 모든 앱은 최소한 하나 이상의 뷰 컨트롤러를 가지고 있다.
[ 뷰 컨트롤러 역할 ]
1. 데이터 변화에 따라서 view 컨텐츠 업데이트
2. view들과 함께 사용자 상호작용에 응답
3. view를 리사이징하고 전체적인 인터페이스의 레이아웃을 관리
4. 다른 뷰 컨트롤러 들과 함께 앱 구성
### AutoLayout : 제약 조건을 이용해서 뷰의 위치를 지정하는 것
-> 해상도에 맞게 일정한 뷰 설정 가능
### StoryBoard : 사용자 인터페이스를 시각적으로 표션
-> 컨텐츠 화면 간의 연결을 보여주는 도구
-> 씬으로 구성되며, 각 씬은 view Controller와 view를 나타냄
-> 오른쪽 하단을 통해서 제약조건 설정 가능
[ 제약 조건 ]
1. Add New Constraint : 뷰의 너비와 높이 등의 다양한 제약조건 설정
2. Align : 뷰 간의 정렬을 설정할 수 있는 메뉴
3. Resolve Auto Layout Issues : 오토 레이아웃 관련 이슈 해결
-> 뷰를 업데이트, 뷰의 현재 위치로 제약을 업데이트, 누락 된 제약 추가,제약 삭제 등의 기능
### IBOutlet & IBAction
1. IBOutlet : 스토리 보드에 등록한 UI Object를 코드의 변수로 접근 가능하게 함
2. IBAction : 버튼과 연결하여 이벤트를 처리하는 함수 등을 관리
### Content Hugging & Compression Resistance
-> UI 속성들이 텍스트나 이미지에 따라 크기가 결정되는 뷰들이 있음
-> 이러한 뷰들이 다른 뷰들과의 거리 제약으로 본래의 사이즈보다 더 늘어나거나 줄어듬
1. Content Hugging : 더 늘어나는 것에 대한 제약
-> 우선순위가 높을수록 크기를 유지, 우선순위가 낮을수록 크기가 늘어남
2. Compression Resistance : 더 줄어드는 것에 대한 제약
-> 우선순위가 높으면 자신의 크기 유지, 우선순위가 낮으면 크기가 줄어듬