값 형식(Value Type)과 참조 형식(Reference Type) 값 형식 - Structure , Enumeration , Tuple 참조 형식 - Class , Closure 값 형식은 원본에 영향을 미치지 않지만 참조 형식은 원본에 영향을 미친다. 객체지향 프로그래밍에서는 대부분 참조형식으로 구현한다. 상대적으로 적은 데이터를 구현하고 상속이 필요하지 않으면 값 형식을 사용한다. 값이 전달되는 시점에 복사본이 생성되어야 하는 경우에도 값 형식을 사용한다. 참조를 전달해야 하거나 상속을 해야하는 경우는 Class를 사용한다. 값 형식 struct Point { var x: Int var y: Int } var point1 = Point(x: 5, y: 10) var point2 = point1 ..
Structure 값 타입이며 , 구조체 변수를 새로운 변수에 할당할 때 마다 새로운 구조체가 할당되는 특징을 가지고 있다. 즉, 같은 구조체를 여러개의 변수에 할당한 뒤 값을 변경시키더라도 다른 변수에 영향을 주지 않는다. Class 참조 타입이며, ARC로 메모리를 관리한다. 같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경시키면, 할당한 모든 변수에 영향을 준다. 상속이 가능하며, 타입 캐스팅을 통해 클래스의 인스턴스 타입을 확인할 수 있다. deinit 을 사용하여 클래스 인스턴스의 메모리 할당을 해제 할 수 있다. Structure 와 Class 의 공통점 값을 저장할 프로퍼티를 선언할 수 있습니다. 함수적 기능을 하는 메서드를 선언할 수 있습니다. 내부 값에 . 을 사용하여 접근할..
enum 이란 열거형으로써 서로 연관된 특성을 갖는 형태끼리 집합을 구성할 수 있다. 코드를 간결하고 가독성 있게 작성할 수 있다. 또한, String형식은 heap에 저장되지만, enum은 값의 형태로 Stack 으로 성능면에서 향상된다. enum Asia { case korea case japan case china } 위 와 같이 각 나라별로 손 쉽게 집합 형식으로 묶어줄 수 있다. enum Asia: String { case korea = "대한민국" case japan = "일본" case china = "중국" } var korea = Asia.korea.rawValue print(korea) // "대한민국"enum 은 이런식으로 rawValue 를 사용하여 값을 표현 할 수도 있다.
Closure ? 사용자 코드 안에서 { } 으로 구분 되어 있는 코드의 블럭이며, 일급 객체의 역할을 할 수 있다. 일급 객체는 전달인자, 변수/상수, 함수의 반환 값 등 여러방면에서 사용할 수 있다. 함수는 클로저의 한 형태로 이름이 있는 클로저를 함수라고 한다. Ex) let reverseNames = names.sorted(by: {(s1: String, s2: String) -> Bool in return s1 > s2}) sorted(by:) 의 경우는 이미 (String, String) -> Bool 타입의 인자가 들어오는 것이 정해져 있기 때문에 타입을 생략 할 수 있다. let reverseNames = names.sorted(by: {s1, s2 in return s1 > s2}) 또한..
Finding Substrings let str = "Hello, Swift" str.contains("Swift") // .contains("Swift") 는 str 안에 "Swift" 가 포함되어있는지 Bool 값으로 표현해준다. str.lowercased().contains("swift") // str 안에 String값을 모두 소문자로 변경한 후 "swift"가 있는지 확인하는 방법이다. -> true str.range(of: "swift", options: [.caseInsensitive]) let str2 = "Hello, Programming" let str3 = str2.lowercased() var common = str.commonPrefix(with: str2) common = str..
Format Specifier Format Specifier String(format: "%.5fKB", size) > 소숫점 5자리 수까지 표현 한 후 "KB"를 붙여 출력 한다 String(format: "Hello, %@", "Swift") String(format: "%d", 12) > 12를 출력한다. String(format: "%.3f", 12.34) > 소수점 3자리 수까지 , 즉 12.340 을 출력한다. String(format: "[%d]", 123) > 출력값 [123] String(format: "[%10d]", 123) > 출력값 앞쪽에 빈공간을 만든다. 출력값 [ 123] String(format: "[%-10d]", 123) > 출력값 뒷쪽에 빈공간을 만든다. 출력값 [123..
for 문 , where 조건 추가 for item in myArray where item % 2 == 0 { print("짝수: \(item)") }기존의 for 문에서 where 를 사용하여 조건을 추가할 수 있다. 위의 코드는 myArray 배열에서 item에 값을 저장할 때 짝수만 저장하도록 구성된 코드이다. where 사용법에 대해서 숙지하자 enum 하나의 값 안에 경우(type)을 나눠 저장할 수 있다. enum School { case elementary case middle case high } enum School { case elementary, middle, high } 이 두개의 식은 동일한 식이며 표현 방법이 다른 enum의 문장구조 let yourSchool = School.h..
Optionals Type non-optional Type 항상 값을 가지고 있어야 하는 타입으로 nil 사용할 수 없다 예시 let str: String = "Swift"optional Type 값이 없어도 되는 타입 즉 nil 을 사용할 수 있다. 예시 let optionalStr: String? = nilUnwrapping Swift 에서는 optional 값이 있을 수도 있고 없을 수도 있다. Unwrapping은 optional 값에서 실제 값에 접근하는 과정을 말한다. Force Unwrapping optional 값 뒤에 ! 를 붙여 강제로 optional을 해제하는 방법 이는 optional 값이 확실하게 nil이 아닐 경우에만 사용해야한다. 예시 let optionalValue: Int?..
Swift 함수 오늘은 함수에 대해서 간략하게 공부하였다. 반복적인 작업이나 복잡한 식의 경우, 함수를 이용하여 아주 편리하게 재사용 혹은 모듈화하여 사용할 수있다 func add(a: Int, b: Int) -> Int { return a + b } add(a: 12, b: 54)함수의 매개변수 (parameters) 는 함수에 전달되는 입력 값을 나타내며 함수를 호출 할 때 필요한 값을 내부로 전달하는 역할을 수행한다. 위 함수 add 에서 매개 변수는 ' a ', ' b '이다. arguments 는 함수에 전달하는 값을 의미한다. 함수는 작업을 수행하는데 필요한 정보나 데이터를 받아야한다. 이를 바로 인자 즉 arguments 라고 한다. 함수는 아직 이해가 쉽지 않은..
비교연산자 비교연산자는 Bool 값으로 값이 정해진다. ex) var a = 15 var b = 17 a == b false a와 b는 같은가? true / fales a != b true !는 원래 나오는 Bool 값의 반대로 값을 정한다 a >= b false a and 연산자로써 a, b 모두 적용되는 값을 true a || b -> or 연산자로써 a, b 중 하나만 적용되어도 true 조건연산자 대표적으로 if문과 같이 어떠한 조건을 만족하면 Bool값을 정한다 ex) let hour = 12 if hour < 12 { "오전" } else { "오후" } if문을 한문장으로 깔끔하게 표현하려면 다음과 같은 연산자를 사용하면 된다. hour < 12 ? "오전" : "오후" ㄴ hour 조건이 ..