Published 2021. 10. 18. 13:43

1. Overriding

부모클래스로부터 상속받은 메서드의 내용을 자식클래스에서 사용하기에 맞게

변경하는것.

 

매개변수와 return type이 같아야 한다

(override func 함수명())

자식 class에게 method를 제공한다

 

함수 사용시 super 키워드 사용

클래스를 상속 받아 일부 메소드만 수정해 사용할 수 있다

코드의 가독성이 증가하며 유지보수가 쉽다

 

출력 시 부모, 자식에 같은 Method가 있으면 자식 우선

 

 

 

2. Overloding

클래스 내에서 이름이 같은 함수가 여러 개 있는 것

 

매개변수의 유형과 개수가 다르도록 하는 기술

리턴값만을 다르게 갖는 오버로딩은 작성 할 수 없다.

기존에 없던 새로운 메서드를 정의하는 것

 

 

 

 

 

 

 

 

3. 과제 클래스 하나 찾아서 간단 도움말 만들기

 

 

클래스 : UIImageView

기능 : 단일 이미지(jpg, pnp, gif)를 인터페이스에 표시하는 기능

 

필수 생성자 : init(coder: NSCoder), init(frame: CGRect)

 

let rect = CGRect(x: 4, y: 4, width: 50, height: 50)

let myView = UIView(frame: rect)

 

함수

func startAnimating() 이미지 애니메이션 시작

func stopAnimating() 이미지 애니메이션 중지

(로딩 화면 등에서 활용)

 

예제

image 불러오기 UIImage

 

var uiImageView = UIImageView()

var image: UIImage = UIImage(named: "sdk")!

uiImageView = UIImageView(image: image)

uiImageView

 

image url로 불러오기 UIImage

let url =URL(string: "http로 시작하는 이미지 주소)

let data =try Data(contentsOf: url!)

uiImageView.image = UIImage(data : data)

uiImageView

 

4. Human Interface Guidelines(HIG)

 

앱을 만들시 가이드라인이 있음

디자인 할시 필요한 정보와 UI 리소스가 모여있는 곳

 

https://developer.apple.com/kr/design

 

 

 

 

 

 

5. extension(확장)

 

 

computed instance, computed type properties

추가할 때 사용한다

 

class, struct, enum, protocol에 새로운 기능을 추가

내장된 클래스에 기능을 추가할 시 매우 효과적

 

extension 기존타입이름(class, struct, enum, protocol)

{

//기능 추가

}

 

과제


extension Double

{

var multiply : Double

{ return self *self } //현재 인스턴스를 제곱

}

let Value =5.5

print(Value.multiply) //30.25

print(3.0.multiply) //9.0 Double 값에 이어 .으로 사용

 

 

 

 

 

 

6. 접근제어(access modifier)

 

코드끼리 상호작용을 할 때 파일 간 또는 모듈 간에

접근을 제한할 수 있는 기능

 

캡슐화와 연관 되어있다

 

모듈은 코드 배포(code distribution)의 단일 유닛

 

private //현재 블록 내에서만 가능

fileprivate //현재 소스 파일 내에서 가능

internal //해당 모듈의 모든 소스 파일 내에서 가능 (생략 가능)

public //모듈의 모든 소스 파일 내에서 접근, 다른 모듈 소스도 가능

open //모듈 외부까지 접근 가능, 클래스 및 클래스 멤버에만 적용

 

swift 접근제어를 사용할 수 있는 5가지

class, property, instance method, 생략(internal)

 

접근 수준(높은순)

open public internal(기본) fileprivate private

 

접근 제어

Ex) open class var blue : UIColor { get }

 

open : 모듈 외부까지(클래스에만 적용) 접근 가능

class : class property

{ get } : Read only property (읽기, 쓰기 가능)

{ get set } : read and write property (읽기 가능)

 

 

 

 

 

7. 프로토콜(protocol)

 

특정 클래스와 관련없는 함수(메서드)들의 선언 집합

함수(method) 정의는 없음)

기능이나 속성에 대한 설계도

 

protocol == 자바 C#interface

== C++abstarct base class

 

 

8. Swift 상속과 Protocol 채택

 

Class 자식 : 부모

{

 

}

부모 클래스는 오직 하나

: 이후 여러 개이면 부모를 제외한 나머지는 Protocol

 

class 클래스명:부모명, 프로토콜명{ }

부모가 있으면 부모 다음에 표기

부모로부터 상속받고 프로토콜 채택

부모가 없을 시 바로 표기 가능

class 클래스명:프로토컬명 { }

 

상속은 클래스만 가능

 

프로토콜을 채택 할 수 있는 것

클래스, 구조체(struct), 열거형(enum), extension

 

 

 

 

 

9. protocol 정의

 

protocol 프로토콜명

{

프로퍼티명

메서드 선언 //메서드는 선언만

}

 

protocol 프로토콜명 : 부모1프로토콜, 부모2프로토콜

