✔︎ 오늘의 정리
- 데이터 통신
- URLSession
- 환경설정
- 데이터를 기반으로 리소스 처리(task)
- 응답
- +) delegate 특성?
- ARC
데이터 통신
네트워크 통신 왜케 나 응용이 안 되지?? 오늘 브랜님께 여쭤밧던 거마다 엥? 싶은 것들 천지였다.
일단............ .뭔가 데이터 통신하면서 값을 요청하고 그 값을 받은 뒤 어떤 일을 하려고 할 때!! completionHandler를 쓴다는 걸 알고 잇는데 막상 할 때는 엥? 여기서두요? 돼서 ㅇㅂㅇ 댐...
생각해보면 이것두 데이터 통신인데 당연하겠지......
아는 개념인데두 응용이 안 되구 있드라.
데이터 통신을 통해 값을 받아온 이후에 해당 값을 이용해서 킹피셔 없이 그냥 값으로 이미지를 받아오구 싶었다. ~.~
func getPic(str: String) -> (UIImage?)) {
guard let url = URL(string: str) else { return nil }
var temp = Data()
DispatchQueue.global().sync {
do {
let data = try Data(contentsOf: url) // error!
temp = data
} catch {
print("error")
}
}
return UIImage(data: temp)
}
ㅋㅋ 아 어케 가지고 오지?!?!?!?!?!?! 하다가
걍 싱크를 썼는데 당근 에러가 났다.
그럴만하지......
메인에서 일하기 싫어서 다른 스레드로 넘겼는데 메인은 다른 일도 안 하구 그 일만 기다리는 꼴이 아닌가!!
계속 손해라고 보라색 오류를 띄우길래 이거어케하지? 하다가 이걸 ... 멘토님께 여쭤보구... 새삼 아 맞다 컴플리션 핸들러.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ 했다
왜케 응용이 안대까 ㅠ_ㅠ
이러면서도스스로답을알고잇다...............
이유는명확하지 모 그냥 네트워크 통신을 많이 안 해바서.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ
ㄱㅊ 나아는거가틈 다른공부할래 하고 넘겨서.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ
오늘은진짜네트워크통신한다 하고 안해서.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ.ᐟ
오늘 TMDB Movie / TV / Person segment Control 이용해서 모두 구현하고
PhotoGram앱 복습해서 주말 동안 다이어리 앱 한번 맹글어보자
또 다른 API 통신 하등가...
아무튼........................... 고친 코드는 아래와 같다.
func getPic(str: String, completionHandler: @escaping (UIImage?) -> ()) {
guard let url = URL(string: str) else { return }
DispatchQueue.global().async {
do {
let data = try Data(contentsOf: url)
let image = UIImage(data: data)
completionHandler(image)
} catch {
print("error")
}
}
}
요런 식으로 선언해 주면 추후 다른 코드에서...
getPic(str: fullImage) { image in
guard let image else { return }
self.delegate?.receiveData(Image: image)
}
클로저 안에 해당 데이터를 이용하여 어떻게 사용하려고 하는지를 넣어 주면 되는 것이다.

Access Control
코드에 대한 범주를 나눠주는 것을 말한다! 모듈과 타겟의 개념이 여기서 나오는데 모듈은 흔히 말하는 프로젝트 개념이라고 생각하면 된다. 그에 반해, 타겟은 하나의 프로젝트 파일 내에서 파일을 제어하는 것을 말한다!
접근 제어자의 종류는 open, public, interval, fileprivate, private가 있다.
이때, 모듈 개념으로 사용하는 것에는 open과 public, 타겟 개념으로 사용하는 것을 interval과 fileprivate, private가 있다.
open과 public의 차이는 오버라이딩이 가능하냐 아니냐의 차이로, open은 클래스에서 사용이 가능하며 오버라이드가 가능하다. 다만, public의 경우에는 오버라이딩이 불가능하다!
우리가 접근 제어자를 쓰지 않는다면 기본으로 사용되는 것이 interval이다. interval은 같은 모듈 내에서 자유롭게 사용될 수 있는 것을 말하며, fileprivate의 경우에는 용어에서도 알 수 있듯 같은 파일 내에서만 사용 가능하다. 다만, private의 경우에는 선언된 해당 블럭 내에서만 사용 가능하다.
우리는 각 상황에 맞게 접근 제어자를 사용해야 한다!
만약에 프레임워크나 라이브러리를 만드는 것이 아닌, 하나의 모듈에서만 사용하는 class인데 public을 사용했다면 부적절한 접근제어자를 사용한 것이다. 오버라이딩을 해야 하는 클래스를 선언할 때 public을 사용한다면 이 역시 부적절한 접근 제어자를 사용한 것이라고 볼 수 있다!
싱글톤 패턴을 만들려고 할 때, init을 private으로 선언하지 않고 fileprivate으로 선언했다면? 해당 파일 내에서는 해당 클래스의 인스턴스를 얼마든지 생성할 수 있으니 싱글톤 패턴이라고 볼 수 없을 것이다. 왜냐하면 싱글톤 패턴은 특정 클래스의 인스턴스가 오직 하나만 존재해야 하니까!
접근 제어자는 보통 내부 구조를 은닉화하거나 다른 프로젝트에서도 사용 가능하도록 라이브러리로 구현할 때 사용한다. 그러니까, 앞서 말했던 코드의 사용 범주를 나눠준다는 게 명확할 것이다 ㅋ.ㅋ
명확히 어떤 접근제어자가 언제 쓰이는지를 알고, 어떤 때에 사용하기 위해서 쓴다는 걸 기억하고 있으면 좋을 것 같다.
ARC
[Swift] ARC(Automatic Reference Counting) (2/2)
이전에 ARC를 정리했던 게 있는데 같이 첨부한당 ^_^ 마침 새싹 면접 보고 나서 넘 아쉬운 맘에 ARC 다시 정리했던 글인데 ㅋㅋㅋㅋㅋㅋ ㅠㅠ 최근에 정리하려고 2편을 작성했던 거 같은데 걍 창 지
dk308c.tistory.com
URLSession
원래는 TIL에 적다가 공식 문서도 대충 훑어보게 되고 강의 자료도 찾아보고 필기했던 것도 보게 대니까 양이 많아져서? 글을 따로 적었당.
글은 아래에!
[iOS] URLSession
URLSession URL로 표시된 엔드포인트에서 데이터를 업로드하거나 다운로드하는 등의 API를 제공해 주는 클래스를 말하며, 내부의 여러 설정을 통해 데이터를 어떻게 전송하고 어떻게 동작할지를 설
dk308c.tistory.com
'TIL' 카테고리의 다른 글
[SeSAC] September 7, 2023 (0) | 2023.09.07 |
---|---|
[SeSAC] September 4, 2023 (2) | 2023.09.07 |
[SeSAC] August 29, 2023 (2) | 2023.08.30 |
[SeSAC] August 28, 2023 (0) | 2023.08.29 |
[SeSAC] August 27, 2023 (1) | 2023.08.28 |