Jul 18, 2023

Today I Learned#2

무엇을 배웠는지 간단하게 기록합니다.
Today I Learned#2
Contents
Swift Property
Function과 Method
Mutating과 Non-mutating

Swift Property

Property(프로퍼티)는 속성이라는 뜻으로 클래스와 구조체, 열거형과 같은 객체의 특징을 표현하는 변수나 상수를 의미한다. 프로퍼티는 객체 내에서 값을 저장, 변경, 검색하고, 객체 간의 상호작용에 사용 되는 데이터를 제공한다.

Stored Property

class Person { let id: Int = idGenerator() var name: String var address: String ... }
  • let 키워드와 var 키워드를 사용해서 인스턴스의 일부로 저장하는 속성
  • 클래스 또는 구조체에서 선언해서 사용 가능
  • 열거형에서는 사용 불가능

Computed Property

var radius: Double var diameter: Double { get { return radius * 2 } set { radius = newValue / 2 } }
  • 값을 직접 저장하지 않는 구조
  • 매번 다른 프로퍼티와 연산을 하거나 일반 연산을 통해 값을 얻은 후 지정
  • 클래스, 구조체, 열거형 모두 선언 가능

Function과 Method

Function(함수)Method(메소드)는 엄연히 다른 개념으로 사용하는 용어이다. 함수는 일반적인 프로그래밍 언어라면 사용하고 있는 용어로 쉽게 찾아볼 수 있다. 함수는 Input(입력)Output(출력)이 있고, 특정 입력을 전달 받아 작업을 수행하고 결과를 반환하는 구조로 정의되어 있다.
메소드는 특정 클래스나 구조체, 열거형 내부에 정의되어 의존적인 함수를 일컫는 용어로 어딘가에 소속되어 있는 함수라고 설명할 수 있다. 수행하는 작업은 다를게 없지만 표현하는 용어가 다른 의미를 가지고 있다는 것은 알아야 할 필요가 있다고 생각한다.
💡
1. Function(독립적인 함수) 2. Method(의존적인 함수)
굳이 이렇게 용어를 구분지어서 표현하는 이유는 함수를 구성한 사람의 사용방법이나 정의에 따라 구분하려는 의도에 있다고 보아야 한다. 메소드는 User-definded(사용자 지정)한 특정 클래스나 구조체, 열거형과 연관되어 있지만, 함수는 연관되어 있지 않아도 독립적으로 정의할 수 있는 것을 특징이라고 보았다. 따라서 객체와 밀접한 관련이 있는 함수라면 메소드라고 표현하는 것이 옳지만, 그것이 아니라면 함수라고 표현하는 것이 맞다.

Mutating과 Non-mutating

Collection(콜렉션)을 변경시키는 메소드라면 mutating 키워드를 사용하고, 변경시키지 않는 메소드라면 사용하지 않는다. 배열을 정렬하는 .sort() 메소드는 호출하면 원래 배열이 변경되기 때문에 mutating 메소드다.
하지만 배열에서 조건에 맞는 요소만 선택해서 반환하는 .filter()메소드는 기존의 배열이 변경되지 않고 수행하기 때문에 non-mutating 메소드다. 따라서 mutaing 메소드는 객체 자체를 변경한다는 점에서 side-effect가 있을 수 있다.
side-effect: 결과 값 이외에 다른 상태를 변경 시킬 때 발생 가능한 부작용

References

 
Share article