210312 Fri

Sunny·2021년 4월 3일
0

Today I Learned

목록 보기
11/88

학습 내용

1. 첫 번째 학습 내용: Optional 옵셔널

Optional을 사용하는 이유?

  • nil 값이 생길 가능성을 열어두는 것.
  • 만약 nil이 생길 가능성이 없다는게 확고하다면 optional을 안 써도 됨.

Optional에서 nil 값이 생기는 경우 언제가 있을지?

예시 1) readline에서 엄청 긴 문자열을 입력하면 nil 값이 생김.
예시 2) Person이란 구조체에서 name, age, job, country 등의 프로퍼티 (타입 안의 변수)를 만든다고 가정. 현재 직업이 없거나 어떤 직업을 갖게 될지 모를 경우 이 경우 옵셔널이 필요함.

if let vs. guard let

  • guard let을 사용하면 범위 밖에서도 변수를 사용할 수 있다.
  • 코드의 가독성이 높아진다.
  • guard는 return,break,continue,throw 등의 제어문 전환 명령어를 쓸 수 없는 상황이라면 사용이 불가능합니다. 함수나 메서드, 반복문 등 특정 블록 내부에 위치하지 않는다면 사용이 제한됩니다.

guard let과 if let의 차이점 (by dev-lena)

  • if let은 else은 쓸 수도 있고, 안 써도 됨.
    반면에 guard let은 else를 반드시 써줘야 함.
  • guard let은 else를 씀으로써 현재의 범위를 반드시 벗어나야함. 즉, 값을 리턴하든지 프로그램을 중단하든지 해야함. guard는 이런 식으로 보통 함수의 내부에 머무르지 않고 early return 조기 반환을 하기 위해 쓰임.

The "else" case of guard must exit the current scope. Generally that means it must call return or abort (중단시키다) the program. guard is used to provide early return without requiring nesting of the rest of the function.

  • 반면 if let은 범위에 머무름. 리턴을 할 수도 있고 아닐수도 있다.

if let nests its scope, and does not require anything special of it. It can return or not.

Stackoverflow - Swift: guard let vs if let

2. 두 번째 학습 내용: Initialization 초기화

  • 새로운 인스턴스를 생성할 때 프로퍼티의 값을 설정해주기 위해 이니셜라이즈를 쓴다.
    -> 만약에 이때 어떤 값을 넣어줘야 할지 불분명하다면 옵셔널 타입으로 만든다.
  • 즉, 타입의 인스턴스를 생성할 때 초기화는 반드시 거쳐야 하는 과정
  • 초기화란? 타입 (클래스, 구조체 또는 열거형)의 새로운 인스턴스를 사용하기 위해 준비하는 절차.

타입의 새로운 인스턴스들이 처음으로 사용되기 전에 정확히 초기화될 수 있게하는 것이 주요 목적.

  • 이 절차에는 새로운 인스턴스가 사용할 준비가 될 수 있게 해당 인스턴스의 프로퍼티 초기 값을 설정해주는 것이나 다른 준비사항을 셋업해주는 게 있음
  • 이러한 초기화 절차를 initializers를 정의해줌으로써 할 수 있음.
  • initializers는 새로운 인스턴스를 생성하거나 특정 타입을 만들때 호출할 수 있는 특별한 함수라고 보면 됨.

출처: Swift 공식 문서

조카 클래스를 만들어봤습니다 👧

struct의 경우 초기화를 안해줘도 (class와 달리) 에러가 안남.
그 이유는? Memberwise Initializers for Structure Types

(공식 문서에도 이 부분에 관해 나와있음)

Initialization



출처: 빅 너드 랜치의 스위프트 프로그래밍 제공 by CODA

3. 세 번째 학습 내용: parameter 매개변수

  • 매개변수란? 옵션들을 만들어내는 것!

  • 새 집에서 각 방들의 페인트를 칠한다고 가정해보자. 4가지 다른 색깔이 있다면 4가지 다른 함수가 필요함.

e.g. 흰색/검정/초록/노랑색 으로 칠하는 각각의 함수

  • 그리고 여러번 페인트칠을 덧칠한다고 가정했을 때, 그럼 그 같은 함수를 여러번 불러야 함.

→ 각기 다른 색깔을 칠하는 다른 함수들을 정의하는 대신에, 딱! 내가 원하는 색깔만 지정할 수 있게 매개변수를 사용할 수 있음

  • func paintRoom(color: color) → paintRoom(color: green)

여기서 parameter란 위의 함수에 들어가는 입력 값임.

매개변수는 특정 type을 가지는데 여기서는 오른쪽의 컬러가 그 경우에 해당함.

  • 함수를 부를때, argument를 이용하여 함수를 어떤 식으로 실행할지 customize 할 수 있음.

  • 매개변수는 여러개를 가지는 것도 가능함

paintroom(color: green, layers: 3)
func move(count: Int) {
	for i in 1...count {
	moveForward()
	}
}

move라는 이 함수는 Int 타입의 count라는 매개변수를 가짐.

여기서 이 count라는 매개변수는 for 반복문이 몇 번 돌아갈지를 구체적으로 정해줌.

move(count: 3)

move (count: ) 함수를 호출할 때, argument로 에 몇 번 직진할지 전달해줌.

(argument, parameter, 인자 다 같은 말임)

출처: 플레이그라운드 코딩 배우기 2

문제점/고민한점 → 해결방안

Cozy 모둠원끼리 같이 공부하는 방법 조언 🙂

  • 설명해주는 사람 → 이 개념을 한 문장으로 표현할 수 있는지?
  • 이걸 왜 쓰는 건지? (어떤 점이 좋은 건지? 반드시 써야 하는건지? 선택의 문제인지? 등)
  • 정확한 근거가 있는지? (e.g. 공식 문서, 실제 사례 등)
  • 비슷한 개념끼리 공통점/ 차이점 비교
  • 코드로 설명/ 구현해보기
profile
iOS Developer

0개의 댓글