프로퍼티의 정의 및 사용프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다.(열거형 내부에는 연산 프로퍼티만 구현 가능) 연산 프로퍼티는 var키워드로만 선언 가능하다. 연산 프로퍼티는 읽기 전용으로는 구현 가능하지만, 쓰기 전용으로는 불가능하다. 읽기, 쓰기 둘 다 가능하게 하려면 get, set 블럭을 구현하면 된다. set 블럭에서 암시적 파라미터로 newValue를 사용할 수 있다. 종류저장 프로퍼티(Stored Properties)연산 프로퍼티(Computed Properties)타입 프로퍼티(Type Properties) 코드 예시struct Student { // 인스턴스 저장 프로퍼티 var name: String = "" var `class`: String ..
지난 글에 이어 클로저에 대해 더 자세히 들여다보는 시간을 가져보려한다. 여러 클로저 표현기본 클로저 표현func calculate(x: Int, y: Int, method: (Int, Int) -> Int) -> Int { return method(x, y)}이렇게 클로저를 작성하는 것은 이미 저번 글에서 확인했다. 후행 클로저(Trailing Closures)함수 파라미터 마지막으로 전달되는 클로저는 후행 클로저로 함수 외부에 구현할 수 있다. 이는 마치 코틀린 SAM(Single Abstract Method) 변환과 모습이 비슷해보인다.var result: Intresult = calculate(x: 10, y: 10) { (left: Int, right: Int) -> Int in re..
클로저(Closures)는 무엇일까?클로저는 실행 가능한 코드 블럭이다.함수와 달리 이름이 정의되지 않아도 괜찮지만 함수처럼 파라미터 전달 및 리턴 값이 존재할 수 있다.일급 객체로써 변수, 상수 등에 저장이 가능하고 함수의 파라미터에도 전달이 가능하다. 기본 클로저 문법 알아보기{ (parameters) -> returnType in // running code}클로저는 기본적으로 중괄호로 감싸져있다.괄호를 통해 파라미터를 정의하고 "->" 를 이용해 리턴 타입을 명시한다."in" 키워드를 이용해 실행 코드와 분리한다. 간단한 예시로 사용해보기let sum: (Int, Int) -> Int = { (x: Int, y: Int) in return x + y}let result: Int = sum(1..
다시 한 번 요약하는 Class(클래스)전통적인 객체지향 관점의 클래스단일 상속참조 타입 다시 한 번 요약하는 Struct(구조체)상속 불가값 타입 다시 한 번 요약하는 Enum(열거형)상속 불가값 타입열거형은 자체가 하나의 데이터 타입으로 취급되고, case 전부 각각 유의미한 값으로 취급된다. 그럼 Class(클래스)와 비슷한 Struct(구조체)는 언제 사용할까?연관된 값들을 모아 하나의 데이터 타입으로 표현하려 할 때다른 객체나 함수 등에 전달될 때 복사를 원할 때(참조가 아닌)상속해줄 필요가 없거나 다른 타입을 상속받을 필요가 없을 때 여기서 Value(값) vs Reference(참조) 차이가 뭘까Value(값) 타입은 데이터 전달 시 값을 복사하여 전달한다.Reference(참조) 타입은 데..
열거형(Enum)은 무엇일까?열거형은 관련된 값을 정의하는 타입이다.따라서, 이름을 지을 때는 파스칼 케이스로 작성한다.열거형 내부의 case는 그 자체가 고유 값이기 때문에 카멜 케이스로 작성한다. 간단한 열거형 만들기요일에 대한 열거형을 만든다면 아래처럼 만들어볼 수 있다.enum DayOfWeek { case mon case tue case wed, thu, fri, sat, sun}mon와 tue처럼 한 줄씩 선언해도 되고, 마지막 줄처럼 콤마로 구분하여 한 줄로 선언할 수도 있다. 열거형 사용해보기var day: DayOfWeek = DayOfWeek.monday = .thuswitch day { case .mon, .tue, .wed, .thu: print("평일") c..
1. 클래스란 무엇일까? 클래스는 참조(reference) 타입이다. 이름은 파스칼 케이스로 작성한다. 클래스는 다중 상속이 불가능하다. 2. 클래스 관련 문법 클래스를 선언할 때는 class 키워드를 사용한다. class Sample { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 타입 프로퍼티 static var typeProperty: Int = 100 // 인스턴스 메서드 func instanceMethod() { print("instance method") } // 타입 메서드 static func typeMethod() { print("type method - static") } ..
1. 구조체란 무엇일까? 구조체는 값(value) 타입이다. 스위프트에서 대부분 타입은 구조체라고 한다. 타입이름은 파스칼 케이스를 사용한다. 2. 구조체 관련 문법 구조체를 선언할 때는 C언어처럼 struct 키워드를 사용한다. struct Test { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 타입 프로퍼티 static var typeProperty: Int = 100 // 인스턴스 메서드 func instanceMethod() { print("instance method") } // 타입 메서드 static func typeMethod() { print("type method") } ..
1. 옵셔널의 개념 값이 있을수도, 없을수도 있음을 표현한다. nil이 할당될 수 있는지 없는지 여부의 표현이다. 2. 옵셔널을 쓰는 이유 - nil의 가능성을 코드만으로 표현할 수 있다. - 문서/ 주석 작성 시간을 절약할 수 있다. - 전달받은 값이 옵셔널이 아니라면 nil 체크를 하지 않고 사용할 수 있다. - 예외 상황을 최소화하는 안전한 코딩 기법이다. 3. 옵셔널 문법과 선언 옵셔널 문법은 enum + generics 라고 한다. enum Optional: ExpressibleByNiliteral { case none case some(Wrapped) } let optionalValue: Optional = nil let optionalValue: Int? = nil 나는 지금까지 자바나 코틀..
1. for-in 기존 언어의 for each문과 유사하다. Dictionary의 경우, iteration 아이템으로 튜플이 들어온다. var integers = [1, 2, 3] for (integer in integers) { print(integer) } let people = ["kim": 20, "lee": 35, "park": 50] for (name, age) in people { print("\(name), \(age)") } 2. while, repeat-while 먼저 while문은 사용형태가 이전 조건문에서의 차이점 정도만 다르고 방법은 같다. repeat-while문은 do-while과 형태와 동작이 비슷하다. while integers.count > 2 { //실행문 } repea..
1. if-else 먼저 if-else문은 다른 언어와 차이점이 거의 없었다. 내 관점(Kotlin을 주로 하던)에서 보면 차이점이 있었다. 먼저, if나 else if문을 사용 시 Kotlin에서는 조건문에 무조건 괄호를 사용해야 했는데 Swift에서는 선택 사항이었다. 또, Kotlin에서는 실행문이 1줄이라면 중괄호 "{}"를 생략할 수 있었는데 Swift에서는 불가능했다. 2. switch 기본적으로 사용하던 정수 값만 비교하는 것이 아니라 대부분의 Swift 기본 타입을 지원한다. 각각의 case 내부에는 실행 가능한 코드가 반드시 위치해야 한다. 대부분의 상황에서 default문도 작성해주어야 한다. 명시적 break가 필요없이 자동으로 case 내부의 실행문이 종료되면 break가 실행된다...