전체 글 94

프로퍼티 4편 (타입 프로퍼티)

타입 프로퍼티 타입을 미리 정의하고, 해당 타입의 인스턴스가 생성되었을 때 사용하는 프로퍼티가 아닌, 타입 자체에 속하는 프로퍼티를 타입 프로퍼티라고 함 클래스, 구조체, 열거형에서 사용 인스턴스의 생성 여부와 상관없이 타입 프로퍼티의 값은 1개 타입 프로퍼티를 타입으로 하는 모든 인스턴스가 공통으로 사용하는 값 모든 인스턴스에서 공용으로 접근하고 값을 변경할 수 있는 변수 등을 정의할 때 유용 (싱글톤) 타입 프로퍼티는 저장 타입 프로퍼티, 연산 타입 프로퍼티가 있음 저장 타입 프로퍼티 변수, 상수로 정의 가능 및 선언할 당시 초기값을 가지고 있어야 함 이 때 지연 연산되는데, lazy 키워드를 붙일 필요 없음 연산 타입 프로퍼티 변수로만 정의 ※여기서 저장, 연산 프로퍼티 앞에 "static" 키워드..

iOS/Swift 2024.01.25

프로퍼티 3편 (프로퍼티 감시자)

프로퍼티 감시자 프로퍼티의 값 변경에 따라 작업을 구현할 수 있음 프로퍼티에 새로운 값이 할당 또는 변경 또는 변경된 값이 현재와 차이가 없더라도 호출되어 작업을 구현할 수 있음 프로퍼티 감시자는 지연 저장 프로퍼티에는 사용 못함 일반 저장 프로퍼티에 사용 또는 프로퍼티 재정의해 상속받은 저장 프로퍼티, 연산 프로퍼티에 사용 프로퍼티 감시자 메서드 프로퍼티의 값이 변경되기 직전에 호출하는 willSet 프로퍼티의 값이 변경된 직후에 호출하는 didSet 프로퍼티 감시자 class FruitInfo { var name: String = "what?" { willSet { print("now fruit: \(name), after fruit: \(newValue)") } didSet { print("now ..

iOS/Swift 2024.01.23

iOS 화면 표현 구조

디바이스 스크린에 하나의 화면만 표시 가능 다른 프로그램 실행되면 기존의 화면은 내려가고 그 자리를 새로운 화면이 대신 채움 윈도우 iOS에서 디바이스의 스크린을 빈틈없이 채우기 위한 객체 유저 인터페이스 표현 계층의 최상위에 위치 뷰의 일종이지만, 직접 콘텐츠를 가지지 않음 단지 콘텐츠를 갖는 뷰를 내부에 배치하여 화면에 출력하는 역할 만약에 화면이 전환된다면? 단지 윈도우 내부에 배치된 뷰 콘텐츠만 변경됨 (윈도우 객체 자체는 전환되지 않음) https://developer.apple.com/documentation/uikit/uiwindow UIWindow | Apple Developer Documentation The backdrop for your app’s user interface and t..

iOS/UIKIT 2024.01.22

프로퍼티 2편 (연산 프로퍼티)

연산 프로퍼티 특정 상태에 따른 값을 연산하는 프로퍼티 인스턴스 내/외부의 값을 연산하여 값을 돌려주는 접근자(getter) 역할 은닉화된 내부의 프로퍼티 값을 간접적으로 설정하는 설정자(setter) 역할 클래스, 구조체, 열거형에 연산 프로퍼티 정의 가능 (저장 프로퍼티는 클래스와 구조체에서만 정의) 연산 프로퍼티의 정의 var name: Type { // 접근자: 다른 저장 프로퍼티의 값을 얻거나 연산하여 리턴 get { statements return expr } // 설정자: 다른 저장 프로퍼티에 값을 저장 set(name) { statements } } 연산 프로퍼티의 사용 class Fruit { var name: String = "" var checkedName: String { get {..

iOS/Swift 2024.01.22

프로퍼티 1편 (저장 프로퍼티)

프로퍼티 클래스, 구조체 또는 열거형에 관련된 값이라는 의미 프로퍼티의 종류 "저장 프로퍼티" 인스턴스의 변수 또는 상수 의미 "연산 프로퍼티" 값을 저장하는 것이 아닌 특정 연산을 실행한 결과값을 의미 클래스, 구조체, 열거형에서 쓰임 "타입 프로퍼티" 저장 프로퍼티, 연산 프로퍼티는 특정 타입의 인스턴스에 사용되지만, 타입 프로퍼티는 특정 타입에 사용 "프로퍼티 감시자" 프로퍼티의 값이 변할 때 값의 변화에 따른 특정 작업 실행 저장 프로퍼티 클래스 또는 구조체의 인스턴스와 연관된 값을 저장 (var -> 변수 / let -> 상수) ▶ 구조체와 클래스의 저장 프로퍼티 구조체 저장 프로퍼티가 옵셔널이 아니더라도, 저장 프로퍼티를 포함하는 이니셜라이저를 자동 생성 클래스 저장 프로퍼티가 옵셔널이 아니면..

iOS/Swift 2024.01.19

구조체와 클래스의 차이

값 타입과 참조 타입 값 타입과 참조 타입의 가장 큰 차이점은 값 타입 경우, 전달될 값이 복사 참조 타입 경우, 전달될 값이 복사되는게 아니라, 참조(주소)가 전달 값 타입과 참조 타입 차이 // 구조체 예시 struct PersonStruct { var name: String var age: Int // 구조체에서 멤버 메서드를 정의할 수 있습니다. func printInfo() { print("Struct - Name: \(name), Age: \(age)") } } // 클래스 예시 class PersonClass { var name: String var age: Int // 클래스에서는 초기화 메서드를 사용해야 합니다. init(name: String, age: Int) { self.name =..

iOS/Swift 2024.01.18

클래스

클래스 정의 class 클래스 이름 { 프로퍼티와 메서드 } 클래스를 정의하는 것은 구조체와 비슷함 단, 클래스는 상속받을 수 있기 때문에, 클래스 이름 뒤에 콜론 (:)을 붙여 부모 클래스 이름을 명시 class 클래스 이름: 부모클래스 이름 { 프로퍼티와 메서드 } FruitInfo 클래스 정의 class FruitInfo { var name: String = "" var price: Double = 0.0 } 클래스 인스턴스의 생성과 초기화 위에 정의한 FruitInfo 클래스에서는 프로퍼티의 기본값이 지정되어 있음 따라서 전달인자를 통해 초기값을 전달할 필요 없음 인스턴스가 생성 및 초기화 후 프로퍼티 값에 접근하려면? 마침표(.) 사용 구조체와 다르게 클래스는 let 으로 선언해도 내부 프로퍼티..

iOS/Swift 2024.01.17

구조체

Structures and Classes | Documentation (swift.org) Documentation docs.swift.org 구조체 정의 struct 키워드 사용 struct 구조체 이름 { 프로퍼티와 메서드 } FruitInfo 구조체 정의 struct FruitInfo { var name: String var price: Double } 구조체 인스턴스의 생성 및 초기화 구조체에 기본 생성된 이니셜라이저의 매개변수는 구조체의 프로퍼티 이름으로 자동 지정 (물론, 사용자 정의 이니셜라이저도 사용 가능) 인스턴스 생성 및 초기화된 후 프로퍼티 값에 접근하고 싶다면? 마침표(.)를 사용 구조체를 상수 let으로 선언 -> 값 변경 불가 변수 var로 선언 -> 값 변경 가능 FruitIn..

iOS/Swift 2024.01.17