import UIKit
//์ปฌ๋ ์
๋ทฐ์ ์
์ ํด๋น
class PosterCell: UICollectionViewCell {
static let id = "PosterCell"
//์
์ ์ด๋ฏธ์ง๋ฅผ ๋์์ค์ผํ๊ธฐ ๋๋ฌธ
let imageView: UIImageView = {
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
imageView.backgroundColor = .darkGray
imageView.layer.cornerRadius = 8
return imageView
}()
override init(frame: CGRect) {
super.init(frame: frame)
contentView.addSubview(imageView)
imageView.frame = contentView.bounds //imageView์ frame ํฌ๊ธฐ๋ฅผ contentView์ ๋๊ฐ์ด
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func configure(with movie: Movie){
guard let posterPath = movie.posterPath else {return}
let urlString = "https://image.tmdb.org/t/p/w500/\(posterPath).jpg"
guard let url = URL(string: urlString) else {return}
// ๋ฐฑ๊ทธ๋ผ์ด๋ ํ์์ ๋คํธ์ํฌ ์์ฒญ ์ํ -> ๋ฐฑ๊ทธ๋ผ์ด๋ ํ์์ URL์ ๋ฐ์ดํฐ(์ด๋ฏธ์ง)๋ฅผ ๋ค์ด๋ก๋
DispatchQueue.global().async { [weak self] in
if let data = try? Data(contentsOf: url){ // URL์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด
DispatchQueue.main.async { // ๋ฉ์ธ ํ์์ UI ์
๋ฐ์ดํธ ์ํ
if let image = UIImage(data: data) {
self?.imageView.image = image // ์ด๋ฏธ์ง ๋ทฐ์ ์ด๋ฏธ์ง ์ค์
}
}
}
}
}
}
DispatchQueue.global().async
DispatchQueue.global()์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์์ ์ ์ํํ ๋ ์ฌ์ฉํ๋ค.
๋คํธ์ํฌ ์์ฒญ: ๋คํธ์ํฌ์์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ๋ ์์ ์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋ค.
์ด ์์ ์ ๋ฉ์ธ ์ค๋ ๋์์ ์คํํ๋ฉด ์ฑ์ UI๊ฐ ๋ฉ์ถ๊ฑฐ๋ ๋๋ ค์ง ์ ์๋ค.
๋ฐ๋ผ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์คํํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํผํ ์ ์๋ค.
๋น๋๊ธฐ ์ฒ๋ฆฌ: async๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ด ๋น๋๊ธฐ๋ก ์คํ๋๋ฏ๋ก, ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ๊ณ์ ์คํ.
DispatchQueue.main.async
DispatchQueue.main์ ๋ฉ์ธ ์ค๋ ๋์์ ์์ ์ ์ํํ ๋ ์ฌ์ฉํ๋ค.
๋ฉ์ธ ์ค๋ ๋๋ UI ์ ๋ฐ์ดํธ์ ๊ด๋ จ๋ ์์ ์ ์ฒ๋ฆฌํ๋ ํ์ด๋ค.
UI ์ ๋ฐ์ดํธ: iOS์์๋ UI ๊ด๋ จ ์์ ์ ๋ฐ๋์ ๋ฉ์ธ ์ค๋ ๋์์ ์ํํด์ผํ๋ค.
๋ฐ๋ผ์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ ํ, imageView์ ์ด๋ฏธ์ง๋ฅผ ์ค์ ํ๋ ์์ ์ ๋ฉ์ธ ์ค๋ ๋์์ ์คํํด์ผ ํ๋ค.
์์ ์ฑ: ๋ฉ์ธ ์ค๋ ๋๊ฐ ์๋ ๋ค๋ฅธ ์ค๋ ๋์์ UI๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ์ถฉ๋์ด๋ ์๊ธฐ์น ์์ ๋์์ด ๋ฐ์ํ ์ ์๋ค.
๋ฉ์ธ ์ค๋ ๋์์ UI๋ฅผ ์์ ํ๊ฒ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด DispatchQueue.main.async๋ฅผ ์ฌ์ฉํ๋ค.