본문 바로가기

SWiFT

(11)
[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] 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] 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..
[Swift] Struct (구조체) 구조체 역시 함수와 같은, 관련 작업을 위해 모아 둔 코드 덩어리. 구조체는 함수보다 더 넓은 개념으로 사용되며, 구조체 안에 함수를 포함시킬 수도 있음(메서드). /* 구조체 */ struct MyStruct { //구조체 내 변수,상수는 '프로퍼티'로 불림 let name:String = "James" let age:Int = 29 //구조체 내 함수는 '메서드'라고 불림 func greeting() { print("Hello!") } } //구조체 인스턴스 생성 let myPerson = MyStruct() //구조체 인스턴스 프로퍼티, 메서드 접근은 점(dot)으로 myPerson.name myPerson.age myPerson.greeting()
[Swift] Function (함수) 많은 프로그래밍 언어에서 제공하는 코드 덩어리들이 있는데, 그 중 하나가 함수. 함수는 그 중 연산에 특화된 코드 덩어리이며, 기본적으로 매개변수를 통해 데이터를 받고, 데이터를 가공하여 반환하는 기능이 강점. 함수명은 다른 코드 덩어리들과는 달리 첫 문자를 소문자로 적는 것이 관행이라고 함. 매개변수가 없는 경우라도 소괄호"(,)"는 반드시 사용. (함수라는 것을 선언하고 변수명과 구분을 위해) /* 함수 */ //함수는 특정 작업을 위해 모아둔 코드 덩어리 //func ([매개변수명]:[매개변수형]) -> [반환형] { [코드] } //반환값이 없는 기본적인 코드 func greeting() { //반환형을 생략도 가능하고, void로 명시도 가능 print("Hello, World!") print(..