본문 바로가기

모바일앱/Swift78

클래스상속은 언제 하면 좋을까? 개발철학에 따라 다르다고 할 수 있다. 상속은 중복된 코드를 제거할 수 있는 기회가 있다. 하지만 상속이 잦아지면 상속의 깊이가 깊어져서 유지보수가 어려워질 수 있다. 사실 경험에서 나온다. 1. Single Responsibility 단일책임 ; 클래스가 한가지 점만 취급하는가? 2. Type Safety 타입이 분명해야할 때 ; 부모 혹은 다른 자식의 클래스를 명확하게 표현해야하는가? 3. Shared Based Classes 다자녀가 있다 ; 기본동작에 대해서 다양하게 구현해야하는가? 4. Extensibility 확장성이 필요한 경우; 외부앱에서 사용되어야 하는가? , 확장성이 필요한가? 5. Identity 정체를 파악하기 위해 ; 객체 자체의 정체성을 구분하고 싶은가? 1. 각 클래스는 한개의.. 2021. 10. 19.
상속 개념을 코드로 익히기 기본적인 형태 class Parent class Child : Parent Person : Super Class Student: Sub Class (Child Class) 아래 코드를 보자 Person과 Student라는 클래스가 두개 있다. 자세히보면 같은 내용의 코드들이 중복되어있는 것을 알수있다. 이럴때 상속이라는 개념을 적용할 수 있다. struct Grade { var letter: Character var points: Double var credits: Double } class Person { var firstName: String var lastName: String init(firstName: String, lastName: String) { self.firstName = firstNa.. 2021. 10. 18.
클래스, 언제 클래스? 언제 스트럭트? 클래스 개념 클래스는 스트럭쳐 처럼 관계가 있는 것들을 묶어서 표현한다. Object = Data + Method Objects는 클래스와 스트럭쳐 형태로 만들 수 있다. 하지만 두가지의 차이점은 실제 동작에서 차이가 있다. 생성되는 인스턴스가 할당되는 메모리의 차이가 있다. Structure는 Stack이라는 공간에 생성된다. Class는 Heap이라는 공간에 생성된다. Stack Heap은 다른 속성을 갖고 있는 메모리 공간이다. Stack 시스템에서 당장 실행해야하거나 타이트하게 컨트롤 및 매니징 해야하는 경우 함수를 생성 , 처리후 리턴하고 해당 변수도 스택에서 제거가 되나. 효율적이고 빠르다. Heap 시스템에서 클래스 같은 레퍼런스타입을 저장하는 데 사용된다. 큰 메모리 풀을 가지고 있어서 시.. 2021. 10. 16.
메소드 개념 ( + extension) Method 는 function과 마찬가지로 기능을 담당한다. 스트럭트와 관련 된 메소드 1. 스트럭트 생성, 함수생성, 인스턴스 생성 //스트럭트 생성 struct Lecture { var title: String var maxStudent: Int = 10 var numOfRegistered = 0 } //인스턴스 생성 var lec = Lecture(title: "iOS Basic") func remainSeats(of lec: Lecture) -> Int{ let remainSeats = lec.maxStudent - lec.numOfRegistered return remainSeats } remainSeats(of: lec) //10 2. 관계된 함수를 만들고 스트럭트에 메서드로 구현하기 오브젝.. 2021. 10. 14.
프로퍼티 vs 메소드 두개념이 언뜻 보면 비슷해보여 헷갈릴 수가 있어 개념을 다시 비교해보자 1. computed property 이미 저장된 것을 가지고 재가공할때 쓰임 2. 함수로 만드는 것 결론은 사실 같다 어떤 것이 더 좋을까? person.fullName person.fullName() 개념 Property: 호출시 (저장된) 값을 하나 반환한다. Method: 호출시 어떤 작업을 한다. 만약 Method가 그냥 값을 리턴하는 작업만 한다면? 2021. 10. 14.
프로퍼티 개념 #StoredProperty #ComputedProperty #instanceProperty #TypeProperty #willSet #didSet #lazyProperty 앞서서 우리는 Structure를 배웠는데 관계된 것들을 묶는 것을 말한다. 그리고 오브젝트도 관계된 것들을 묶어준 것이라고 언급한 적이 있다. Object = Data + Method 스트럭쳐를 구현하면서 데이터와 메서드를 만들었다. 우리가 예전에 풀었던 내용을 보면 이런 구조로 되어있다. struct Store { //-------> 데이터 파트 let loc: Location let name: String let deliveryRange = 2.0 //-------> 메소드 파트 //배달가능한지보는 함수 func isDelive.. 2021. 10. 13.
프로토콜 Protocol Int Double 등등도 하나의 스트럭트이다. 아래의 빨간부분은 프로토콜이다. 어려운 번역으로는 규약이다. -> 지켜야할 약속이라고 생각해보자. (코딩할 때 꼭 구현되어야하는 메소드나 프로퍼티의 목록) 어떤 서비스를 이용할 때 해야할 일들 뮤직 서비스에서는 아이디 생성, 결제 등등 해야할 일들이 있다. 고급프로그래밍을 하려면 꼭 해야할 작업이다. 아래의 프로토콜도 한번 보자. 이 프로토콜은 커스텀스트링컨버터블을 하려면 아래 저 디스크립션이라는 것을 해줘야한다는 뜻 지난번 도전과제에서 했던 스트럭트를 보자 CustomStringConvertible 은 description을 완성해야한다. 만약 프로토콜을 충족시키지 않으면 경고메세지가 생성된다. 원래 데이터를 우리가 볼수있도록 출력하면. .. 2021. 10. 13.
Struct만들기 도전과제 도전과제 1. 강의 이름, 강사 이름, 학생수를 가지는 Struct 만들기 (Lecture) 2. 강의 어레이와 강사이름을 받아서 , 해당 강사의 강의 이름을 출력하는 함수 만들기 3. 강의 3개 만들고 강사이름으로 강의 찾기 더보기 import SwiftUI // 도전과제 // 1. 강의 이름, 강사 이름, 학생수를 가지는 Struct 만들기 (Lecture) // 2. 강의 어레이와 강사이름을 받아서 , 해당 강사의 강의 이름을 출력하는 함수 만들기 // 3. 강의 3개 만들고 강사이름으로 강의 찾기 struct Lecture { let name: String let instructor: String let numOfStudent: Int } func printLectureName(from instr.. 2021. 10. 12.
구조체와 클래스의 차이점 구조체와 클래스 지금까지 기본적인 Basic Type과 그것들을 어떻게 저장하는지 배웠다. 이 값들을 많이 저장 할 때, 서로 관계하는 값들을 한꺼번에 관리하거나 표현하고 싶을 때 어떻게 할까? iOS강의 정보라면 강사정보, 강의 이름, 학생 수 등등 낱개 관리가 아니라 덩어리로 관리한다. 관계가 있는 여러 데이터를 묶어서 표현 Object = Data + Method Structure VS Class Structure Class Value Types Reference Types Copy Share 컴퓨터 안에 할당 되는 공간 Stack 컴퓨터 안에 할당 되는 공간 Heap import SwiftUI class PersonClass { var name: String var age: Int init(nam.. 2021. 10. 11.
Collection - Closure, Capturing Values Collection - Closure { ( parameters ) -> returntype in statements } 클로저 란? 이름이 없는 Method 혹은 함수 이다 공식 문서링크 https://docs.swift.org/swift-book/LanguageGuide/Closures.html Global and nested functions, as introduced in Functions, are actually special cases of closures. Closures take one of three forms: Global functions are closures that have a name and don’t capture any values. Nested functions are c.. 2021. 10. 10.