-
Notifications
You must be signed in to change notification settings - Fork 4
โจ[Feat/fix]๐ ์์ ๋ฒํผ๋ง, ๋ ์ด์์ ๋ฒ๊ทธ ์์ ๋ฐ ์์ ๋ฏธ๋ฆฌ๋ฃ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ (ํ์ ๊ณผ์ ๊ตฌํ ์๋ฃ) #16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
coduhee
wants to merge
64
commits into
mastarTrack:main
Choose a base branch
from
coduhee:feature/develop-jh-hard
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
64 commits
Select commit
Hold shift + click to select a range
ad2aa38
ํ๋ก์ ํธ ํ์ผ ์์ฑ
coduhee 778568b
Package Dependencies ์ค์น
coduhee f7f6f46
โจfeat: Folder ๊ตฌ์กฐ ์ ๋ฆฌ
coduhee f818f5b
โจfeat: ์ฑ ์ ์ฒด์์ ๊ณตํต์ผ๋ก ์ธ ๋ชจ๋ธ ContentItem ์์ฑ
coduhee b981169
โจfeat: ํ ํ๋ฉด ์น์
๋ชจ๋ธ HomeSection ์์ฑ
coduhee 5d0fcae
โจFeat: ListCollectionViewCell ๊ตฌํ
coduhee 0e0d914
โจFeat: HomeCollectionViewCell ๊ตฌํ
coduhee a5a2a23
๐จ Art: Layout ์์
coduhee d3a5907
๐ฅFire: HomeCollectionViewCell -> CardCollectionViewCell ์ด๋ฆ ๋ณ๊ฒฝ
coduhee d751a7d
โจFeat: HomeSectionHeaderView ๊ตฌํ
coduhee f7a34d4
โจFeat: HomeViewController ๊ตฌํ
coduhee 0d0aea5
โจFeat: HomeReactor ๊ตฌํ
coduhee 0ce646b
โจFeat: SceneDelegate์ HomeViewController() ์ฐ๊ฒฐ
coduhee af6c6ba
โจFeat: FetchHomeContentUseCase ๊ตฌํ
coduhee 2088b40
โจFeat: APIEndpoint ๊ตฌํ
coduhee 14b8ef2
โจFeat: NetworkManager ๊ตฌํ
coduhee 5c8d2c6
โจFeat: ItunesResponseDTO ๊ตฌํ
coduhee 696d5f1
โจFeat: Extensions ๊ตฌํ
coduhee aaada90
โจFeat: SearchRepository ๊ตฌํ
coduhee 18cb5f8
โจFeat: SearchRepositoryType Protocol ๊ตฌํ
coduhee a593533
โจFeat: SPM(Kingfisher, ReactorKit) ์ถ๊ฐ
coduhee 5720b94
โป๏ธRefactor: fetchMusic ์ญ์ -> fetchContent๋ก ํตํฉ
coduhee 42318e1
โป๏ธRefactor: #Preview ์์ , identifier ๋ค์ด๋ฐ ์์
coduhee 5e44004
โจFeat: HomeSection์ RxDataSources ๊ตฌํ์ํด ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ
coduhee 958f151
โจFeat: RxDataSources๋ก ๋ก์ง ์
๋ฐ์ดํธ
coduhee 7da01e8
โป๏ธRefactor: viewDidLoad -> bind(reactor:)์์ Rx๋ก ๋ฌถ์ด๋๊ธฐ
coduhee 9457b5d
โจFeat: ์จ๋ฒ ์ฌ์ง ๊ณ ํ์ง๋ก ํฌ๊ธฐ ๋ณํ
coduhee 2e9b041
๐Fix: CollectionViewCell ๋ฒ๊ทธ ์์
coduhee b16ca5d
โป๏ธRefactor: ์ด๋ฏธ์ง ํฌ๊ธฐ ์กฐ์
coduhee 62e376f
โจFeat: RxDataSources ํจํค์ง ์ถ๊ฐ
coduhee ecb0b5d
โป๏ธRefactor: 30 -> 10 ๊ฐ์ฉ ์ถ์ถ
coduhee fc90910
โป๏ธRefactor: 300x300์ผ๋ก ์ด๋ฏธ์ง ํฌ๊ธฐ ์กฐ์
coduhee ed79153
โป๏ธRefactor: NetworkManager ์ฑ๊ธํค ํจํด์ผ๋ก ๋ณ๊ฒฝ
coduhee 9052723
โป๏ธRefactor: Error ํ์
์ ์
coduhee cd3a644
โจFeat: SearchUseCase ๊ตฌํ
coduhee d750ab9
โจFeat: Extension ์ฌ์ง์ ํ๊ท ์์ ์ถ์ถํ๋ ํจ์
coduhee fe8aab5
โป๏ธRefactor: UI ์กฐ์ , ํ๋ฆฌ๋ทฐ ์ญ์
coduhee c97b21c
๐Fix: movie -> musicVideo ๋ฐ์ดํฐ ๋ณ๊ฒฝ
coduhee 4fa90e3
โป๏ธRefactor: ํ๊ท ์์ ์ถ์ถ ํจ์ ์ญ์
coduhee 6f668af
โป๏ธRefactor: country, limit ๋ณ์ mediaType๋ณ๋ก ์ปค์คํ
ํ๊ฒ ์ค์
coduhee 281d108
โจFeat: M/V URL ์ถ์ถ ๊ธฐ๋ฅ ์ถ๊ฐ
coduhee 02f4d4c
โจFeat: ellipsis Button ๊ตฌํ
coduhee bdb008a
โป๏ธReactor: SceneDelegate ์์
coduhee bc647db
โจFeat: SearchViewController ๊ตฌํ
coduhee 0863cd7
โจFeat: SearchReactor ๊ตฌํ
coduhee 661632d
โจFeat: SearchCollectionViewCell ๊ตฌํ
coduhee 8a48093
โจFeat: SearchCellReactor ๊ตฌํ
coduhee ece79b4
โป๏ธReactor: HomeVC ๋ฆฌํฉํ ๋ง
coduhee 238539a
โจFeat: ๊ฐ ๋น๊ต๋ฅผ ์ํด Equatable ํ๋กํ ์ฝ ์ถ๊ฐ
coduhee 0900571
โป๏ธReactor: errorMessage @Pulse ์ถ๊ฐ
coduhee f67038b
๐Fix: playerLayer ์ ์ธ ๋ฒ๊ทธ ์์
coduhee 81aeeb8
๐ฆ ํ์ผ์ด๋
coduhee 0812811
๐Bug: imageContainerView ์ญ์
coduhee 7a02ddd
โจFeat: AudioManager Singleton ํจํด ๊ตฌํ
coduhee b0e088f
โจFeat: PlayableUICell ํ๋กํ ์ฝ ๊ตฌํ
coduhee 57ef84e
โจFeat: Audio ์ฌ์ UI ๊ตฌํ
coduhee b0e16df
โจFeat: ์์ ์ฌ์ ReactoKit ํจํด ๊ตฌํ
coduhee 5ce0268
โจFeat: VC ์์์ฌ์ bind ํจ์ ๋ด๋ถ ๊ตฌํ
coduhee 2945952
โป๏ธRefactor: searchController ์์กด์ฑ ์ฃผ์
coduhee d233d57
โป๏ธRefactor: ๋ค์ฌ์ฐ๊ธฐ ์์
coduhee 17a05cf
โป๏ธRefactor: url์ด ์ ํจํ ๋๋ง ์ฌ์ ์ด๋ฏธ์ง ์ ์ฉ
coduhee 3cfe5ec
๐Fix: ๋ฉ๋ชจ๋ฆฌ ๋์ ๋๋ฒ๊น
coduhee 6d8f2cf
โป๏ธRefactor: AVPlayer->VC ๋จ์ผ ๊ฐ์ฒด๋ก
coduhee 7f464f0
โป๏ธRefactor: prepareReuse์ ์ฌ์ UI ์ด๊ธฐํ ์ถ๊ฐ
coduhee File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
7 changes: 7 additions & 0 deletions
7
Challenge/Challenge.xcodeproj/project.xcworkspace/contents.xcworkspacedata
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
78 changes: 78 additions & 0 deletions
78
Challenge/Challenge.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> | ||
| <dependencies> | ||
| <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/> | ||
| <capability name="Safe area layout guides" minToolsVersion="9.0"/> | ||
| <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
| </dependencies> | ||
| <scenes> | ||
| <!--View Controller--> | ||
| <scene sceneID="EHf-IW-A2E"> | ||
| <objects> | ||
| <viewController id="01J-lp-oVM" sceneMemberID="viewController"> | ||
| <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> | ||
| <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | ||
| <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||
| <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> | ||
| <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> | ||
| </view> | ||
| </viewController> | ||
| <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> | ||
| </objects> | ||
| <point key="canvasLocation" x="53" y="375"/> | ||
| </scene> | ||
| </scenes> | ||
| </document> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| // | ||
| // UIImageView+Extension.swift | ||
| // Challenge | ||
| // | ||
| // Created by ๊น์ฃผํฌ on 3/15/26. | ||
| // | ||
|
|
||
| import UIKit | ||
| import Kingfisher | ||
|
|
||
|
|
||
| // MARK: - loadImage | ||
| extension UIImageView { | ||
|
|
||
| func loadImage(from urlString: String) { | ||
| guard let url = URL(string: urlString) else { | ||
| self.image = nil | ||
| return | ||
| } | ||
|
|
||
| self.kf.setImage( | ||
| with: url, | ||
| placeholder: nil, | ||
| options: [ | ||
| .transition(.fade(0.2)), // ๋ถ๋๋ฝ๊ฒ ์ด๋ฏธ์ง ํ์ด๋ ์ธ | ||
| .cacheOriginalImage // ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์บ์์ ์ ์ฅ | ||
| ] | ||
| ) | ||
| } | ||
| } | ||
|
|
||
|
|
||
| // MARK: - Alert | ||
| extension UIViewController { | ||
|
|
||
| func showErrorAlert(message: String) { | ||
| let alert = UIAlertController( | ||
| title: "์๋ฌ", | ||
| message: message, | ||
| preferredStyle: .alert | ||
| ) | ||
|
|
||
| let okAction = UIAlertAction(title: "ํ์ธ", style: .default) | ||
| alert.addAction(okAction) | ||
|
|
||
| present(alert, animated: true) | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| // | ||
| // AudioManager.swift | ||
| // Challenge | ||
| // | ||
| // Created by ๊น์ฃผํฌ on 3/18/26. | ||
| // | ||
|
|
||
| import AVFoundation | ||
|
|
||
| final class AudioManager { | ||
|
|
||
| static let shared = AudioManager() | ||
|
|
||
| private init() {} | ||
|
|
||
| private var player: AVPlayer? | ||
|
|
||
| func play(url: URL) { | ||
| player?.pause() // ์ผ๋จ ์ฌ์๋๋ ๋ ธ๋๋ ๊บผ์ผ ์๊ฒน์นจ | ||
|
|
||
| player = AVPlayer(url: url) | ||
| player?.play() | ||
| } | ||
|
|
||
| func play() { | ||
| player?.play() | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| // | ||
| // Untitled.swift | ||
| // Challenge | ||
| // | ||
| // Created by ๊น์ฃผํฌ on 3/18/26. | ||
| // | ||
|
|
||
| protocol PlayableUICell { | ||
| func updatePlayUI(isPlaying: Bool) | ||
| } |
11 changes: 11 additions & 0 deletions
11
Challenge/Challenge/Resources/Assets.xcassets/AccentColor.colorset/Contents.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| { | ||
| "colors" : [ | ||
| { | ||
| "idiom" : "universal" | ||
| } | ||
| ], | ||
| "info" : { | ||
| "author" : "xcode", | ||
| "version" : 1 | ||
| } | ||
| } |
35 changes: 35 additions & 0 deletions
35
Challenge/Challenge/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| { | ||
| "images" : [ | ||
| { | ||
| "idiom" : "universal", | ||
| "platform" : "ios", | ||
| "size" : "1024x1024" | ||
| }, | ||
| { | ||
| "appearances" : [ | ||
| { | ||
| "appearance" : "luminosity", | ||
| "value" : "dark" | ||
| } | ||
| ], | ||
| "idiom" : "universal", | ||
| "platform" : "ios", | ||
| "size" : "1024x1024" | ||
| }, | ||
| { | ||
| "appearances" : [ | ||
| { | ||
| "appearance" : "luminosity", | ||
| "value" : "tinted" | ||
| } | ||
| ], | ||
| "idiom" : "universal", | ||
| "platform" : "ios", | ||
| "size" : "1024x1024" | ||
| } | ||
| ], | ||
| "info" : { | ||
| "author" : "xcode", | ||
| "version" : 1 | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| { | ||
| "info" : { | ||
| "author" : "xcode", | ||
| "version" : 1 | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>UIApplicationSceneManifest</key> | ||
| <dict> | ||
| <key>UIApplicationSupportsMultipleScenes</key> | ||
| <false/> | ||
| <key>UISceneConfigurations</key> | ||
| <dict> | ||
| <key>UIWindowSceneSessionRoleApplication</key> | ||
| <array> | ||
| <dict> | ||
| <key>UISceneConfigurationName</key> | ||
| <string>Default Configuration</string> | ||
| <key>UISceneDelegateClassName</key> | ||
| <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string> | ||
| </dict> | ||
| </array> | ||
| </dict> | ||
| </dict> | ||
| </dict> | ||
| </plist> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| // | ||
| // AppDelegate.swift | ||
| // Challenge | ||
| // | ||
| // Created by ๊น์ฃผํฌ on 3/11/26. | ||
| // | ||
|
|
||
| import UIKit | ||
|
|
||
| @main | ||
| class AppDelegate: UIResponder, UIApplicationDelegate { | ||
|
|
||
|
|
||
|
|
||
| func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { | ||
| // Override point for customization after application launch. | ||
| return true | ||
| } | ||
|
|
||
| // MARK: UISceneSession Lifecycle | ||
|
|
||
| func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { | ||
| // Called when a new scene session is being created. | ||
| // Use this method to select a configuration to create the new scene with. | ||
| return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) | ||
| } | ||
|
|
||
| func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { | ||
| // Called when the user discards a scene session. | ||
| // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. | ||
| // Use this method to release any resources that were specific to the discarded scenes, as they will not return. | ||
| } | ||
|
|
||
|
|
||
| } | ||
|
|
79 changes: 79 additions & 0 deletions
79
Challenge/Challenge/Sources/Application/SceneDelegate.swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| // | ||
| // SceneDelegate.swift | ||
| // Challenge | ||
| // | ||
| // Created by ๊น์ฃผํฌ on 3/11/26. | ||
| // | ||
|
|
||
| import UIKit | ||
| import ReactorKit | ||
|
|
||
| class SceneDelegate: UIResponder, UIWindowSceneDelegate { | ||
|
|
||
| var window: UIWindow? | ||
|
|
||
|
|
||
| func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { | ||
|
|
||
| guard let windowScene = (scene as? UIWindowScene) else { return } | ||
|
|
||
| // ์์กด์ฑ ์์ฑ | ||
| let repository = SearchRepository() | ||
| let fetchHomeContentsuseCase = FetchHomeContentUseCase(repository: repository) | ||
| let homereactor = HomeReactor(fetchHomeContentsUseCase: fetchHomeContentsuseCase) | ||
|
|
||
| let searchUseCase = SearchUseCase(repository: repository) | ||
| let searchReactor = SearchReactor(searchUseCase: searchUseCase) | ||
|
|
||
| let searchVC = SearchViewController() | ||
| searchVC.reactor = searchReactor | ||
|
|
||
| let searchController = UISearchController(searchResultsController: searchVC) | ||
| searchController.searchBar.placeholder = "M/V, music, podcast ๊ฒ์" | ||
| searchController.obscuresBackgroundDuringPresentation = false | ||
| searchController.searchBar.autocorrectionType = .no // ์๋์์ฑ ๊ธฐ๋ฅ off | ||
| searchController.searchBar.returnKeyType = .search | ||
|
|
||
|
|
||
| // ์์กด์ฑ ์ฃผ์ | ||
| let homeVC = HomeViewController(reactor: homereactor, searchController: searchController) | ||
|
|
||
| let navigationController = UINavigationController(rootViewController: homeVC) | ||
|
|
||
| let window = UIWindow(windowScene: windowScene) | ||
| window.rootViewController = navigationController | ||
| window.makeKeyAndVisible() | ||
| self.window = window | ||
| } | ||
|
|
||
| func sceneDidDisconnect(_ scene: UIScene) { | ||
| // Called as the scene is being released by the system. | ||
| // This occurs shortly after the scene enters the background, or when its session is discarded. | ||
| // Release any resources associated with this scene that can be re-created the next time the scene connects. | ||
| // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). | ||
| } | ||
|
|
||
| func sceneDidBecomeActive(_ scene: UIScene) { | ||
| // Called when the scene has moved from an inactive state to an active state. | ||
| // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. | ||
| } | ||
|
|
||
| func sceneWillResignActive(_ scene: UIScene) { | ||
| // Called when the scene will move from an active state to an inactive state. | ||
| // This may occur due to temporary interruptions (ex. an incoming phone call). | ||
| } | ||
|
|
||
| func sceneWillEnterForeground(_ scene: UIScene) { | ||
| // Called as the scene transitions from the background to the foreground. | ||
| // Use this method to undo the changes made on entering the background. | ||
| } | ||
|
|
||
| func sceneDidEnterBackground(_ scene: UIScene) { | ||
| // Called as the scene transitions from the foreground to the background. | ||
| // Use this method to save data, release shared resources, and store enough scene-specific state information | ||
| // to restore the scene back to its current state. | ||
| } | ||
|
|
||
|
|
||
| } | ||
|
|
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AudioManager๊ฐ ์ฑ๊ธํค์ผ๋ก ๊ตฌํ๋์ด ์์ด ์ฑ์ ๋ค๋ฅธ ๋ถ๋ถ๊ณผ ๊ฐํ๊ฒ ๊ฒฐํฉ๋ฉ๋๋ค. ์ด๋ ์ ๋ ํ ์คํธ๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ , ์ค๋์ค ์ฌ์ ๋ก์ง์ ๋ค๋ฅธ ๊ตฌํ์ผ๋ก ๊ต์ฒดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ์๋ฅผ ๋ค์ด,HomeViewController๋SearchViewController๋ฅผ ํ ์คํธํ ๋ ์ค์ AVPlayer์ ์์กดํ๊ฒ ๋์ด ํ ์คํธ๊ฐ ๋ณต์กํด์ง๊ณ ๋๋ ค์ง ์ ์์ต๋๋ค. ์์กด์ฑ ์ฃผ์ (Dependency Injection)์ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.AudioManagerTypeํ๋กํ ์ฝ์ ์ ์ํฉ๋๋ค.AudioManager๊ฐ ์ด ํ๋กํ ์ฝ์ ์ค์ํ๋๋ก ํฉ๋๋ค.SceneDelegate์์AudioManager์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ํ์๋ก ํ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์์ฑ์๋ฅผ ํตํด ์ฃผ์ ํฉ๋๋ค.์ด๋ ๊ฒ ํ๋ฉด ํ ์คํธ ์์๋ ์ค์
AudioManager๋์ ์ค๋์ค ์ฌ์ ๋์์ ํ๋ด ๋ด๋ ๊ฐ์ง ๊ฐ์ฒด(mock object)๋ฅผ ์ฃผ์ ํ์ฌ, ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ก์ง์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ ์ ์์ต๋๋ค.References
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ผ๋ถ๋ฌ ์ฑ๊ธํค์ผ๋ก ํ๊ฑฐ์