초기화 인스턴스를 생성하는 과정 저장 속성에 대한 초기값을 설정하여 사용가능한 상태가 되는 것 즉, 생성자 실행의 종료시점에는 모든 저장 속성에 값이 저장되어 있어야 함 오버로딩 지원 파라미터의 수, 아규먼트 레이블, 자료형으로 구분 class Foden { var name: String ... init(name: String, weight: Int) { self.name = name self.weight = weight } ... init(name: String) { self.init(name: name, weight: 80.0) } } 클래스, 구조체, (열거형) 동일 기본 생성자 : 저장 속성의 기본값을 설정하면 “자동” 구현이 제공 = 생성자를 아무것도 만들지 않으면 저장 속성 초기화 시 문제 없..
No.18 클래스의 상속 상속의 기본 개념 [수직 확장] : 본질적으로 성격이 비슷한 타입을 새로 만들어 데이터(저장속성)를 추가하거나 기능(메서드)를 변형시켜서 사용하려는 것 스위프트는 다중상속 지원 안함 클래스에서만 지원하는 기능(구조체는 상속 불가능) 클래스의 상속 금지의 키워드 final final를 각 멤버 앞에 붙인 경우, 해당 멤버 재정의 불가라는 뜻 상위 클래스에서 존재하는 멤버를 변형하는 것을 재정의라고 함 재정의를 하려는 멤버에는 override 키워드를 붙임 저장 속성은 재정의 불가 childClass에서는 parentClass의 데이터(저장속성)를 추가만, 기능(메서드)를 추가 및 변형(대체)만 가능하다. 즉, childClass는 parentClass의 메모리 구조를 깰 수 없기 ..
No.17 타입 메서드 메서드이지만, 인스턴스의 성격이 아닌 타입 자체의 성격에 가까운 메서드 메서드이기 때문에 메모리 공간 할당 X 인스턴스에 대한 속성이 아니고 타입자체에 대한 속성. 내/외부에서 Type.method()로 접근 메서드 실행시, (따로) 스택프레임을 만들고 타입 데이터를 사용 → 종료시 스택프레임 타입에 해당하는 보편적인 동작의 경우 Int.random(in: 1…100) class Dog { static var species = "Dog" init(name: String, weight: Double) { self.name = name self.weight = weight } static func letmeKnow() { // 타입 메서드에서, 타입속성에 접근시에는 타입으로 접근하지 ..
1.18일 스터디 준비 자료를 만들면서 작성해 본 글이다. 우선적으로 짧은 글로 설명할 수 있는 부분에 대해선 PDF 파일로 제작하였고, 해당 글에서는 "struct", "class"의 차이점을 알아봄과 동시에 메모리 관련 내용도 살펴볼 예정이다. 단, 현재까지 학습했던 내용을 기반으로 작성하는 글이라 추후 새로 배운 개념들에 대한 적용할 예정이다. Class, Struct 해당 링크 사이트를 참고했습니다. [Swift] Class와 Struct의 차이점? 구조체와 클래스 (Structures and Classes) Swift에서 구조체와 클래스의 공통점 값을 저장하는 속성(프로퍼티) 정의 기능 제공을 위한 메서드 정의 서브 스크립트 구문을 사용하여 값에 접근을 제공하는 서브 스크립트 정의 초기화 상태를..
No.14 저장 속성(Stored Properties) 값이 저장되는 일반적인 속성(변수)을 저장 속성이라고 함 *각 인스턴스가 가지는 고유의 데이터 저장 공간* 저장 속성은 var, let으로 선언 가능 저장 속성(변수)은 각 속성자체가 고유의 메모리 공간을 가짐 초기화 이전에 값을 가지고 있거나, 생성자 메서드를 통해 값을 반드시 초기화 해야만 함 열거형의 경우 따로 메모리 공간이 필요한 저장 속성(데이터)은 선언할 수 없음. struct Bird { var name: String // 저장 속성 name, weight var weight: Double init(name: String, weight: Double) { // 기본값이 없으면, 생성자를 통해 값을 반드시 초기화해야함 self.name =..
진행된 강의 범위 내에서 내가 만들어 볼 수 있는 앱이 뭐가 있을까 고민을 하던 도중, 가장 소스도 많고, 로직이 많지 않은 "BMI Calculator" 앱을 제작해봤다. 생각보다 숫자만 입력받기 위해 작성해야 할 guard, if 문이 많았고, 각각이 입력된 키, 몸무게 값이 nil 인지 아닌지를 검사하는 로직을 작성해야 했다. 만약 숫자 형식을 입력하지 않을 시 모달창을 띄우도록 displayError 함수를 구글링해 참고하여 사용했다. 확실한 건, UI/UX 적 관점이 많이 부족해, 내 나름대로 화면 조정도 하면서 만든 것이지만.. 참 부족하다는 생각이 들어, 해당 분야에 대한 공부도 해보고 싶다는 생각을 했다. (이래서 디자이너, 디자이너..) 다음에는 AI를 이용해 디자인 초안을 만든 뒤에 간..
No.12 구조체, 클래스의 초기화 의미 클래스도 처음부터 만들어 낼 때 데이터를 담을 수 있다. 생성자 인스턴스를 만들때 사용하는 특별한 메서드 초기화 하는 역할 모든 저장 속성(변수)를 초기화 해야 함 (구조체, 클래스 동일) 모든 속성에 값을 넣어줘야 한다고 생각하자. 생성자 실행 종료시점에는 모든 속성의 초기값이 저장되어 있어야 함(초기화가 완료되지 않으면 에러) 생성자의 목적 “저장속성 초기화” 클래스, 구조체, (열거형)은 모두 설계도 일뿐, 실제 데이터(속성), 동작(메서드)을 사용하기 위해서는 초기화 과정이 반드시 필요 인스턴스 초기화 완료 시 메모리에 정상적으로 인스턴스가 생성 오버로딩 지원 생성자를 여러개 구현 가능 여러 방식으로 인스턴스를 생성하는 방법을 제공 class Dog { v..
No.11 타입(Type) 정리 Basic Type int, Double, String, Bool… Custom Type Enum, Class, Struct 클래스와 구조체 프로그래밍 패러다임의 변화를 일으킨 녀석들 객체 지향 프로그래밍 클래스 카카오톡 친구목록 빈 틀 : 사진, 이름, 상태메세지 객체를 찍어내는 틀을 클래스라고 한다. 객체(실제 데이터) 메모리에 각각 저장된 실제 데이터 (붕어빵) 클래스는 내부에 변수(속성-property), 함수(메서드-method)로 이루어진다. 구조체는 클래스와 같이 붕어빵 틀을 만드는 것은 동일하다. 클래스와 구조체 둘다, 메모리에 찍어낸 것(실제의 데이터)을 인스턴스(instance)라고 함. 인스턴스는 실제로 메모리에 할당되어 구체적 실체를 갖춘 것이라는 의..
02 stack view 여러 object를 하나로 묶어 다룰 수 있다. spacing : 사이 간격 Distribution : spacing을 뺀 크기를 어떻게 다룰 지 결정 aspect ratio 디스플레이 화면 가로와 세로 길이의 비율을 뜻함 #imageLiteral() 이미지 선택 정렬이 필요한 것들은 stack view로 묶는다. 열거형을 쓰게 되면은 코, 데, 힙, 스 영역에서 앱을 빌드하는 순간 코드 영역에 들어간다고 생각하기. 그게 어떤 데이터로서의 역할을 할 수 있다면 데이터 영역에도 일정 부분 존재한다. 따라서, 열거형을 나타내는 코드가 데이터 영역에도 들어가게 된다. @main main.swift 과 동일한 역할을 하는 것을 알려주는 키워드 앱 실행 시 가장 먼저 실행되는 부분
No.10 스터디 준비 자료 컬렉션 Array, Dictionary, Set array order(o) dictionary key, value order(x) set order(x) Array var numArr: Array = [1, 2, 3, 4, 5] 순서가 있다는 것이 왜 중요할까? Indexing이 가능하다. 인덱스 기반으로 요소 접근 (Accessing Elements), 요소 변경 (Modifying Elements), 부분 배열 생성 (Slicing), 범위로 요소 접근 (Accessing Elements with a Range) 등 여러가지 기능이 가능하다. 반면에 딕셔너리, 집합은 인덱싱이 안되므로, 위와 같은 기능들을 할 순 없음. 배열 선언 // 가변 배열 var numArr: [I..