{ //다중 상속 가능 (클래스는 단일 상속) }

 

 

protocolproperty / method 선언

 

protocol keepGoing

{

var x : Int { get set } //stored property, 읽기와 쓰기가 가능

var y : Int { get } //stored property, 읽기가 가능

func run() //기능이 없는 선언만

 

}

 

class add : keepGoing

{

var x =3 //protocol 채택 후 준수(conform)

var y =4 //protocol 채택 후 준수(conform)

func run() { print("뛴다") } //run 함수 구현

}

 

class stop : keepGoing //다중상속

{

var x =3 //protocol 채택 후 준수(conform)

var y =4 //protocol 채택 후 준수(conform)

func run() { print("멈춰!") } //run 함수 구현

}

 

let start = add()

print(start.x) //3

print(start.y) //4

start.run()//뛴다

 

let end = stop() //다중상속

end.run() //멈춰

10. delegate

 

대리자, 조력자

지정된 메서드를 통하여 처리해 줌

일부를 다른 객체에 넘기는 것

보통 프로토콜 사용

 

 

11. 과제

 

protocol B //bb()라는 메소드가 하나있는 프로토콜(protocol) B을 만드시오.

{

func bb(y : Int) ->Int //bb()메서드는 Int형 값을 매개변수로 받아 Int형으로 리턴하는 메서드이다.

 

}

 

class C { } //클래스 A는 클래스 C라는 부모를 갖는다(C로부터 상속받는다).

 

class A : C, B //클래스 A에서 프로토콜 B를 채택하고, 준수하는 소스

{

func bb(y : Int) ->Int

{ return y *2 } //bb()메서드는 Int형 값을 매개변수로 받아 두 배한 값을 Int형으로

리턴하는 메서드

}

 

let a = A() //클래스 A의 인스턴스 a를 만들고 bb를 호출(argument3을 입력)하여

결과를 확인

print(a.bb(y:3)) //6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12. 예제 protocol 상속, overloading overriding

protocol B //bb()라는 메소드가 하나있는 프로토콜(protocol) B을 만드시오.

{

func bb(y : Int) ->Int //bb()메서드는 Int형 값을 매개변수로 받아 Int형으로 리턴하는 메서드이다.

 

}

class C //클래스 A는 클래스 C라는 부모를 갖는다(C로부터 상속받는다).

{

var name =""

func say() //override

{

print("hi", name)

}

 

}

class A : C, B //클래스 A에서 프로토콜 B를 채택하고, 준수하는 소스

{

var name2 ="장권" //override

var age =20

var weight =53.3

func bb(y : Int) ->Int

{ return y *2 } //bb()메서드는 Int형 값을 매개변수로 받아 두 배한 값을 Int형으로

 

override func say() //override

{

print("Hi,"+ name +"-"+ name2 +"!")

}

 

func display() //overloading

{

print("나이 : \(age), 몸무게 : \(weight)")

}

 

init(age: Int, weight : Double) //overloading

{ //1

self.age = age

self.weight = weight

}

init(age: Int)

{ //2

self.age = age

}

}

let a : A = A(age:10, weight:3.2)

let a2 : A = A(age:50)

 

print(a.bb(y:3)) //6

a.say() //Hi,-장권입니다!

a.display() //overloading 나이 : 10, 몸무게 : 3.2

a2.display() //overloading 나이 : 50, 몸무게 : 53.3

 

 

13. 열거형 enum

 

관련있는 데이터들이 멤버로 구성되어 있는 자료형 객체

원치 않는 값이 잘못 입력되는 것 방지

입력 받을 값이 한정되어 있을 때

특정 값 중 하나만 선택하게 할 때

 

사이즈

S, M, L

상의, 하의

 

정의

 

enum 열거형명

{

열거형 정의

}

 

enum Size

{

case small, medium, large //한줄로 멤버 나열 가능

case Xlarge

case XXlarge

}

 

//print(열거형명.멤버)

print(Size.Xlarge) //Xlarge

 

var Howbigger = Size.small

Howbigger = .small //열거형명 생략 가능

 

print(Howbigger) //large

 

Howbigger = medium //열거형명 생략 가능

print(Howbigger, type(of:Howbigger)) //medium size

 

열거형 enum member 기능 정의

 

enum Size

{

case small, medium, large //한줄로 멤버 나열 가능

case Xlarge

case XXlarge

}

 

var Howbigger : Size

Howbigger = .small


switch Howbigger

{

case .small: //현재 Howbigger

print("this is small size")

 

case .medium:

print("this is medium size")

 

case .large:

print("this is large size")

 

case .Xlarge:

print("this is Xlarge size")

 

case .XXlarge:

print("this is XXlarge size")

}

 

결과 값

this is small size

 

스와이프(swipe) 제스처는 자주 사용 되며

.up .down .left 등으로 축약해서 쓸 수 있음

 

 

 

 

 

14. ViewController.swif

 

import UIKit //FrameWork 포함하기 위해 사용 UIkit 디자인 요소 클래스

class ViewController : UIViewController //대게 Controller는 부모 클래스

{

@IBOutlet var lblHello: UILabel!

@IBOutlet var txtName: UITextField! //입력창(optional)

//Interface Builder Outlet(변수, 프로퍼티)

 

override func viewDidLoad() //override 직접 만든 함수를 호출

{

super.viewDidLoad() //자식이 만든 viewDidLoad에 추가하기 위함

}

@IBAction func btnSend(_ sender: UIButton)

//자료형 UIButton, 생략, 내부매개변수 sender

{

//Interface Builder Action(함수, 메서드)

lblHello.text ="Hello, "+ txtName.text!

//버튼이 눌릴 때 입력 Hello와 입력한 값이 입력 된다

}

}

'iOS🍎' 카테고리의 다른 글

iOS - 11주차  (0) 2021.11.16
iOS - 9주차  (0) 2021.11.02
iOS - 6주차  (0) 2021.10.12
iOS - 5주  (0) 2021.10.04
iOS - 4주차  (0) 2021.09.26
복사했습니다!