-
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() // Errorcs - 소스 코드 파일과 클래스
#소스 파일 단위와 클래스 정의 단위는 서로 다름
#하나의 소스 코드 파일에 다수의 클래스 작성
#하나의 클래스를 개별 소스 코드 파일 생성
#하나의 클래스를 다수의 소스 코드 파일에 작성(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 = 10obj.floatProperty = 3.1let val = obj.floatPropertyval // Optional(3.1)cs - 계산 프로퍼티
#값을 얻어오기(get)
#값을 설정하기
#정의
var [프로퍼티 이름] : [타입] {get {return RETURN_VALUE}set(newVale) {}}cs - 저장 프로퍼티와 계산 프로퍼티
class Person {let thisYear = 2017var birthYear : int = 0var 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 = 0func 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 = 0func 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 - 인스턴스 메소드, 타입 메소드
#메소드 사용
*계산 프로퍼티, 저장 프로퍼티 가능*객체 생성하지 않고 사용class Rectangle {var width : Int = 0//계산 타입 프로퍼티static var nmae : String {return "사각형"}//저장 타입 프로퍼티static var edge = 4}cs - 프로퍼티 사용
var obj = Rectangle()obj.width = 10//타임 프로퍼티 접근Rectangle.edge // 4REctangle.namecs - 프로퍼티 변경 감시
* 음수 길이 감시하기class Rectangle {var height : Int = 0 {willSet {print("사각형 높이 변경 예정 : \(newValue)")}didSet {print("사각형 높이 변경 완료. 이전값 : \(oldValue)")}}}cs - 프로퍼티 늦은 초기화
#다른 클래스 타입의 프로퍼티 초기화
*프로퍼티 초기값으로 객체 새성class Personvar phone = Phone()}calss Phone {var number : Stringinit() {print("Phone 객체 생성")number = "010-1234-5678"}}let obj = Person()cs #프로퍼티의 늦은 초기화 : lazy
*프로퍼티를 사용할 때 초기화class Person {lazy var phone = Phone()}let john = Person()john.phonecs '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