ㅇTL

class 본문

swift

class

정노르레기 2021. 5. 12. 16:28

* 객체 지향 프로그래밍의 핵심 목적 = 데이터 캡슐화 !

클래스에 저장된 데이터들은 오직 해당 클래스 내에 정의된 메서드만을 통해서 접근할 수 있다~.~

 

<구현>

class 이름: 부모클래스{

 ~

}

 

*프로퍼티 = 클래스 내의 변수, 상수

  메소드 = 클래스 내의 함수

 

<프로퍼티>

1. 저장 프로퍼티 : 그냥 일반 저장되는 변수

2. 연산 프로퍼티 : 게터로 값 저장하도록 하고 세터(선택사항)으로 값을 받은 후 다른애 값을 수행해줌

ex

var a: Int {

    get{ return b-1 //이게 a 값이 됨}

    set(inputValue) { b=inputValue+1 } // 입력받은 값이 a가 되고 그 뒤 구문들이 실행됨(b 세팅)

    * set{ b=newValue+1 } //이렇게도 가능. 입력받는거 명시적으로 안써놓으면 받는 변수를 newValue라고써야댐

}

-> 클래스.a=3 이렇게 하면 저 set구문이 시행되는 거

 

*지연 저장 프로퍼티 -> 클로저 이용하여 값을 초기화 ! (엄청 오래걸리게)

lazy(이거 하면 얘는 프로퍼티가 최초로 접근될 때만 초기화 됨) var a: String= {  어쩌구 저쩌구 return "gdfsf"  }

 

 

<멤버>

인스턴스 프로퍼티

타입 프로퍼티 -> static을 붙임

인스턴스 메소드

타입 메서드 -> class 를 붙임

class func a (){} 이런식으로~

-> 타입 친구는 클래스 자체에 있는거임!! 객체 생성안해도 접근 가능하며 객체로 접근해도 항상 그거임 먼말인지 알지?

 

<인스턴스 선언>var a: class이름=class() 하면 인스턴스 생성한 것입니다

 

<객체(인스턴스) 생성시 프로퍼티 초기화, 소멸>1. 초기화

-클래스같은데에서 저장 프로퍼티(변수들)에는 무조건 초기값 설정해두어야함. =머시기 이렇게 꼭 설정해야댐!!!

-초기값(기본값)저장안하고싶으면 ?? -> 이니셜라이저 !!

init(받을 매개변수들) {

 저장 프로퍼티들 값 설정

}

-이니셜라이저 만들떄 여러개만들고, 한 이니셜라이저에서 자기 안에 있는 다른 이니셜라이저를 사용할 수도 잇음

-> 

convenience init(어쩌구){

    self.init(어쩌구)

    어쩌구

} 하면 됨!

convenience 붙여주기~.~

 

* 초기값이 꼭 필요없는 애/꼭 필요한 프로퍼티는 아닐 경우

->저장 프로퍼티(변수)를 옵셔널로 설정! -> 이니셜라이저에서 설정 안해도 됨

 

*인스턴스 사용에 꼭 필요하지만,, 초기값 할당안할때 사용!! (이니셜라이저에 전달어렵거나..등)

 -> 암시적 추출 옵셔널 사용 !! (느낌표 붙이는거)

(나중에 밖에서  클래스변수.해당 변수=머시기 이렇게 값할당할수잇도록)

 

-실패 가능한 이니셜라이저 (=조건잇는 이니셜라이저)

  - 실패하면 nil 반환 (return nil)

  -init? 이렇게 정의(옵셔널)

  - if 어쩌구 {~} if 어쩌구{~} 값 설정 

   이런식으로 조건주는 것

  -이친구를 받는 인스턴스 (변수)는 옵셔널로 꼭 설정해야함! (nil을 받을수도잇으니까)

 

-deinit = 클래스의 인스턴스가 메모리에서 해제되는 시점에 호출됨 !

(클래스에서만잇다)

 *매개변수전달불가)

deinit(){~}

클래스인스턴스(변수) = nil 

이렇게되면 deinit 불림 (메모리에서 해제되므로)\

 

<self>

apple이 우린 셀프 쓸 일이 마니없다고 그랬대요

쓰이는 경우 ex

프로퍼티나 매서드를 클로저 내에서 참조할 경우

클래스.메서드(클로저넘겨줌 근데 이클로저안에서 이 클래스의 매소드/프로퍼티를 쓰면 self.머시기 이렇게 부르는것)

 

 

<프로토콜>

=클래스가 충족해야하는 최소한의 요구사항들을 정의하는 규칙들 모임

-키워드는 protocol

-클래스가 이거 채택해놓고 요구사항 충족안함 -> 에러남~

 

ex

protocol a {

    var name: String { get } //name이라는 스트링값 프로퍼티를 꼭 포함시켜라

    func build() -> String // 이런 형식의 이 메서드를 꼭 포함시켜라

}

class A: a{

네임변수와 빌드 메서드가 꼭 정의되어야합니다

}

 

 

<불투명 반환 타입>

: 반환되는 타입을 구체적으로 안적는것. 의도적으로 숨기려고 이렇게하기도해용

지정된 프로토콜을 따르는 모든 데이터타입을 반환할 수 있도록 해용

-some 키워드를 사용해용

ex)

func ff(value: Int)-> some Equatable { ~ }

=> E어쩌구 프로토콜을 따르는 모든 데이터타입을 리턴할 수 있어용 ~~

 

 

'swift' 카테고리의 다른 글

함수  (0) 2021.05.12
제어흐름 -> 반복제어 흐름(반복문)/조건부 흐름 제어(if)  (0) 2021.05.12
기본 개념정리  (0) 2021.05.04