0713 새싹 8회차 정리
iOS 앱 개발자 데뷔 과정 8회차
#1. Checklist
- Class
참조 타입이기 때문에 같은 클래스 인스턴스를 여러 변수에 할당한 뒤 값을 변경시키면 할당한 모든 변수에 영향을 준다.
ARC로 메로리 관리를 하며, 상속과 오버라이드가 가능하다.
Super Class, Sub Class : 상속하는 클래스, 상속받는 클래스
Inheritance : 슈퍼 클래스의 속성과 메소드를 서브 클래스가 물려받는 것
Override : 슈퍼 클래스에서 상속할 메서드, 프로퍼티, 서브스크립트를 서브 클래스에서 재정의하는 것
- Struct
클래스와 유사하지만 값 타입이기 때문에 같은 구조체를 여러 변수에 할당한 뒤 값을 변경시켜도 다른 변수에 영향을 주지 않는다.
Swift의 데이터 타입과 열거형은 모두 Struct 구조로 되어 있다.
- Instance
var instance = class()
와 같은 형태로 선언하는 변수를 인스턴스라고 하며, 인스턴스를 통해 클래스와 구조체를 실제로 사용할 수 있다.
- Initializer
클래스와 구조체 내부에 초기화가 되어 있지 않은 프로퍼티가 있을 경우, 컴파일 오류가 나타난다.
이럴 때 옵셔널이 필요없는 경우인데 옵셔널 타입으로 선언하거나, 의미 없는 임의의 값을 넣지 않기 위해 이니셜라이즈가 필요하다.
그래서 인스턴스 생성 시 빈 괄호만 사용하는 것이 아니라, 인자값을 넣어주는 형태로 대부분의 프로퍼티를 초기화한다.
<--- 이때 사용하는 키워드는 init이며,이렇게 사용한다.
구조체는 클래스와 달리 모든 프로퍼티 값을 초기화하는 구문(Memberwise initializer)을 자동으로 제공하기 때문에 이니셜라이저 오류가 발생하지 않고, 따라서 Init을 작성할 필요가 없다.
- Property, Method, Member
Property : 속성 // 클래스와 구조체 내부에 선언된 변수를 부르는 이름
Method : 메서드 // 클래스와 구조체 내부에 선언된 함수를 부르는 이름
Member : 프로퍼티와 메서드를 합쳐서 부르는 말
- Default Initializer
기본 생성자. init 메서드를 따로 만들지 않으면 각 프로퍼티의 값은 프로퍼티에 초기화시켜둔 기본 값으로 정해진다.
이 기본생성자를 사용하기 위한 조건으로는 두 가지가 있다.
1. 모든 property가 default value를 가져야 한다.
2. 부모 클래스가 없어야 한다.
- Memberwise initializer
구조체에서 사용되며, Custom initializer가 없는 경우 사용할 수 있다.
Default Initializer와 다르게 구조체 프로퍼티에 지정된 기본 값이 없더라도 사용이 가능하다.
- ViewController
UIAlertController
#0. Memo Alert : 익숙한 그것! 참고
#2. Assignment


오토 레이아웃을 제외하고는 웬만하면 코드로 구현하려고 노력했다.
지금 보니 이미지뷰 4개가 내 생각보다 더 아래에 있구나... 나중에 수정해야겠다.

# 그 외
- Shadow

Shadow를 적용하고 싶어서 ImageView 위에 투명한 View를 덮어놓고 여러 시도를 해봤지만...
왠지 모르게 전혀 적용이 되지 않았다.
여러 시도를 해보던 중 원인을 찾게 되었는데, 바로 BackgroundColor를 Default... 투명으로 해놓았기 때문이다.
그럼 색상을 흰색으로 해서 뷰 아래에 넣어보자고 생각했더니...
왼쪽처럼 꼭짓점 부분에 보기 싫은 흰색 짜투리영역이 생겼다.
(오른쪽 사진은 ImageView에 CornerRadius랑 Shadow를 같이 썼을 때의 사진이다. 엉망진창...)
그래서 그냥 뒤쪽 Shadow용 View를 ImageView보다 10씩 안쪽에 있도록 레이아웃을 다시 잡아줘서 해결했다.
- 짱 신기한 기능. Formatted
짱 신기하다.
50.formatted(.percent) ---> 50%
1345678901.formatted() ---> 1,345,678,901
123456.formatted(.currency(code: "krw")) ---> ₩123,456