본문 바로가기

[IOS][SWIFT]

[IOS][SWIFT] 이직 준비하며 받았던 질문 및 공부내용 복기!

반응형

안녕하세요:)

이번 글은 제가 이번에 이직으로 인해 면접을 보면서 받았던 질문들과

과제를 하면서 느꼈던 부족한 점을 간단하게 정리해보려 합니다!

 

1. 익스텐션과 프로토콜의 차이점?

 

SWIFT 개발을 하다보면 익스텐션과 프로토콜을 많이 사용하는데

어떤 차이점과 실제 개발 시 두가지의 차이점을 알고 사용해본 경험이 있었는지에 대한 질문이였습니다. 😊

 

1) 익스텐션(Extensions) : 익스텐션을 이용하면 클래스, 구조체, 열거형 혹은 프로토콜 타입에 기능을 추가할 수 있습니다.

 

원본 코드를 몰라도 그 타입에 대한 기능을 확장할 수 있습니다. 저는 확장이라는 개념을 조금 강조해서 말했던거 같습니다.

 

익스텐션 문법으로는 익스텐션은 extension 키워드를 사용해 선업합니다.

 

extension ViewController : UITableViewDelegate, UITableViewDataSource{
	...
}

 

전 글에 썼던 것처럼 UITableView의 Delegate, DataSource부분을 확장해서 원본코드를 몰라도 기능을 추가할 수 있습니다.

 

2) 프로토콜(Protocols) : 프로토콜은 특정 기능 수행에  필수적인 요수를 청의한 청사진(BluePrint)입니다.

 

프로토콜은 정의를 하고 제시를 할 뿐 스스로 기능을 구현하지는 않습니다.

 

하나의 타입으로 사용되기 때문에 타입 사용이 허용되는 모든 곳에 프로토콜을 사용할 수 있습니다.

 

프로토콜 문법으로는 프로토콜의 정의는 클래스, 구조체, 열거형 등과 유사합니다.

 

protocol BlogProtocol {
	...
}

class BlogClass : BlogClass, BlogProtocol {
	...
}

 

서브 클래스에 적용할 경우 슈퍼클래스를 프로토콜 앞에 정의해줍니다!

 

정리하자면 프로토콜에서는 클래스 , 구조체 등과 같이 정의가 가능하고 익스텐션은 프로토콜과 같이 정의된 내용에 기능을

추가할 수 있는 기능으로 정리가 될 것 같습니다.

 

2. ARC(Auto Reference Counting)와 가장 큰 문제점?

 

사실 ARC는 내용이 엄청 길어질수 있을꺼 같아 간단하게 정리 후

나중에 추가적으로 다뤄볼 생각입니다.

 

ARC란  reference count를 통해 자동으로 메모리 관리를 해주는 것으로

객체에 대한 참조 카운트를 관리하고 0이 되면 자동으로 메모리를 해제해주는 것으로

2011WWDC에서 등장한 개념입니다.

(쉽게 생각해서 ARC는 더 이상 필요하지 않은 클래스 인스턴스를 자동으로 메모리에서 해제해주는것입니다!)

 

그럼 ARC의 가장 큰 문제점은 뭘까요?

- 순환 참조가 발생 시 영구적으로 메모리가 해제되지 않을 수 있습니다.

 

여기서 순환 참조란?

- 두 객체의 인스턴스의 프로퍼티가 서로 참조하고 있는 형태를 순환 참조라고 합니다.

 

그로 인해 발생될 수 있는 문제점으로는 strong으로 선언된 변수가 순환참조 됐을 때

RC(Reference Count)가 0이 되지 않아 메모리에서 해제가 되지 않아 발생하는 문제점이 생길 수 있습니다.

 

이 해결책으로 우리가 개발하면서 많이 볼 수 있는 weak와 unowned를 사용하게 되겠습니다!

 

이중에 weak(약한 참조)는 인스턴스를 참조할 때 RC를 증가시키지 않아 메모리에서 해제될때 자동으로

nil을 할당 시키면서 메모리가 해제하게 됩니다!

 

3. 옵셔널(Optional)이란?

 

ios 개발하면서 많이 볼 수 있는 옵셔널에 관한 질문을 받았는데

어떤 경우에 사용하는지 또 어떻게 사용하는지는 알고 있었지만, 개념을 쉽게 대답할 수 없었던 경험으로

정리해보기로 했습니다.

 

먼저 https://developer.apple.com/documentation/swift/optional/ 옵셔널 공식문서를 보시면 좋겠습니다.

 

Apple Developer Documentation

 

developer.apple.com

 

첫 줄부터 옵셔널은 래핑된 값 또는 갑 nil의 부재를 나타내는 형식이라고 합니다.

 

쉽게 말해서 변수의 값이 nil일 수 있다는것을 말하는대요.

반대로 옵셔널이 아니면 nil값이 들어갈 수 없는것으로 표현 할때는

 

var sampleNum : Int? = 10

var sampleStr : String? = "String"

 

이런식으로 변수를 지정해 주면서 nil값이 들어갈 수 있도록 ? 표시로 옵셔널 표시를 해줍니다.

 

옵셔널을 해제 해줄때는 if let을 사용하여 변수의 값이 nil이 아닌 경우 !를 사용해서 해제할 수 있습니다.

 

자! 이번 글은 이렇게 세개의 주제를 가지고 작성해봤는데요.

 

이직을 준비하면서 아직 많이 부족한 점도 깨닫고 앞으로의 공부방향도 세울 수 있어

좋은 경험이 많이 된 것 같습니다! 😍

 

또 생각나는 질문이 있으면 추가로 작성하도록 하겠습니다!

 

완벽하지 않은 수 있어 질문과 지적해주시면 감사하겠습니다.

 

그럼 다음글에서 뵙겠습니다! 🥰

반응형