์๋ ํ์ธ์. ์ค๋์ ์ฝ๋ ๊ตฌ์กฐํ์ ์บก์ํ์ ํ์ํ '์ ๊ทผ ์ ์ด(Access Control)'์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ ๊ทผ ์ ์ด๋ฅผ ํตํด ์ฝ๋์ ์ด๋ค ๋ถ๋ถ์ ์ธ๋ถ์ ๋ ธ์ถํ๊ณ , ์ด๋ค ๋ถ๋ถ์ ์จ๊ธธ์ง ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๐ ์ ๊ทผ ์ ์ด๋?
์ ๊ทผ ์ ์ด(Access Control)๋ ๋ค๋ฅธ ์์ค ํ์ผ์ด๋ ๋ชจ๋์์ ์ฝ๋์ ์ ๊ทผํ๋ ๊ฒ์ ์ ํํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์จ๊ธฐ๊ณ , ์ฝ๋๊ฐ ์ฌ์ฉ๋ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ช ํํ๊ฒ ์ ์ํ ์ ์์ต๋๋ค.
์ ๊ทผ ์ ์ด์ ์ฃผ์ ๋ชฉ์ :
- ์ฝ๋์ ๊ตฌํ ์ธ๋ถ ์ฌํญ ์จ๊ธฐ๊ธฐ
- ์ฝ๋ ์ฌ์ฉ์ ์ํ ๋ช ํํ ์ธํฐํ์ด์ค ์ ์
- ์ค์๋ก ์ธํ ์๋ชป๋ ์ฝ๋ ์ฌ์ฉ ๋ฐฉ์ง
- ๋ด๋ถ ๊ตฌํ ๋ณ๊ฒฝ ์ ์ธ๋ถ ์ฝ๋์ ๋ฏธ์น๋ ์ํฅ ์ต์ํ
๐ ๋ชจ๋, ์์ค ํ์ผ, ํจํค์ง์ ์ดํด
Swift์ ์ ๊ทผ ์ ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๋จผ์ ๋ค์ ๊ฐ๋ ์ ์์์ผ ํฉ๋๋ค:
- ๋ชจ๋(Module): ์ฝ๋ ๋ฐฐํฌ์ ๋จ์ผ ๋จ์๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ํ๋ ์์ํฌ๊ฐ ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค. Swift์์ import ํค์๋๋ก ๋ค๋ฅธ ๋ชจ๋์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- ์์ค ํ์ผ(Source File): ๋ชจ๋ ๋ด์ ๋จ์ผ Swift ์์ค ์ฝ๋ ํ์ผ์ ๋๋ค.
- ํจํค์ง(Package): ํ๋์ ๋จ์๋ก ๊ฐ๋ฐ๋๋ ๋ชจ๋ ๊ทธ๋ฃน์ ๋๋ค. Swift Package Manager๋ Xcode ์ค์ ์์ ์ ์๋ฉ๋๋ค.
๐ Swift์ 5๊ฐ์ง ์ ๊ทผ ์์ค
Swift๋ ์ฝ๋์ ์ ๊ทผ์ฑ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์๋ 5๊ฐ์ง ์ ๊ทผ ์์ค์ ์ ๊ณตํฉ๋๋ค:
1. Open ์ ๊ทผ ์์ค
- ๊ฐ์ฅ ๊ฐ๋ฐฉ์ ์ธ ์ ๊ทผ ์์ค
- ๋ค๋ฅธ ๋ชจ๋์์ ์ ๊ทผ๊ณผ ์๋ธํด๋์ฑ ๊ฐ๋ฅ
- ๋ค๋ฅธ ๋ชจ๋์์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ ๊ฐ๋ฅ
- ํด๋์ค์ ํด๋์ค ๋ฉค๋ฒ์๋ง ์ ์ฉ ๊ฐ๋ฅ
- ์ฌ์ฉ ์: ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ ํด๋์ค๋ก ํ์ฅ์ ๊ณ ๋ คํ ์ค๊ณ
open class OpenClass {
open func openMethod() {}
}
2. Public ์ ๊ทผ ์์ค
- ๋ค๋ฅธ ๋ชจ๋์์ ์ ๊ทผ ๊ฐ๋ฅ
- ๋ค๋ฅธ ๋ชจ๋์์ ์๋ธํด๋์ฑ์ด๋ ์ค๋ฒ๋ผ์ด๋ ๋ถ๊ฐ
- ์ฌ์ฉ ์: ํ๋ ์์ํฌ์ ๊ณต๊ฐ API
public class PublicClass {
public var publicProperty = 0
}
3. Internal ์ ๊ทผ ์์ค
- ๊ธฐ๋ณธ ์ ๊ทผ ์์ค
- ๋ชจ๋ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
- ์ฌ์ฉ ์: ์ฑ์ด๋ ํ๋ ์์ํฌ์ ๋ด๋ถ ๊ตฌ์กฐ
internal class InternalClass { // 'internal'์ ์๋ต ๊ฐ๋ฅ
var internalProperty = 0
}
4. File-private ์ ๊ทผ ์์ค
- ์ ์๋ ์์ค ํ์ผ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
- ์ฌ์ฉ ์: ํ์ผ ๋ด ์ฌ๋ฌ ํ์ ์์ ๊ณต์ ํ์ง๋ง ์ธ๋ถ์ ๋ ธ์ถํ์ง ์์ ๊ธฐ๋ฅ
fileprivate class FilePrivateClass {
fileprivate func filePrivateMethod() {}
}
5. Private ์ ๊ทผ ์์ค
- ๊ฐ์ฅ ์ ํ์ ์ธ ์ ๊ทผ ์์ค
- ์ ์๋ ์ ์ธ๊ณผ ๊ทธ ์ ์ธ์ ํ์ฅ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
- ์ฌ์ฉ ์: ํน์ ํ์ ๋ด์์๋ง ์ฌ์ฉ๋๋ ์์ธ ๊ตฌํ
private class PrivateClass {
private func privateMethod() {}
}
์ ๊ทผ ์์ค ๊ณ์ธต: Open(์ต์ ์ ํ) > Public > Internal > File-private > Private(์ต๋ ์ ํ)
๐ ์ ๊ทผ ์ ์ด์ ๊ธฐ๋ณธ ์์น
Swift์ ์ ๊ทผ ์ ์ด๋ ์ค์ํ ๊ธฐ๋ณธ ์์น์ ๋ฐ๋ฆ ๋๋ค:
์ํฐํฐ๋ ๋ ๋ฎ์(๋ ์ ํ์ ์ธ) ์ ๊ทผ ์์ค์ ๊ฐ์ง ๋ค๋ฅธ ์ํฐํฐ๋ก ์ ์๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด:
- Public ๋ณ์๋ Internal, File-private, Private ํ์ ์ผ๋ก ์ ์๋ ์ ์์ต๋๋ค.
- ํจ์๋ ํ๋ผ๋ฏธํฐ ํ์ ์ด๋ ๋ฐํ ํ์ ๋ณด๋ค ๋ ๋์ ์ ๊ทผ ์์ค์ ๊ฐ์ง ์ ์์ต๋๋ค.
์ด ์์น์ ํญ์ ๋ ์ ํ์ ์ธ ์ชฝ์ผ๋ก ์ ๊ทผ ์์ค์ด ๊ฒฐ์ ๋จ์ ์๋ฏธํฉ๋๋ค.
๐ ๊ธฐ๋ณธ ์ ๊ทผ ์์ค
Swift์์ ๋ช ์์ ์ผ๋ก ์ ๊ทผ ์์ค์ ์ง์ ํ์ง ์์ผ๋ฉด, ๋๋ถ๋ถ์ ์ํฐํฐ๋ internal ์ ๊ทผ ์์ค์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ฐ์ต๋๋ค.
์ด๋ ๋จ์ผ ๋ชจ๋ ์ฑ ๊ฐ๋ฐ์ ํธ๋ฆฌํ์ง๋ง, ํ๋ ์์ํฌ ๊ฐ๋ฐ ์์๋ ๊ณต๊ฐํ API๋ฅผ ๋ช ์์ ์ผ๋ก public ๋๋ open์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
๐ ์ฌ์ฉ์ ์ ์ ํ์ ์ ์ ๊ทผ ์ ์ด
ํ์ ๊ณผ ๋ฉค๋ฒ์ ๊ด๊ณ
ํ์ ์ ์ ๊ทผ ์์ค์ ํด๋น ํ์ ์ ๋ฉค๋ฒ(ํ๋กํผํฐ, ๋ฉ์๋, ์ด๊ธฐํ ๊ตฌ๋ฌธ, ์๋ธ์คํฌ๋ฆฝํธ)์ ๊ธฐ๋ณธ ์ ๊ทผ ์์ค์ ์ํฅ์ ์ค๋๋ค:
public class SomePublicClass {
public var publicProperty = 0 // ๋ช
์์ public
var internalProperty = 0 // ์์์ internal
fileprivate func filePrivateMethod() {} // ๋ช
์์ file-private
private func privateMethod() {} // ๋ช
์์ private
}
์ค์: Public ํ์ ์ ๋ฉค๋ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก public์ด ์๋ internal์ ๋๋ค. ํ์ ๋ฉค๋ฒ๋ฅผ ๊ณต๊ฐํ๋ ค๋ฉด ๋ช ์์ ์ผ๋ก public์ผ๋ก ํ์ํด์ผ ํฉ๋๋ค.
ํํ ํ์
ํํ์ ์ ๊ทผ ์์ค์ ํํ์ ํฌํจ๋ ๋ชจ๋ ํ์ ์ค ๊ฐ์ฅ ์ ํ์ ์ธ ์ ๊ทผ ์์ค์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค:
// (Internal, Private) ํํ์ ์ ๊ทผ ์์ค์ Private
internal class InternalClass {}
private class PrivateClass {}
// ์ด ํจ์๋ ๋ฐํ ํ์
์ด Private์ด๋ฏ๋ก
// Private์ผ๋ก ์ ์ธํด์ผ ํฉ๋๋ค
private func someFunction() -> (InternalClass, PrivateClass) {
// ํจ์ ๊ตฌํ
}
ํจ์ ํ์
ํจ์์ ์ ๊ทผ ์์ค์ ํ๋ผ๋ฏธํฐ ํ์ ๊ณผ ๋ฐํ ํ์ ์ค ๊ฐ์ฅ ์ ํ์ ์ธ ์ ๊ทผ ์์ค์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค:
// ์ด ํจ์๋ ํ๋ผ๋ฏธํฐ๊ฐ private์ด๋ฏ๋ก
// private ์ด์์ ์ ๊ทผ ์์ค์ด ๋ ์ ์์ต๋๋ค
private func processSomeData(data: PrivateClass) -> InternalClass {
// ํจ์ ๊ตฌํ
}
๐ ํน์ํ ๊ฒฝ์ฐ์ ์ ๊ทผ ์ ์ด
์ด๊ฑฐํ๊ณผ ์ผ์ด์ค
์ด๊ฑฐํ์ ๊ฐ ์ผ์ด์ค๋ ์๋์ผ๋ก ์ด๊ฑฐํ ์์ฒด์ ๋์ผํ ์ ๊ทผ ์์ค์ ๊ฐ์ต๋๋ค:
public enum CompassPoint {
case north // ์๋์ผ๋ก public
case south // ์๋์ผ๋ก public
case east // ์๋์ผ๋ก public
case west // ์๋์ผ๋ก public
}
Getter์ Setter
ํ๋กํผํฐ๋ ์๋ธ์คํฌ๋ฆฝํธ์ ์ ๊ทผ ์์ค์ ๋ ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ธฐ ์ํด getter์ setter์ ๋ค๋ฅธ ์ ๊ทผ ์์ค์ ๋ถ์ฌํ ์ ์์ต๋๋ค:
struct TrackedString {
private(set) var numberOfEdits = 0 // getter๋ internal, setter๋ private
var value: String = "" {
didSet {
numberOfEdits += 1
}
}
}
var stringToEdit = TrackedString()
stringToEdit.value = "This string will be tracked."
print(stringToEdit.numberOfEdits) // ์ฝ๊ธฐ ๊ฐ๋ฅ
// stringToEdit.numberOfEdits = 0 // ์ปดํ์ผ ์ค๋ฅ: setter๋ private
์ด ๊ธฐ๋ฅ์ ํ๋กํผํฐ ๊ฐ์ ์ฝ์ ์ ์๊ฒ ํ๋, ์์ ์ ์ ํํ๊ณ ์ถ์ ๋ ์ ์ฉํฉ๋๋ค.
๐ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ์ ๊ทผ ์ ์ด
์ด๊ธฐํ ๊ตฌ๋ฌธ์ ์ด๊ธฐํํ๋ ํ์ ๊ณผ ๊ฐ๊ฑฐ๋ ๋ ๋ฎ์ ์ ๊ทผ ์์ค์ ๊ฐ์ง ์ ์์ต๋๋ค:
public class PublicClass {
private let privateProperty: Int
// ํ์
์ public์ด์ง๋ง ์ด๊ธฐํ ๊ตฌ๋ฌธ์ internal
init(value: Int) {
privateProperty = value
}
// ํ์
๊ณผ ๋์ผํ public ์ ๊ทผ ์์ค์ ์ด๊ธฐํ ๊ตฌ๋ฌธ
public init(publicValue: Int) {
privateProperty = publicValue
}
// private ์ ๊ทผ ์์ค์ ์ด๊ธฐํ ๊ตฌ๋ฌธ
private init() {
privateProperty = 0
}
}
๊ธฐ๋ณธ ์ด๊ธฐํ ๊ตฌ๋ฌธ
ํ์ ์ด public์ด๊ณ ๋ชจ๋ ํ๋กํผํฐ์ ๊ธฐ๋ณธ๊ฐ์ด ์์ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ internal๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ด๋ฅผ public์ผ๋ก ๋ง๋ค๋ ค๋ฉด ๋ช ์์ ์ผ๋ก ์ ์ธํด์ผ ํฉ๋๋ค:
public struct PublicStruct {
public var someValue = 0
// ๋ช
์์ ์ผ๋ก public ์ด๊ธฐํ ๊ตฌ๋ฌธ ์ ์ธ
public init() {}
}
๐ ํ๋กํ ์ฝ์ ์ ๊ทผ ์ ์ด
ํ๋กํ ์ฝ๊ณผ ์๊ตฌ์ฌํญ
ํ๋กํ ์ฝ์ ์ ๊ทผ ์์ค์ ํ๋กํ ์ฝ ๋ด ๋ชจ๋ ์๊ตฌ์ฌํญ์ ์ ๊ทผ ์์ค์ ๊ฒฐ์ ํฉ๋๋ค:
public protocol PublicProtocol {
// ๋ชจ๋ ์๊ตฌ์ฌํญ์ ์๋์ผ๋ก public
func publicRequiredMethod()
var publicRequiredProperty: Int { get set }
}
์ค์: Public ํ๋กํ ์ฝ์ ์๊ตฌ์ฌํญ์ ๊ตฌํ ์ public ์ ๊ทผ ์์ค์ด์ด์ผ ํฉ๋๋ค.
ํ๋กํ ์ฝ ์ค์์ฑ
ํ์ ์ด ํ๋กํ ์ฝ์ ์ค์ํ ๋, ํ๋กํ ์ฝ ์ค์์ฑ์ ์ ๊ทผ ์์ค์ ํ์ ๊ณผ ํ๋กํ ์ฝ ์ค ๋ ์ ํ์ ์ธ ์ ๊ทผ ์์ค์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค:
public class PublicClass: InternalProtocol {
// ํ๋กํ ์ฝ ์ค์์ฑ์ internal
// ์๊ตฌ์ฌํญ ๊ตฌํ์ ์ต์ internal์ด์ด์ผ ํจ
}
๐ ํ์ฅ(Extension)์ ์ ๊ทผ ์ ์ด
ํ์ฅ์ ์ฌ์ฉํ ๋, ์ ๋ฉค๋ฒ๋ ํ์ฅ๋๋ ํ์ ์ ๊ธฐ๋ณธ ์ ๊ทผ ์์ค์ ์์๋ฐ์ต๋๋ค:
public class PublicClass {
// ๋ฉค๋ฒ๋ internal ๊ธฐ๋ณธ๊ฐ
}
extension PublicClass {
// ์ถ๊ฐ๋ ๋ฉค๋ฒ๋ internal ๊ธฐ๋ณธ๊ฐ
func newMethod() {}
}
ํ์ฅ์ ๋ช ์์ ์ผ๋ก ์ ๊ทผ ์์ค์ ์ง์ ํ ์๋ ์์ต๋๋ค:
extension PublicClass {
// ์ด ํ์ฅ์ ๋ชจ๋ ๋ฉค๋ฒ๋ private
private func privateMethod() {}
}
๊ฐ์ ํ์ผ ๋ด Private ๋ฉค๋ฒ ์ ๊ทผ
๊ฐ์ ํ์ผ ๋ด์์๋ ํ์ฅ๊ณผ ์๋ ์ ์ธ ์ฌ์ด์ private ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์์ต๋๋ค:
struct SomeStruct {
private var privateVariable = 12
}
// ๊ฐ์ ํ์ผ์ ํ์ฅ์์ private ๋ฉค๋ฒ ์ ๊ทผ ๊ฐ๋ฅ
extension SomeStruct {
func doSomething() {
print(privateVariable) // ์ ๊ทผ ๊ฐ๋ฅ
}
}
๐ ์ ๋ค๋ฆญ๊ณผ ํ์ ๋ณ์นญ์ ์ ๊ทผ ์ ์ด
์ ๋ค๋ฆญ ํ์
์ ๋ค๋ฆญ ํ์ ์ด๋ ํจ์์ ์ ๊ทผ ์์ค์ ํ์ ์์ฒด์ ํ์ ์ ์ฝ ์กฐ๊ฑด ์ค ๊ฐ์ฅ ์ ํ์ ์ธ ์ ๊ทผ ์์ค์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค:
// PrivateClass ์ ์ฝ์ด ์์ผ๋ฏ๋ก ์ด ์ ๋ค๋ฆญ ํจ์๋
// private๋ณด๋ค ๋์ ์ ๊ทผ ์์ค์ ๊ฐ์ง ์ ์์
private func genericFunction<T: PrivateClass>(item: T) {}
ํ์ ๋ณ์นญ
ํ์ ๋ณ์นญ์ ์๋ณธ ํ์ ๋ณด๋ค ๊ฐ๊ฑฐ๋ ๋ ์ ํ์ ์ธ ์ ๊ทผ ์์ค์ ๊ฐ์ง ์ ์์ง๋ง, ๋ ๋์ ์ ๊ทผ ์์ค์ ๊ฐ์ง ์ ์์ต๋๋ค:
public class SomePublicClass {}
// ์๋ณธ๋ณด๋ค ๋ ์ ํ์ ์ธ ์ ๊ทผ ์์ค ๊ฐ๋ฅ
internal typealias InternalAlias = SomePublicClass
// ์๋ณธ๋ณด๋ค ๋ ๊ฐ๋ฐฉ์ ์ธ ์ ๊ทผ ์์ค์ ๋ถ๊ฐ๋ฅ
// public typealias PublicAlias = SomeInternalClass // ์ค๋ฅ
๐ ์ ๊ทผ ์ ์ด ์ค์ ํ์ฉ ์ ๋ต
1. ๋จ์ผ ํ๊ฒ ์ฑ ๊ฐ๋ฐ ์
๋จ์ผ ์ฑ ๊ฐ๋ฐ ์์๋ ๊ธฐ๋ณธ ์ ๊ทผ ์์ค์ธ internal์ ํ์ฉํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ๊ตฌํ ์ธ๋ถ์ฌํญ์ private์ด๋ fileprivate๋ก ์จ๊ธฐ๋ ๊ฒ์ด ์ข์ต๋๋ค:
class ProfileViewController {
// ๋ค๋ฅธ ํด๋์ค์์ ์ ๊ทผํ ์ ์๋ API
var user: User?
func loadUserData() {}
// ๋ด๋ถ ๊ตฌํ ์ธ๋ถ์ฌํญ
private func formatUserData() {}
private func setupViews() {}
}
2. ํ๋ ์์ํฌ ๊ฐ๋ฐ ์
ํ๋ ์์ํฌ ๊ฐ๋ฐ ์์๋ ๊ณต๊ฐ API๋ฅผ public์ด๋ open์ผ๋ก ๋ช ํํ ์ง์ ํ๊ณ , ๋๋จธ์ง๋ internal ์ดํ๋ก ์ ์งํ์ธ์:
// ๊ณต๊ฐ API
open class NetworkManager {
// ์ธ๋ถ์์ ์๋ธํด๋์ฑํ๊ณ ์ปค์คํฐ๋ง์ด์งํ ์ ์๋ ๋ฉ์๋
open func request(url: URL) -> Data? {}
// ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์์ง๋ง ์ค๋ฒ๋ผ์ด๋ํ ์ ์๋ ๋ฉ์๋
public func cancel() {}
// ๋ด๋ถ ๊ตฌํ ์ธ๋ถ์ฌํญ
internal func parseResponse() {}
private func setupSession() {}
}
3. ํ ๊ฐ๋ฐ ์
์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํจ๊ป ์์ ํ ๋๋ ๋ชจ๋ ๊ฒฝ๊ณ๋ฅผ ์ ์ ์ํ๊ณ , API ๊ณ์ฝ์ ๋ช ํํ ํ๊ธฐ ์ํด ์ ๊ทผ ์ ์ด๋ฅผ ์ ๊ทน ํ์ฉํ์ธ์:
// ํ์ ๋ค๋ฅธ ๊ตฌ์ฑ์์ด ์ฌ์ฉํ API
public protocol UserService {
func getUser(id: String) -> User?
func saveUser(_ user: User)
}
// ๊ตฌํ ์ธ๋ถ์ฌํญ์ ์จ๊น
internal class UserServiceImpl: UserService {
private let database: Database
public func getUser(id: String) -> User? {
return findUserInDatabase(id)
}
public func saveUser(_ user: User) {
validateUser(user)
saveUserToDatabase(user)
}
private func findUserInDatabase(_ id: String) -> User? {}
private func validateUser(_ user: User) {}
private func saveUserToDatabase(_ user: User) {}
}
๐ ์ ๋ฆฌ
Swift์ ์ ๊ทผ ์ ์ด ์์คํ ์ ์ฝ๋์ ์บก์ํ์ ์ธํฐํ์ด์ค ์ ์์ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค. ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ์์ค์ ์ ํํจ์ผ๋ก์จ:
- ์ฝ๋์ ๋ด๋ถ ๊ตฌํ์ ์จ๊ธฐ๊ณ ๊ฒฌ๊ณ ํ API ๊ฒฝ๊ณ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค
- ์ค์๋ก ์ธํ ์๋ชป๋ ์ฌ์ฉ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค
- ์ฝ๋ ๋ณ๊ฒฝ ์ ์ํฅ ๋ฒ์๋ฅผ ์ ํํ ์ ์์ต๋๋ค
- ์ฝ๋ ์๋๋ฅผ ๋ช ํํ ํํํ ์ ์์ต๋๋ค
'๐ฅ Bread Basics > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ๊ณ ๊ธ ์ฐ์ฐ์ (Advanced Operators) (1) | 2025.04.13 |
---|---|
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ (Memory Safety) (0) | 2025.04.13 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์๋ ์ฐธ์กฐ ์นด์ดํ (Automatic Reference Counting) (0) | 2025.04.13 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ๋ถํฌ๋ช ํ ํ์ (Opaque Types) (0) | 2025.04.13 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ ๋๋ฆญ (Generics) (0) | 2025.04.13 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ํ๋กํ ์ฝ (Protocols) (0) | 2025.04.13 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ํ์ฅ (Extensions) (0) | 2025.04.13 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ค์ฒฉ๋ ํ์ (Nested Types) (1) | 2025.04.12 |