분류 전체보기

Swift

[Swift] 타입캐스팅(Type Casting)

타입캐스팅(Type Casing) 타입캐스팅은 해당 인스턴스를 고유한 클래스 계층 구조의 다른 슈퍼클래스나 서브클래스로 처리하는 방법을 뜻합니다. 연산자로는 as, as?, as! 가 존재하고 이들의 개념에 대해 알아보도록 하겠습니다. 다운캐스팅 (Downcasting) -> 부모클래스에서 자식클래스로 형변환하는것을 다운캐스팅이라고합니다. 쉽게말해서 자식클래스의 프로퍼티와 메소드를 사용하기 위해서 다운캐스팅을 하는겁니다. 다운 캐스팅에는 2가지 연산자가 존재한다. as? : 강제 타입 변환 시도. 변환이 성공하면 Optional 값을 가지며, 실패 시에는 nil 반환 as! : 강제 타입 변환 시도. 성공 시 언래핑 된 값을 가지며, 실패 시 런타임 에러 발생 class Shape { var color ..

Swift

[Swift] 타입체크(TypeCheck)

Swift의 TypeCheck 방법중에 타입을 확인하는 type(of:)와 타입을 비교하는 is에 대해 알아보도록 하겠습니다. 타입 체크(TypeCheck) 스위프트의 타입캐스팅은 is와 as로 구현되어있고, 인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스인것처럼 사용될 수 있습니다. type(of:) - 타입확인 class className {} var anyArray: [Any] = [1, "2", 3.9] var anyObjectArray: [AnyObject] = [className()] func printGeneric(_ value: T) { let types = type(of: value) print("\(value) of type \(types)") } printGeneric(2) ..

Swift

[Swift] Closure - 3 (NoEscaping, Escaping, AutoClosure)

NoEscaping, Escaping, AutoClosure에 대해 알아 보겠습니다. Swift 3.0 이전 - @escaping 이 기본 Swift 3.0 이후 - @noescaping 이 기본 @noescaping -> @noescaping 가능 @noescaping -> @escaping 불가능 @escaping -> @noescaping, @escaping 둘 다 가능 @noescaping 기본값이 noescaping 해당 함수 범위 내에서만 동작하도록 하고 범위 밖에서는 사용하지 못하도록 한다. final class someClass { var closure: (() -> ()) = {} func noEscapingClosure(_ param: () -> ()) { // 에러 발생 @escapi..

Swift

[Swift] Closure - 2 (Capturing)

Capturing에 대해 알아 보겠습니다. CaptureList 클로저는 정의 된 주변 컨텍스트에서 상수 및 변수를 캡처(Capturing) 할 수 있습니다. 그런 다음 클로저는 상수와 변수를 정의한 원래 범위가 더 이상 존재하지 않더라도 본문 내에서 해당 상수와 변수의 값을 참조하고 수정할 수 있습니다. Value Type Capture var a = 1 var b = 2 var c = 3 var result = 0 // 1,2,3,0 print("초기화 값 :", a, b, c, result) print("a, b 만 캡쳐") let valueCapture = { [a,b] in result = a + b + c print("내부 : ", result) } //1번째 호출 valueCapture() ..

Swift

[Swift] Closure - 1 (Basic)

클로저 클로저란 특정 기능을 담은 코드를 블럭으로 모아둔 형태이자, 일급 객체로 완벽한 역할을 할 수 있습니다. 일급 객체란 전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환 값이 될 수도 있습니다. 실제 우리가 알고 있는 함수는 클로저의 한 형태로, 이름이 있는 클로저입니다. 기본 형태 { (매개 변수들) -> 반환 타입 in 실행 코드 } Basic Closure let simpleClosure = { print("This is SimpleClosure!!") } simpleClosure() let closureParameter = { (str: String) -> Int in return str.count } let count = closureParameter..

Swift

[Swift] 옵셔널(Optionals)

옵셔널(Optionals)에 대해 알아 보겠습니다. 옵셔널 옵셔널은 스위프트의 특징 중 하나인 안전성(Safe)를 담당하는 기능입니다. 다른 언어에서 볼 수 없었던 옵셔널이란 무엇일까요? 단어 뜻 그대로 옵셔널은 선택적인,즉 값이 있을수도 있고 없을 수도 있다는 뜻을 나타냅니다. 이는 변수나 상수에 나타낼 수 있는데 상수나 변수에는 꼭 값이 있다는 보장이 없죠? 값이 없을땐 nil일 수도 있다는 뜻입니다. 옵셔널? 다시 말하자면, swift에선 nil을 사용하기 위해선 옵셔널을 사용해야만 합니다. var name: String = "jinTonics" name = nil // 오류 위에 소스를 보시면 왜 nil을 넣는데 오류가 날까요? 답은 name이라는 변수가 옵셔널이 아니라서 그렇습니다. 옵셔널에서만..

Swift

[Swift] 접근제어(Access Control)

접근제어(Access Control) 접근제어란 코드끼리 상호작용을 할 때 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능 입니다. 이런 접근제어가 왜 필요할까요? 객체지향 프로그래밍 패러다임에서 중요한 캡슐화와 은닉화를 구현하려면 외부에서 보이지 않거나 접근하지 말아야 할 코드가 있습니다. 불필요한 접근으로 의도치 않은 결과를 초래하거나 꼭 필요한 부분만 제공해야하는데 전체 코드가 노출될 가능 성이 있을 때 우리는 접근제어를 통해 우리가 의도한 대로 코드를 사용하는 프로그래머에게 코드를 작성 하도록 유도할 수 있습니다. Swift접근 제어 모델은 모듈과 소스파일의 개념을 기반으로 합니다. 모듈 import 를 통해 다른 모듈로부터 불러들일 수 있는 하나의 코드 묶음 단위 Library / Fram..

Swift

[Swift] 프로퍼티(Property)

참조 객체지향, 함수형, 프로토콜 지향 패러다임까지 한 번에! 야곰 / 한빛미디어 프로퍼티(Property)에 대해 알아 보겠습니다. 1. 프로퍼티 프로퍼티는 크게 5가지가 존재합니다. 저장 프로퍼티(Stored Properties) 지연 저장 프로퍼티(Lazy Stroed Properties) 연산 프로퍼티(Computed Properties) 프로퍼티 감시자(Property Observers) 타입 프로퍼티(Type Properties) 1.1 저장 프로퍼티(Stored Properties) 가장 단순한 개념의 프로퍼티로써 클래스 또는 구조체의 인스턴스와 연관된 값을 저장하는 프로퍼티입니다. 구조체의 저장 프로퍼티가 옵셔널이 아니더라도, 구조체는 저장 프로퍼티를 모두 포함하는 이니셜라이저를 자동으로 ..

Swift

[Swift] 객체지향 프로그래밍(OOP, Object-Oriented Programming) in Swift

객체지향 프로그래밍(OOP, Object-Oriented Programming) in Swift에 대해 알아 보겠습니다. 객체지향 프로그래밍(OOP, Object-Oriented Programming) 개념 개요 객체지향 프로그래밍(Object-Oriented Programming), 줄여서 OOP, 프로그램을 어떻게 설계해야 하는지에 대한 일종의 개념이자 방법론. 절차적 프로그래밍 (Procedural) 초기 프로그래밍 방식은 절차적 프로그래밍 방식이었다. 입력을 받아 명시된 순서대로 처리한 다음, 그 결과를 내는 것뿐이라는 생각이 지배적이었다. 즉, 프로그램 자체가 가지는 기능에 대해서만 신경을 썼지, 이 프로그램이 대체 어떤 데이터를 취급하는 것인가에는 그다지 관심이 없었던 것입니다. 절차적 프로그..

Swift

[Swift] 구조체와 클래스

구조체와 클래스에 대해 알아 보겠습니다. 구조체와 클래스 구조체와 클래스는 프로그래머가 데이터를 용도에 맞게 묶어 표현하고자 할 때 용이하고, 프로퍼티와 메소드를 사용하여 구조화된 데이터와 기능을 가질 수 있어 하나의 새로운 사용자정의 데이터 타입을 만들어 주는 것입니다. 스위프트에선 구조체와 클래스의 모습과 문법이 거의 흡사 합니다. 하지만 구조체의 인스턴스는 값 타입이고, 클래스이 인스턴스는 참조 타입이라는 차이점이 있습니다. 또 중요한 점은 데이터 타입과 열거형은 모두 값 타입입니다. 1. 구조체 먼저 구조체에 대해 알아 보겠습니다. 1.1 구조체 정의 구조체는 strcut키워드로 정의 한다. struct 구조체 이름 { 프로퍼티와 메서드 } 1.2 구조체 인스터스 생성 및 초기화 구조체의 인스턴스..

jinnify
'분류 전체보기' 카테고리의 글 목록 (8 Page)