옵셔널 옵셔널은 Swift 언어의 중요한 기능 중 하나 이다. 옵셔널은 값이 존재할 수도 있고 존재하지 않을 수도 있는 값을 나타낸다. 이를 통해서 nil 값이 발생할 수 있는 상황에서 안전하게 코드를 작성할 수 있다. 옵셔널의 개념 두가지 값이 존재하는 경우 : 변수나 상수에 유효한 값이 할당된 경우를 나타낸다. 값이 존재하지 않는 경우 : 변수나 상수에 nil 이 할당된 경우를 나타낸다. 옵셔널은 ? 기호를 사용하여 선언되며, 예를 들어 Int? , String? 과 같은 형태로 사용된다. 옵셔널 해제(Optional Unwrapping) 옵셔널 변수에 접근하고 실제 값에 접근하기 위해서는 옵셔널 언랩핑이 필요하다. 옵셔널 바인딩(Optional Binding) : 옵셔널 바인딩은 옵셔널 변수에 대해..
Protocal 프로토콜은 메서드, 프로퍼티, 이니셜라이저 등 요구 사항을 정의하여 특정 기능, 기능 집합을 나타내는 개념 구체적인 구현을 하진 않고 요구 사항에 대한 명세만 정의한다. 클래스, 구조체 , 열거형 등 다양한 유형이 프로토콜을 사용하여 구현할 수 있다. 이를 통해 코드 재사용성 및 유연성을 높힐 수 있다. protocal SomeProtocal { //프로토콜의 요구사항 정의 } 매서드 요구 : 특정 메서드를 구현, 매개변수와 반환값의 타입, 메서드 이름, 인스턴스 or 타입메서드 등 명시할 수 있다. 프로퍼티 요구 : 특정 프로퍼티를 구현, 프로퍼티의 이름, 타입, 읽기 및 쓰기 가능 여부 명시 이니셜라이저 요구 : 특정 이니셜라이저를 구현, 매개 변수와 이니셜라이저 과정을 명시 서브스크..
Extention 확장 익스텐션은 기존 클래스, 구조체, 열거형 등 기존 코드를 변경하지 않고 기능을 추가하거나 수정할 수 있는 방법을 제공하여 유지보수와 확장성을 향상시키는데 유용하다. 익스텐션은 원래 있던 코드에 새로운 메서드 , 계산 속성 , 초기화 , 서브스크립트 , protocal 을 추가할 수 있다. extension ExtendedType { // 새로운 메서드 , 계산 속성 , 초기화 , 서브스크립트 등 }아래의 예시는 Int 타입에 squared 라는 계산 속성을 익스텐션을 통해 추가하여 새로운 기능을 추가하는 예시 이다. extension Int { var squared: Int { return self * self } } let number = 5 let squaredNumber = ..
Initializer 클래스, 구조체, 열거형 등 인스턴스를 생성하고 초기화 하는 메서드 이니셜라이저는 인스턴스의 모든 속성을 초기화 하여 사용 가능한 상태로 만든다. 초기화 할때 필요한 값을 전달하고 초기화 과정에서 다양한 작업을 수행할 수 있다. class Position { var x: Double var y: Double init(x: Double, y: Double) { self.x = x self.y = y } // Convenience Initializer convenience init(x: Double) { self.init(x: x, y: 0.0) } }Convenience Initializer 는 특정한 인스턴스에 값을 넣고 뺄 수 있도록 편리하게 구성 가능하다. 슈퍼클래스 이니셜라이저..
is 연산자 is 연산자는 특정 인스턴스가 지정된 타입인지 확인하는데 사용한다. 만약 인스턴스가 지정된 타입의 인스턴스라면 'true' 를 반환하고, 그렇지 않으면 'false' 를 반환합니다. class Animal { } class Dog: Animal { } let animal = Animal() let dog = Dog() print(animal is Animal) // 출력값 : true print(animal is Dog) // 출력값 : false Dog는 Animal을 상속받고 있으므로 is 관계가 될 수 없다. print(dog is Animal) // 출력값 : true print(dog is Dog) // 출력값 : trueas 연산자 as 연산자는 인스턴..
상속 부모 클래스의 특성과 동작을 자식 클래스가 물려받아 확장하고 수정할 수 있다. 이를 통해 코드의 재사용성과 구조화에 유용하다. class Figure { var name = "Unknown" init(name: String) { self.name = name } func draw() { print("draw \(name)") } } class Circle: Figure { var radius = 0.0 } let c = Circle(name: "Circle") c.radius c.name c.draw() class Rectangle: Figure { var width = 0.0 var height = 0.0 } class Square: Rectangle { }위 예제에서 Circle 은 Figure..