패스트캠퍼스) ios 개발 챌린지

[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 24회차 미션

student513 2020. 11. 25. 19:32

오늘은 구조체의 확장형, 다른말로 상속에 대해서 배웠다.

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

Math.abs(value: -20)


// 제곱, 반값
extension Math {
    static func sqaure(value: Int) -> Int {
        return value * value
    }
    
    static func half(value: Int) -> Int {
        return value/2
    }
}

Math.sqaure(value: 5)
Math.half(value: 20)

extension이라는 키워드를 func 대신 붙여서 사용할 수 있다.

그런데 처음부터 Math 구조체 안에 넣었으면 됐을텐데 왜 분리해야하는 것일까?

 

다음 코드를 보도록하자

var value: Int = 10
// 제곱, 반값

extension Int {
    func square() -> Int {
        return self * self
    }
    
    func half() -> Int {
        return self/2
    }
}

value.square()
value.half()

정수 타입인 Int를 보자.

Int에 메소드를 추가하고 싶을 때 다음과 같이 확장할 수 있다.

이미 Int는 스위프트의 기본 개발 언어이고 함부로 수정할 수 없다. 

남이 짜놓은 코드에 어떤 기능을 확장하고 싶을 때 사용할 수 있을 것이다.

클래스든 구조체든 모두 객체다
값을 제공하는 구조체는 스택에, 참조를 제공하는 클래스는 힙에 저장되어있다
스택은 금방금방 데이터를 가져와야 하므로 fast, 힙은 느리게 작동한다.
클래스가 작동하는 형태

그 다음에 배운 것은 구조체와 유사한 형태의 클래스

구조체와의 가장 큰 차이라고 한다면 구조체는 value를 할당해주고 클래스는 reference를 할당해준다는 것.

reference를 할당한다는 것은 C언의 포인터와 동일한 개념이다.

구조체는 틀만 내어줄 뿐이고, 클래스는 자신에게 직접 접근할 권한을 준다.

 

올인원 패키지 : iOS 앱 개발👉https://bit.ly/2FjWizq