* 객체 지향 프로그래밍의 핵심 목적 = 데이터 캡슐화 !
클래스에 저장된 데이터들은 오직 해당 클래스 내에 정의된 메서드만을 통해서 접근할 수 있다~.~
<구현>
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어쩌구 프로토콜을 따르는 모든 데이터타입을 리턴할 수 있어용 ~~
'draft > swift' 카테고리의 다른 글
함수 (0) | 2021.05.12 |
---|---|
제어흐름 -> 반복제어 흐름(반복문)/조건부 흐름 제어(if) (0) | 2021.05.12 |
기본 개념정리 (0) | 2021.05.04 |