ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift #8 - 클래스
    Swift의 온도 2021. 1. 13. 00:40

     

    1. 객체지향 프로그래밍

     

    *다양한 플랫폼에서 객체지향 프로그래밍 사용

    *iOS/macOS 개발에도 적용

     

    - 특징

    #모든 것을 객체로 취급

    #화면(씬) 단위

    #화면 내 뷰와 컨트롤

    #객체의 속성과 행위

     

    - 애플리케이션과 객체

    #학사 관리 시스템

     *학생의 이름, 전공

     *수강 신청 과목

     *수강 신청 하기

     

    #게임

     *게임 유닛

     *유닛의 위치, 능력

     *유닛 이동, 공격/방어 등

     

    #객체 식별하기

     *객체 식별하기

     *같은 종류의 객체

     *서로 다른 종류의 객체

     

    #특징

    *학생 : 홍길동, 김유신

    *수강과목 : 데이터 구조, 프로그래밍 언어 구조, 데이터베이스

     

    - 객체의 속성과 행위

    #객체지향 프로그래밍 작성 방법

     

    #객체의 속성

     *가로와 세로가 10, 20인 사각형

     *가로와 세로가 30, 30인 사각형

     

    #객체의 행위

     *사각형의 넓이

     *사각형은 정사각형인가?

     

    #사각형을 다루는 애플리케이션

     

    #객체 타입 정의 : 클래스

     *객체의 속성 정의 : 프로퍼티

     *객체의 행위 정의 : 메소드

     

    #클래스에서 객체 생성

     *객체 생성

     *객체에 속성 설정

     *객체 메소드 실행

     

    2. 클래스와 프로퍼티

     

    - 클래스 정의와 객체 생성

    *클래스 정의:class [클래스 이름] {}
     
    class Rectangle {
    }
     
    *객체 생성 : [클래스 이름]()
     
    var rect = Rectangle(
    cs

     

    - 객체 생성

    *var : 새로운 객체 대입 가능
     
    var rect = Rectangle()
    rect = Rectangle()
     
    *let : 새로운 객체 대입 불가
     
    let rect2 = Rectangle()
    rect = Rectangle() // Error
    cs

     

    - 소스 코드 파일과 클래스

    #소스 파일 단위와 클래스 정의 단위는 서로 다름

    #하나의 소스 코드 파일에 다수의 클래스 작성

    #하나의 클래스를 개별 소스 코드 파일 생성

    #하나의 클래스를 다수의 소스 코드 파일에 작성(extension)

     

    - Swift 파일 생성

    #소스 코드 파일 생성

     *생성 메뉴

     *Cocoa class : 클래스로 생성

     *Swift File : 비어있는 파일 생성

     

    - 클래스 생성 : 클래스 정보 입력

    #Cocoa (Touch) 클래스 파일 템플릿

     *클래스 정보 입력

     *클래스 이름

     *부모 클래스

     *개발 언어

     

    - 소스 코드 파일

    #소스 코드 파일 생성

     *파일 생성 완료

     *Xcode 네비게이터에 소스 목록

     *프로젝트 생성 - 기본 1개의 모듈

     *같은 모듈 내 소스 파일은 import 불필요

     

    - 메인 파일

    #메인 소스 코드 파일

     *main.swift

     *처음 동작 코드

     

    #custom swift file

     *타입 정의

     *함수 정의

     *탑 레벨에 실행 코드 작성 불가

     

    - 프로퍼티

    #프로퍼티

     *객체의 데이터

     *저장/계산 프로퍼티

     *값을 저장하고 읽는 행위

     

    #저장 프로퍼티

     *데이터를 저장하는 용도

     *데이터 읽기/쓰기 행위

     *객체 생성시 초기화, 초기화 방법 필요

     

    #계산 프로퍼티

     * 데이터 저장 안함

     *프로퍼티 읽기/쓰기 코드 작성

     

    #사각형 클래스(Rettangle) 프로퍼티

     

    #저장 프로퍼티

     *가로 길이

     *세로 길이

     

    #계산 프로퍼티

     *크기

     *정사각형인가?

     

    - 저장 프로퍼티

    class MyClass {
        //초기값을 설정한 프로퍼티
        var intProperty
     
        //초기값을 설정하지 않은 옵셔널 프로퍼티
        var floatProperty : Float?
     
        //에러 - 초기화되지 않는 프로퍼티 : Initializer 필요
        var strProperty : String
    }
    cs

     

    #저장 프로퍼티 사용

     *프로퍼티에 값 저장
     *프로퍼티의 값 얻어오기
     
    var obj = MyClass()
     
    obj.intProperty = 10
    obj.floatProperty = 3.1
     
    let val = obj.floatProperty
    val // Optional(3.1)
    cs

     

    - 계산 프로퍼티

    #값을 얻어오기(get)

    #값을 설정하기

     

    #정의

    var [프로퍼티 이름] : [타입] {
        get {
            return RETURN_VALUE
        }
        set(newVale) {
        }
    }
    cs

     

    - 저장 프로퍼티와 계산 프로퍼티

    class Person {
        let thisYear = 2017
        var birthYear : int = 0
     
        var age : Int {
            get {
                return thisYear - birthYear
            }
            set {
                birthYear = thisYear - newValue
            }
        }
    }
    cs

     

    - 계산 프로퍼티

    #계산 프로퍼티 : 읽고 쓰기

     *읽고 쓰기 가능 : get/set 모두 작성
     *읽기(get)전용 : get 선언 생략 가능
     
    var isSquare : Bool {
        get {
            return width == height
        }
    }
     
    *쓰기(set)전용은 없음
    cs

     

    3. 메소드

     

    - 메소드

    #클래스 내에 작성하는 함수

    class Counter {
        var count = 0
     
        func increment() {
            count++
        }
        func increment(amout: Int) {
            count +=amount
        }
        func increment(amount: Int, times:Int) {
            count += amount * times
        }
    }
    cs

     

    - 메소드 사용하기

    #메소드 사용

    *객체 생성 후 사용
    *외부 파라미터 이름 사용
     
    let counter = Counter()
     
    counter.increment()
    counter.increment(amount:5)
    counter.increment(amount:3, times:5)
    cs

     

    - self 포인터

    *객체 자신을 참조하는 포인터
    *프로퍼티 이름과 파라미터 이름이 겹칠 때
     
    class Counter {
        var count = 0
        func setCount(count: Int) {
            self.count = count
        }
    }
    cs

     

    4. 타입 메소드, 타입 프로퍼티

     

    - 타입 메소드, 타입 프로퍼티

    #인스턴스 메소드

     *객체 생성, 객체에 사용(obj, method)

     *객체의 데이터(프로퍼티) 사용 가능

     

    #타입 메소드

     *객체 생성하지 않고 사용

     *프로퍼티 접근 불가

     *static 키워드

     

    - 타입 메소드

    #타입 메소드, 인스턴스 메소드

    class Myclass {
        var property = 0
     
        //타입 메소드
        static func typeMethod() {
            property = 2 //에러 타입 메소드에서 프로퍼티 접근 불가
            print("Type method works")
        }
     
        func intanceMethod(0 {
            property = 1 //인스턴스 메소드에서 프로퍼티 접근 가능
            print("Instance method works")
        }
    }
    cs

     

    - 인스턴스 메소드, 타입 메소드

    #메소드 사용

    *인스턴스 메소드 사용
     
    var obj = MyClass()
    obj.intanceMethod()
     
    *타입 메소드 사용
     
    MyClass.typeMethod()
    cs

     

    - 타입 프로퍼티

    *계산 프로퍼티, 저장 프로퍼티 가능
    *객체 생성하지 않고 사용
     
    class Rectangle {
        var width : Int = 0
     
        //계산 타입 프로퍼티
        static var nmae : String {
            return "사각형"
        }
        //저장 타입 프로퍼티
        static var edge = 4
    }
    cs

     

    - 프로퍼티 사용

    var obj = Rectangle()
    obj.width = 10
     
    //타임 프로퍼티 접근
    Rectangle.edge // 4
    REctangle.name
    cs

     

    - 프로퍼티 변경 감시

    * 음수 길이 감시하기
     
    class Rectangle {
        var height : Int = 0 {
            willSet {
                print("사각형 높이 변경 예정 : \(newValue)")
            }
            didSet {
                print("사각형 높이 변경 완료. 이전값 : \(oldValue)")
            }
        }
    }
    cs

     

     

    - 프로퍼티 늦은 초기화

    #다른 클래스 타입의 프로퍼티 초기화

    *프로퍼티 초기값으로 객체 새성
     
    class Person
        var phone = Phone()
    }
    calss Phone {
        var number : String
        init() {
            print("Phone 객체 생성")
            number = "010-1234-5678"
        }
    }
    let obj = Person()
    cs

     

    #프로퍼티의 늦은 초기화 : lazy

    *프로퍼티를 사용할 때 초기화
     
    class Person {
        lazy var phone = Phone()
    }
    let john = Person()
    john.phone
    cs

     

     

    'Swift의 온도' 카테고리의 다른 글

    Swift #10 - 상속  (0) 2021.01.15
    Swift #9 - 객체 초기화  (0) 2021.01.14
    Swift #7 - 함수  (0) 2021.01.12
    Swift #6 - nil과 옵셔널  (0) 2021.01.08
    Swift #5 - 제어문  (0) 2021.01.07

    댓글