본문 바로가기

iOS/Swift 문법

[Swift문법] 프로토콜, 불투명 반환 스위프트 프로토콜 클래스가 구조적으로 올바르게 되기 위하여 스위프트 클래스가 반드시 따라야 할 특정 규칙은 기본적으로 없다. 하지만, 다른 클래스와 함께 작업을 해야 할 때는 특정 조건에 맞춰야 한다. iOS SDK의 다양한 프레임워크와 함께 동작하는 클래스를 만들 떄는 더욱 그러하다. 클래스가 충족해야 하는 최소한의 요구사항을 정의하는 규칙들의 집합을 프로토콜(protocol)이라고 한다. 프로토콜은 protocol 키워드를 이용하여 선언되며, 클래스가 반드시 포함해야 하는 메서드와 프로퍼티를 정의한다. 예를 들어, 어떤 클래스가 프로토콜을 채택했으나 모든 프로토콜의 요구사항을 충족하지 않는다면, 그 클래스가 해당 프로토콜을 따르지 않는다는 에러가 발생한다. 프로토콜 선언은 protocol Messag.. 더보기
[Swift문법] 객체지향 프로그래밍 기초 (2) 클래스 인스턴스 선언하기, 초기화하기 이전까지는 클래스에 대한 구조를 정의하였다. 이 클래스를 가지고 어떤 작업을 하려면 인스턴스를 생성해야 한다. var account1: BankAccount = BankAccount() 이 코드를 실행하면 BankAccount 클래스의 인스턴스가 생성될 것이며, account1이라는 변수를 통해 접근이 가능해진다. 클래스 인스턴스 초기화하기, 소멸하기 클래스는 인스턴스를 생성하는 시점에 해야 할 초기화 작업이 있을 수 있다. 이 작업은 클래스의 init 메서드 안에 구현된다. BankAccount클래스에서는 새로운 클래스 인스턴스가 생성될 때 계좌 번호와 잔액을 초기화할 것이다. class BankAccount { var accountBalance: Float = 0.. 더보기
[swift문법] 객체지향 프로그래밍 기초 스위프트는 객체지향 iOS 앱 개발을 광범위하게 지원한다. 이 글에서는 기초적인 객체지향 프로그래밍의 내용을 정리하려고 한다. 객체 객체(또는 인스턴스)는 소프트웨어 앱을 구축하는 블록을 쉽게 사용하고 재사용할 수 있는 독립적인 기능 모듈이다. 작업을 수행하기 위한 객체나 인스턴스에서 접근되고 호출되는 속성(프로퍼티)과 함수(메서드)로 객체가 구성이 된다. 객체를 구성하는 데이터 변수와 함수를 포괄적으로 클래스 멤버라고 한다. 클래스 클래스는 객체가 생성될 때의 모습을 정의한다. 예를 들어, 메서드들이 하게 될 일이 무엇이며 어떤 프로퍼티들이 존재할지 등을 정의한다. 스위프트에서 클래스 선언하기 객체를 인스턴스화하기 전에 먼저 객체에 대한 클래스를 정의해야 한다. 새로운 스위프트 클래스를 선언할 때 새롭.. 더보기
[Swift 문법] 클로저 클로저 표현식 스위프트에서의 클로저와 클로저 표현식은 용어가 혼용되고 있지만, 몇 가지 큰 차이가 있다. 클로저 표현식은 독립적인 코드 블록이다. 예를 들어, 다음은 클로저 표현식을 선언하고 그것을 sayHello라는 이름의 상수를 할당한 다음에 상수 참조를 통해 함수를 호출한다. let sayHello = {print("Hello")} sayHello() 클로저 표현식은 매개변수를 받아 결과값을 반환하도록 구성할 수도 있다. {( : , : , ... ) -> in // 클로저 표현식 코드 } 예를 들어 클로저 표현식으로 두 개의 정수를 매개변수로 받아 하나의 정수를 결과로 반환하는 코드를 만들어 보면 let multiply = {(_ val1 : Int, _ val2: Int) -> Int in re.. 더보기
[Swift 문법] 함수, 메서드 스위프트 함수, 메서드, 클로저는 체계적인 구조와 효율적인 코드를 작성하는 핵심 부분이며, 코드의 반복을 피하면서 프로그램을 구조화하는 방법을 제공한다. 함수란? 함수는 특정 작업을 수행하기 위해 호출할 수 있게 이름 붙여진 코드 블록이다. 함수에 대해 이야기를 할 때 매개변수(parameter)와 인자(argument)라는 용어가 서로 혼용되곤 한다. 하지만, 이들에겐 미묘한 차이가 있다! 함수가 호출될 때 받게 되는 값을 매개변수라고 한다. 하지만 실제로 함수가 호출되고 값이 전달된 시점에서는 인자라고 부른다. (즉 함수 밖에서는 매개변수, 들어오는 순간 인자라고 한다.!?) 메서드란? 본질적으로 메서드는 특정 클래스나 구조체 또는 열거형과 연관된 함수다. 예를 들어, 스위프트 클래스 내에서 함수를 .. 더보기
[Swift 문법] 제어 흐름, 반복문과 조건문 제어 흐름 어떤 프로그래밍 언어를 사용하든 애플리케이션 개발은 로직을 적용하는 작업이며, 대부분의 프로그래밍 기술은 하나 이상의 조건을 기반으로 결정해가는 코드를 작성하는 것이다. 이는 실행되는 프로그램의 흐름을 통제하는 것이므로 제어 흐름이라고 한다. 일반적으로 제어 흐름은 반복 제어와 조건부 제어 흐름으로 나뉜다. 반복 제어 흐름 - for-in 반복문 흔히 말하는 반복문이다. 먼저 for-in 반복문은 for 상수명 in 컬렉션 또는 범위 { //실행될 코드 } 이와 같이 사용한다. 이 구문에서 상수명은 상수로 사용되는 이름으로 반복문이 실행되는 컬렉션 또는 범위의 현재 항목을 담게 될 것이다. 컬렉션 또는 범위는 문자열들의 배열, 범위 연산자, 또는 문자열 자체가 될 수 있따. - while 반복.. 더보기
[Swift 문법] 연산자와 표현식 스위프트 표현식 가장 기본적인 스위프트 표현식은 var myResult = 1 + 2 와 같은 하나의 연산자와 두 개의 피연산자 그리고 할당자 이다. 피연산자는 앞의 예제에서 사용된 것처럼 실제 숫자 값이 될 수도 있지만, 변수 또는 변수와 상수를 혼합하여 사용될 수 있다. 기본 할당 연산자 var x: Int? // "옵셔널" 정수형 변수 선언 var y = 10 // 정수형 변수 선언ㅇ x = 10 //x에 정수 10 값 할당 x = x! + y // 언래핑한 x 값과 y값의 합을 x에 할당 x = y // y의 값을 x에 할당 연산자의 가장 기본은 = 연산자로 변수형, 값 등 읜쪽의 결과를 오른쪽에 할당하는 방식이다. 산술 연산자 연산자는 크게 두 개의 피연산자를 받는 이항 연산자와 단항 연산자가 .. 더보기
[Swift 문법] 타입 캐스팅과 타입 검사 스위프트 타입 캐스팅과 타입 검사 타입 캐스팅 스위프트 코드를 작성할 때 컴파일러가 어떤 값의 특정 타입을 식별하지 못하는 경우가 발생 한다. 이런 경우에는 메서드나 함수가 반환하는 값이 불명확하거나 예상되지 않는 타입의 값일 때 발생한다. 이럴 때는 as 키워드를 사용하여 의도하는 값의 타입을 알려 줄 수 있으며 이것을 타입 캐스팅(type casting)이라고 한다. 예를 들어 let myVvalue = record.object(forKey: "comment") as! String 이것은 메서드가 반환하는 값을 String 타입으로 처리해야 한다고 컴파일러에게 알려주는 코드다. 타입 캐스팅은 업캐스팅과 다운캐스팅이라는 두가지 형태가 있다. 업캐스팅은 특정 클래스의 객체가 상위 클래스들 중의 하나로 변.. 더보기