본문 바로가기

분류 전체보기

(21)
[Swift] Type Casting (타입캐스팅) 인스턴스의 타입을 확인. 인스턴스를 부모/자식 클래스의 타입으로 사용할 수 있는지 확인. is, as 사용 //생물 클래스 class Creature { var alive:Bool init(breath:Bool) { self.alive = breath } } //동물 클래스: 생물 클래스를 상속받음 class Animal: Creature { var name:String init(name:String, breath:Bool) { self.name = name super.init(breath: breath) } } //조류 클래스: 동물 클래스를 상속받음 class Bird: Animal { var canFly:Bool init(fly:Bool, name:String, breath:Bool) { self...
[Swift] Instance (인스턴스) 기존의 코드들을 보면 struct myStruct { //모든 저장 프로퍼티에 기본값을 입력해둔 상태로 시작했음. var myString:String = "String" var myInt:Int = 0 } //때문에 인스턴스 생성 후 필요에 따라 다시 사용될 값을 넣어줌. //하지만 이 것은 좋은 방법이 아님. var myInstance = myStruct() myInstance.myInt = 3 myInstance.myString = "Hello" 때문에 인스턴스 생성 시 값을 정의하는 'init'을 사용함. struct Jobs { //기본값을 입력하지 않고 var jobName:String var jobStrength:Int //init(이니셜라이저): 이런식으로 초기화 틀 작성이 가능함. init..
[Swift] Inheritance (상속) 클래스, 프로토콜 등은 상속이 가능함. 클래스 2개를 연결, 부모클래스와 자식클래스 이용. /* 프로퍼티 */ //클래스를 예로 프로퍼티를 설정해봄. class Person { //저장 프로퍼티: 흔히 아는 변수 선언 방법. var name:String = "" //미리 자원을 소비하여 계산할 필요가 없을 때는 lazy사용. //구조체에서는 이 저장프로퍼티를 연산프로퍼티에서 get 할 때는 mutating해줘야 함. lazy var westernAge:Int = 0 //연산 프로퍼티: get과 set을 사용 var koreanAge:Int { get { return westernAge + 1 } set(inputValue) { westernAge = inputValue - 1 }} //읽기전용 인스턴스 ..
[Swift] Property (프로퍼티) 프로퍼티에는 저장, 연산, 인스턴스, 타입이 있음. 프로퍼티는 구조체, 클래스, 열거형 내에서 구현 가능. 연산 프로퍼티는 var로만 설정 가능. /* 프로퍼티 */ //클래스를 예로 프로퍼티를 설정해봄. class Person { //저장 프로퍼티: 흔히 아는 변수 선언 방법. var name:String = "" //미리 자원을 소비하여 계산할 필요가 없을 때는 lazy사용. //구조체에서는 이 저장프로퍼티를 연산프로퍼티에서 get 할 때는 mutating해줘야 함. lazy var westernAge:Int = 0 //연산 프로퍼티: get과 set을 사용 var koreanAge:Int { get { return westernAge + 1 } set(inputValue) { westernAge =..
[Swift] Closure (클로저) /* Closure 클로저 */ // 중괄호로 묶인, 로직을 가진 코드 블럭이며 일급 객체 역할을 함. // 일급 객체는 전달 인자, 변수 및 상수, 반환값 등에 쓰일 수 있음. // 함수는 이름을 가진 클로저. // { ([매개변수 목록]) -> [반환타입] in [코드]} //함수 사용이라면 func add (num1:Int, num2:Int) -> Int { return num1+num2 } add(num1: 3, num2: 4) //같은 내용을 클로저로 변환하면 'func', 'add'를 지움 //값을 받을 변수 sum을 기입함 //중괄호 부터 시작, 반환타입과 코드 사이에 'in' 입력 var sum = { (num3:Int, num4:Int) -> Int in return num3+num4 }..
[Swift] enumerations (열거형) 복잡한 설명 다 빼고 열거형을 정의하라면? "내가 커스텀한 데이터 타입"이라고 할 수 있겠다. 만약 SpecialDay라는 열거형을 내가 만들면, Int, String 등과 같은 데이터 타입으로 사용하는 것. //여기서 SpecialDay는 Int와 같은 데이터 타입의 하나라고 보면 된다. var num:Int = 0 var day:SpecialDay = SpecialDay.birth /* Enumerations (열거형) */ //열거형은 연관된 값들을 묶어 타입-safe하게 사용하는데 목적이 있음 //C언어 열거형과의 차이점은 원시값(RawValue)를 주지 않아도 되며, 정수형에 한정되지 않는다는 것 //1-class Type으로 어디에서나 사용될 자격이 있음 //C언어보다 기능이 확장되어 프로퍼티..
[Swift] Optional (옵셔널) 옵셔널은 간단히 말해 데이터 타입의 한 종류라고 보면 된다. var num1: Int = 3 //3의 값을 가지는 '정수형' 변수 var num2: Int? = 5 //5의 값을 가지는 '옵셔널 정수형' 변수 단, 옵셔널 타입과 일반 타입의 차이점은 nil(값 없음)값을 사용할 수 있느냐의 차이. var num3: Int = nil //일반 정수형 타입에서 nil은 불가능, 오류 발생!!! var num4: Int? = nil //옵셔널 정수형 타입에서 nil 가능 그리고 옵셔널은 사용이 잘못된다면 오류가 날 소지가 있음. 때문에 언래핑(unwrapping) 작업을 따로 해줘야 안전하게 사용 가능. /* Optional */ var optNum: Int? //optional 데이터 타입 선언된 변수 op..
[Swift] Class (클래스) 클래스 역시 구조체, 함수 등과 같은 특정 작업을 위해 모아 둔 코드 덩어리들이다. 구조체와 거의 흡사하며, 차이점은 클래스=참조타입, 구조체=값타입 이라는 점. 또한, 상속 등 여러 차이점이 있지만 그것은 나중에 보자. /* 클래스 */ //클래스는 전반적으로 구조체와 같음 //구조체와의 차이점은, 클래스는 참조타입, 구조체는 값타입 class Person { //가변 프로퍼티 초기화 var name = "James" var age = 0 var adress = "California" //인스턴스 메서드 func greeting(a:String) { print("Hello, \(a)") } } var steve = Person() //클래스 인스턴스 생성 steve.name = "Steve" steve..