iOS 7강 스위프트 Structure

린다·2021년 1월 24일
0

iOS beginner

목록 보기
6/14
post-thumbnail

Structure : 관계있는 데이터들을 묶어서 표현하는 방법

+) object = data + method
여기서 object를 표현하는 방법으로는 structure과 class가 있다.

✔️ 구조체와 클래스의 차이 : Structure vs Class

Structure: value type(copy)+ stack
Class: reference type(share)+ heap
변수를 생성한 후 할당할 때 structure는 복사하기 때문에 변경x, class는 변수의 값이 바뀌면 원본도 함께 변경됨. class는 복사본과 원본이 같은 객체를 가리키고 있다고 보면 됨.

✔️ Protocol

: 규약, 지켜야 할 약속
: 꼭 구현되어야할 method나 property, 변수를 생성할 때 직접 사용이 가능하며 기본 제공해주는 서비스 느낌

✔️ Data(property)

  • stored property
    : 값을 저장해서 변수로 들고 있는 경우
  • computed property
    : 값을 저장하지 않고 이미 저장된 값을 가공 및 제공할 때 사용한다.
    : 접근할 때 마다 새로 계산한다.
    : var만 사용 가능하다.
var fullName: String{
	get{
    		return "\(fullName)\(LastName)"
            }
        set {
        }
        
        -> set 사용해서 computed property에서도 setting 가능
  • 새로 할당된 값: newValue
  • type property: 생성된 instance와 상관없이 type 자체의 속성을 정하고 싶을 때(static을 앞에 붙여야함)
static elt isAlien: Bool = false
Person.isAlien -> 여기서 Person은 instance가 아니라 property 그 자체임
  • willset: newValue 알려줌
  • didset: 과거의 값, 현재의 값 알 수 있음(observing 목적)
  • lazy property: 해당 property가 접근될 대 그제서야 실행됨
    앞에 lazy를 붙여야함
lazy var isPopular: Bool = {
	if fullName == "Jay Park" {
    	return true
        } () {else
        	return false
       	}

-> 왜 사용하는지가 중요함
1. 최적화하기 위해서 사용
2. 모든 사용자에게 접근하는 것이 아니기 때문에 효율화 차원에서 사용

✔️ Property vs Method

: 결과가 똑같은 경우, 뭘 사용하는게 좋은지?
property는 값을 반환하고 method는 작업을 한다.
if method가 그냥 값 리턴하는 작업만 한다면?
1. Setter가 필요한 경우 -> computed property 사용
2. Setter가 필요없고 계산이나 DB access, File iO가 필요한 경우에는 method 사용
3. Setter가 필요없고 계산이나 DB access, File iO가 필요없는 경우에는 computed property 사용


✔️ Method vs Function

method는 instance안에 귀속돼서 사용할 수 있음, struct/class 안에서 동작

  • struct 관련 method에 대해서 관련 기능은 function으로 따로 뺄 필요 없음
    -> struct 안에 넣어도 작동 가능
  • struct 안의 요소를 변경시키는 method의 경우, 이름 앞에 mutating 넣어야함.
  • type property 처럼 type method도 존재함
static func 소속학원이름() -> String{
	return "패스트캠퍼스"
}
Lecture.소속학원이름()

✔️ extension 사용해서 method 확장하기

Struct Math{
	static func abs(value: Int) -> Int{
    	if value > 0 {
        	return value
        } else {
        	return - value
        }
     }
}

: Math 확장하겠다 -> extension 사용

extension Math{
	static func square(value: Int) -> Int{
    	return value * value
        }
        static func half(value: Int) -> Int{
        return value / 2 
        }
}
  • extension 사용하는 이유
    : 기존 struct에 모든 method를 다 넣으면 너무 길어지고 매번 기존 struct를 찾는 것도 힘들고 코드끼리 충돌한 위험성도 있음
    특히, Int처럼 이미 swift에서 정의된 struct의 경우, 내가 원하는대로 사용하려면 Extension 사용해야함

0개의 댓글

관련 채용 정보