TIL - 2021.03.11 (Thu)

Youngwoo Lee·2021년 3월 12일
0

TIL

목록 보기
9/29
post-thumbnail

오늘 공부한 것

  • 함수의 가변 매개변수와 입출력 매개변수
  • Self vs self
  • 구조체 vs 클래스 타입을 만들 때 그 기준은?

내용

가변 매개변수

가끔 함수의 매개변수로 몇개가 들어오는지 정해줄 수 없는 경우가 있는데,

이런 경우, 우리는 가변 매개변수를 사용할 수 있다.

func sum(_ numbers: Int...) -> Int {
return numbers.reduce(0, combine: +)
}

그리고 세가지 특징

  • 가변 매개변수는 0개 이상의 값을 받아올 수 있다
  • 가변 매개변수로 들어온 값은 배열처럼 사용 가능하다 (subscript) index로 접근
  • 함수마다 하나씩만 가질 수 있다

입출력 매개변수(inout)

함수의 전달인자로 값을 전달할 때는 보통 값을 복사해서 전달한다. 하지만, 값이 아닌 참조를 전달하려면 입출력 매개변수를 사용해야 한다

var arrays: [Int] = [1, 2, 3, 4, 5]
func referenceParameter(_ arr: inout [Int]) {
 arr[0] = 10
}
referenceParameter(&arrays)
print(arrays) // [10, 2, 3, 4, 5]
  • 이렇게 inout 입출력 매개변수로 전달될 값들은 앞에 앰퍼샌드(&)를 붙여서 표현한다
  • 입출력 매개변수는 매개변수 기본값을 가질 수 없으며, 가변 매개변수로 사용될 수 없다
  • 메모리 안전을 위협하기도 한다

구조체 vs 클래스

  • 구조체, 클래스 공통점

    • 값을 저장하기 위한 프로퍼티를 정의
    • 기능 실행을 위해 메서드를 정의할 수 있다
    • 서브스크립트 문법을 통해 구조체 또는 클래스가 갖는 프로퍼티에 접근하도록 서브스크립트를 정의할 수 있다
    • 초기화할 때의 상태를 지정하기 위해 이니셜라이저를 정의할 수 있다
    • 초기구현과 더불어 새로운 기능 추가를 위해 익스텐션을 통해 확장할 수 있다
    • 특정 기능을 실행하기 위해 특정 프로토콜을 준수할 수 있다
  • 구조체, 클래스 차이점

    • 구조체는 상속 x

    • 타입캐스팅은 클래스 인스턴스에서만 허용

    • 디이니셜라이저는 클래스의 인스턴스에서만 활용할 수 있다

    • 참조 횟수 계산은 클래스의 인스턴스에만 적용

    • 구조체 = 값 타입, 클래스 = 참조 타입

    • Apple Guidelines 에 나오는 구조체를 권장하는 조건
      - 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 경우
      - 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때
      - 구조체에 저장된 프로퍼티가 값타입이며 참조하는 것보다 복사하는 것이 합당할 때
      - 다른 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때

      이런 몇가지 상황을 제외하면 거의 클래스로 정의한다

      Apple Developer Documentation

      애플 공식문서에 있는 article 에서는 다음과 같은 기준이 있는데,

    • Use structures by default.

    • Use classes when you need Objective-C interoperability.

    • Use classes when you need to control the identity of the data you're modeling.

    • Use structures along with protocols to adopt behavior by sharing implementations.

      솔직히 피부에 와닿지는 않는다...

      Self vs self

      Self와 self 한 글자가 겨우 대문자, 소문자로 나뉘는데 이게 달라??

      결론 : 다르게 쓰인다...

      5분상식- Self vs self

      yun이 보내준 url인데 한번에 이해가 된 것 같다

      간단하게 정리하자면

      self = 타입 인스턴스에서 자기자신을 나타내는 프로퍼티

      Self = 대문자 이기에, 타입 자체를 뜻함

여기서 메서드 someFunc()의 반환값을 Self 로 설정해주니 정보에 타입인 Fruit이 보이는걸 확인할 수 있다~

내일 할 것

  • 메이슨 피드백 다 끝내기
  • CS 한 가지 주제 포스팅하기
  • SingleTon 패턴에 대해서 공부
profile
iOS Developer Student

0개의 댓글