흐름 제어 키워드 return '함수를 종료' 값을 반환하는 역할 break 반복문 내의 구문이 실행되는 중간에 즉시 반복문을 '종료' 하고 다음 반복문으로 넘어감 continue 다음 반복 조건으로 즉시 넘어가는 역할(종료가 아니다) fun main() { for (i in 1..10) { if (i == 3) break print(i) } println() for (i in 1..10) { if (i == 3) continue print(i) } println() //label 달아주면 한번에 break 가능 //고전적 문법에서는 내부에서 break 걸려도 밖에서 계속 돈다 loop@ for (i in 1..10) { for (j in 1..10) { if (i == 1 && j == 2) break..
조건문 var a = 7 if (a > 10) println("OK") else println("NO") when 하나의 변수를 여러개의 값과 비교가능(switch와 유사**) 등호나 부등호의 사용은 불가함 조건을 만족하는 것이 여러개 라면 가장 상단의 것이 실행 됨 fun main() { dowhen(1) dowhen("XXX") dowhen(12L) dowhen(3.1415) dowhen("Kotlin") } //Any : 어떤 자료형이든 상관 없음 , 최상위 자료형 fun dowhen (a: Any) { when(a) { 1 -> println("정수 1 입니다.") "Dobby" -> println("문자 입니다.") is Long -> println("Long 타입입니다.") !is String..
명시적 형변환 명시적 형변환 : 변환될 자료형을 개발자가 직접 지정함 코틀린은 암시적 형변환을 지원하지 않는다 var a: Int = 54321 var b: Long = a.toLong() 배열 배열은 처음 선언했을때 전체크기를 변경할 수 없지만 한번 선언 해놓으면 다른 자료형보다 빠른 입출력을 가능하게 하는게 장점이다. //일반적 배열 var intArr = arrayOf(1,2,3,4,5) //Null로 채워진 배열 //꺽쇠안에는 제너릭 Int형 var nullArr = arrayOfNulls(5) intArr[2] = 8 println(intArr[2]) 타입추론 자료형을 코드에 명시하지 않아도 연산 이루어질 때 자동으로 추론해주는 기능 변수 선언될 때도 마찬가지 이다. 대부분은 타입추론해서 코드량..
파스칼 표기법 : 모든 단어를 대문자로 시작 ClassName 함수나 변수 이름 카멜 표기법 : 첫 단어만 소문자로 시작 functionName 변수 선언 val -> Runtime시 변경되지 말아야할 값을 val로 선언 선언시에만 초기화 가능 중간에 값을 변경할 수 없음 var 일반적으로 통용되는 변수 언제든지 읽기 쓰기 가능 코틀린의 특징 기존의 Java 코드 보다 안전성이 높아 졌다. null pointer exception 방지 예외적으로 null 자체를 하나의 정보로 사용할때는 nullable 변수로 만들어서 사용(꼭 필요한 경우만 사용) var a: Int? = null 초기화 필수
Type Casting(타입 캐스팅) 사용법 & 예제 Type Casting(타입 캐스팅) 이란? 인스턴스의 타입을 확인 하거나, 인스턴스의 타입을 슈퍼 클래스 혹은 서브 클래스타입처럼 다루기 위해 사용합니다. Swift에서의 타입 캐스팅은 ‘is’ 와 ’as’ 라는 연산자로 구현할 수 있으며, 이 두 연산자는 값의 타입을 확인하거나 다른 타입으로 변환하는 간단한 방법을 제공합니다. 사용 예제 Defining a Class Hierarchy for Type Casting [예제1] 타입 캐스팅을 활용하여 특정 클래스 인스턴스의 타입을 확인 class Person { var name: String //초기값이 업으므로 init 만들어준다 init(name: String) { self.name = name ..
CustomStringConvertible 사용법 & 예제 CustomStringConvertible란? 공식문서에는 CustomStringConvertible는 텍스트적인 표현을 커스터마이즈 하는 타입이라고 적혀있다. 사용 예제 그냥 구조체를 출력하면 기본 표현으로 출력된다 struct Point { let x: Int let y: Int } let p = Point(x: 21, y: 30) print(p) //Point(x: 21, y: 30) CustomStringConvertible 프로토콜을 정의하면, 사용자가 정의한 형태로 출력되는 것을 확인 가능 extension Point: CustomStringConvertible { var description: String { return "(\(x)..
문법 최적화(Syntax Optimization)_Closures 사용법 & 예제 Syntax Optimization 란? 기본적으로 구현되어 있는 메소드를 사용할때(Closure) 스위프트는 단순하게 작성된 코드를 선호한다. 문법 최적화 하여 클로저 작성시 5가지 규칙이 있습니다. 1. 이미 구현되어 있는 메소드 사용한다면 파라미터 형식, 리턴 형식 생략 가능 2. 파라미터 이름, in 생략 -> Shorthand Argument Name (ex) $0, $1, $n로 대체 3. 클로저에 포함된 코드가 단일 return 이라면 return 생략(implicit return) 4. 클로저가 마지막 파라미터라면 in line -> Trailing Closure() 뒤에 5. 괄호에 파라미터 없으면 괄호 생..
Clousure(클로저) 사용법 & 예제 Clousure(클로저)란? 비교적 짧고 독립적인 코드 조각, 자바에서는 ‘람다’라고도 불림 함수와 클로저는 서로 완전히 호환된다. 3가지 종류의 클로저가 있다. { (parameters) -> ReturnType in statements } { statements } 사용 예제 클로저 표현식 let c = { print("Hello, Swift") } // 파라미터가 없고 리턴형 없는 Closure c() //in으로 Closure Head , Body 구분 let c2 = { (str: String) -> String in return "Hello, \(str)" } let result = c2("Closure") //Closure에서는 Argument lab..
Method and Subscript 사용법 & 예제 [2/2] Subscript란? 클래스, 구조 그리고 열거형은 서브스크립트를 정의할 수 있는데 컬렉션, 리스트 또는 순열의 멤버 항목에 접근하기 위한 단축키임. 서브스크립트를 사용하여 설정과 검색을 위해 메소드를 나눌 필요 없이 인덱스로 값을 설정하고 검색함. 예를 들어 someArray[index]로 배열 인스턴스 항목과 someDictionary[key]로 딕셔너리 인스턴스 항목을 접근할 수 있음. 파라미터의 형식과 수에는 제한이 없으나 많아야 2개가 일반적 가변 파라미터 가능, 파라미터의 기본값 지정 불가능 값을 받아야 하기 때문에 리턴형 생략 불가능 get은 필수, set은 생략 가능 subscript(parameters) -> R..
Method and Subscript 사용법 & 예제 [1/2] 인스턴스(Instance) 메서드란? 인스턴스 메서드는 특정 타입의 인스턴스에 속한 함수를 뜻 합니다. 문법은 함수와 동일하고 차이점은 인스턴스를 통해 호출 한다는 것과 구현하는 위치 입니다. 함수는 특정형식에 연관 되지 않은 동작, 메소드는 특정 형식과 연관된 동작 func name(parameters) -> ReturnType { Code } instance.method(parameters) 사용 예제 클래스로 구현한 인스턴스 class Sample { var data = 0 static var sharedData = 123 func doSomething() { print(data) Sample.sharedData //Static 값에 ..
Mutating Keyword 사용법 & 예제 인스턴스 메서드란? 인스턴스 메서드는 특정 타입의 인스턴스에 속한 함수를 뜻 합니다. 인스턴스 내부의 프로퍼티 값을 변경하거나 특정 연산 결과를 반환하는 등 인스턴스와 관련된 기능을 실행합니다. 인스턴스 메서드는 함수와 달리 특정 타입 내부에 구현하기 때문에 인스턴스가 존재 할 때만 사용할 수 있습니다. (이 점이 함수와 유일한 차이점) 자신의 프로퍼티 값을 수정할 때 클래스의 인스턴스 메서드는 크게 신경안써도 되지만, 구조체나 열거형 등은 값 타입이므로 , mutaitng 키워드를 붙여서 해당 메서드가 인스턴스 내부의 값을 변경 한다는 것을 암시 해야합니다. 사용 예제 struct LevelStruct { var level: Int = 0 { didSet ..
Initializers (초기화) 사용법 & 예제 Failable initializer 초기화 실패를 옵셔널로 처리하는 방법을 알아보겠습니다. 유형 1 Failable initializer는 초기화에 성공한다면 초기화된 인스턴스가 옵셔널 형태로 return 되고 실패한다면 nil을 return하게 됩니다. init?(parameter) { initialization } 유형 2 초기화 성공되면 (Non-optional) 인스턴스를 return하고 실패한다면 crash가 발생 init!(parameter) { initialization } 사용 예제 struct Position { let x: Double let y: Double init?(x: Double, y: Double) { guard x >= 0..