18 Dec 2017
|
TIL
lazy
extension
protocol
pragma_mark
2017.12.18
TIL
- ์ ๊ท์ ์ฐ์ต - ์์ ์กํ๋ ์ ๊ทํํ์, regexOne์์ ์ฐ์ต
lazy
์ง์ฐ ์ ์ฅํ ํ๋กํผํฐ
- JSON step2 ํผ๋๋ฐฑ ์ฒ๋ฆฌ
- extension์ protocol์ ์ฉ : Array์ Dictionary๋ฅผ ConvertTarget ํ๋กํ ์ฝ๋ก ์ถ์ํํ๊ณ , convertValues() ํจ์๋ฅผ ์ ๊ฑฐ : ํ๋ ์ผ์ ๋๊ฐ๊ณ , ๋ฆฌํด๊ฐ์ ์ดํ์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ ๋๊ฐ์ ๋ ํจ์๊ฐ ์๋๋ฐ, ๋ฆฌํดํ์
์ด ๋ฌ๋๋ค. ์ด๋ฅผ ํ๋์ ํ๋กํ ์ฝ๋ก ์ถ์ํํ๊ธฐ์ํด์ ์๋์๋ swift์ ํ์
์ extension์ ์ ์ฉํด์ ํ๋กํ ์ฝ๋ก ์ถ์ํํ๋ค. > ์ถ์ํ๋ก ์ธํด์ ์ค๋ณต๋๋ ๋ฉ์๋๋ ์ค์ด๊ฑฐ๋ private์ผ๋ก ๊ฐ์ถ ์ ์์๊ณ , ๊ณผ๋ํ๊ฒ ์ฐ์ธ switch-case๋ฌธ์ ์ค์ผ ์ ์์๋ค.
- extension์ ์ฌ์ฉ (pragma mark ์ฌ์ฉ) : ํ ๊ฐ์ฒด์ ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ง๋ฉด ๊ฐ๋
์ฑ์ ์ํด์ extension์ ์ฌ์ฉํ์๋๋ฐ, extension์ ์ด๋ ๊ฒ ์๋ฏธ์์ด ์ฌ์ฉํ๋๊ฒ ์๋๋ผ๊ณ ํจ. ์๋ฏธ์์ด ์ฌ์ฉ๋ extension์ ์ ๊ฑฐํ๊ณ
// MARK:
์ฃผ์์ ์ฌ์ฉํ๋ค. ์ค์ํํธ์๋ MARK๋ง๊ณ ๋ ํน๋ณํ ์ฃผ์์ด ์๋ค. pragma mark๋ Objective-C์์ ์ฌ์ฉ๋๋ ๊ตฌ๋ฌธ์ด๋ค. (์ค์ํํธ์์๋// MARK:
, // TODO:
, // FIXME:
๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.) ์ด๋ฐ ํค์๋๋ค์ ์ฌ์ฉํด์ ์ฃผ์์ ๋ฌ๋ฉด Quick jump bar์์ ์ฑ
๊ฐํผ์ฒ๋ผ ์ฃผ์๋ด์ฉ์ ๋ณผ ์ ์๋ค! ์ฐธ๊ณ ์ฌ์ดํธ1 ์ฐธ๊ณ ์ฌ์ดํธ2
2017.12.19
TODO
- JSON step2 ํผ๋๋ฐฑ ์ฒ๋ฆฌ
- JSON step3 ์์
- ์ ๊ทํํ์ ๊ณต๋ถ
- regexOne์์ ์ฐ์ต
- InputView - GrammarChecker - ParseTargetFactory ์ค๊ณ
- GrammarChecker๋ฅผ InputView์ ParseTargetFactory์ฌ์ด ํ๋ฆ์ ์์น
- GrammarChecker์ ์ ๊ทํํ์ ์ ์ฉ
- (GrammarChecker์ ์๋ฌ์ฒ๋ฆฌ ์ ์ฉ) - ์ค๋ ์๋ ์ง๋
2017.12.21
TODO
- git ์ ์ฅ์ originํ์ธ - ๋ฆฌ๋ชจํธ์ ์คํ
๋ธ๋์น๋ง ํธ์๋์ด์๊ณ ์์ด๋ ๋ธ๋์น๋ ์ต์ ์ํ๊ฐ ์๋ใ
ใ
- ์ ๊ท์ ์ ์ฉํ step3 ์งํ
- ์ ๊ท์์ ํ์ฉํ ์ ์๋ ๋ฉ์๋ ์ฐพ๊ณ ๊ธฐ์กด ๋ก์ง์ด๋ ์ฐ๊ฒฐ์ํค๊ธฐ
- object์์ ์๋ Array๋ฅผ ๊ฒ์ฌํ๊ณ ํ๋ณํํ๋๊ฒ ์ถ๊ฐ
[]
์ด๋ฉด์ ๋ฐธ๋ฅ๊ฐ ๋์
๋๋ฆฌ ํํ๋ก ์๋ ๊ฒ ๊ฑธ๋ฌ๋ด๊ธฐ
1. git json์ ์ฅ์ youth๋ธ๋์นํ์ธํ๊ธฐ. ์ค๋ฆฌ์ง์ด ์ด๋๋ก ๋๋์ง, ์ง๊ธ ์คํ
๋ธ๋์น๋ง ๋๋ ์ ธ์๊ณค ๋ฆฌ๋ชจํธ์ ๋ด ์์ด๋ ๋ธ๋์น์ ํ๋๋ ํธ์๊ฐ ์๋ผ์ด์์
2. ์ ๊ท์ ์ ์ฉํ json step3 ๋นจ๋ฆฌ ์งํ. ์ ๊ท์ ํด๋์ค ์ด์ฉํด์ ๋ง๋ ํจํด ์ฐพ์๋ด๊ณ ๊ธฐ์กด ๋ก์ง์ด๋ ์ฐ๊ฒฐ์ํค๊ธฐ. ์ค๋ธ์ ํธ์ผ๋ ๋ฐฐ์ด ์์ ๊ฒ์ฌํ๊ณ ํ๋ณํํ๋๊ฑฐ ์ถ๊ฐํ๊ธฐ. ์ค๋ธ์ ํธ๊ดํธ์ด๋ฉด์ ๋์
๋๋ฆฌ ํํ๋ก ๋ค์ด์๋๊ฑฐ ์ธ๊ฑฐ ๊ฑธ๋ฌ๋ด๊ธฐ
TIL
- git: ์คํ
๋ธ๋์น๋ง ๋๋ ์ ธ์๊ณ , ๋ฆฌ๋ชจํธ ์ ์ฅ์์ ํ๋๋ ํธ์๊ฐ ์๋์ด์์๋ค.
- ๋จผ์ ๋ก์ปฌ youth27๋ธ๋์น์์ status๋ฅผ ํ์ธ > upstream์ผ๋ก๋ถํฐ pull์ ํ๋๋ ํ๋ก์ ํธ ๋ฆฌ๋ชจํธ(์ฝ๋์ค์ฟผ๋) ์ ์ฅ์์ ๋์ ๋ก์ปฌ๋ธ๋์น์ ์ฑํฌ๊ฐ ๋ง์๊ณ , ๊ทธ ์ํ์์ ๋ฆฌ๋ชจํธ์ ์ฅ์๋ก pushํ๋ ์ฑํฌ๊ฐ ๋ง์๋ค. (ํ์ฌ ์ฝ๋์ค์ฟผ๋์ youth27์ ์ฅ์ ๋ชจ๋ step2๊น์ง ์
๋ฐ์ดํธ๋ ์ํฉ) ๊ทธ ์ดํ๋ก ๋๊ฐ์ด step3 ๋ธ๋์น ๋ฐ์ ์์
ํ๋ ๋ฌธ์ ์์๋ค. ์๊ฐ๋ณด๋ค ์์ฒญ ์ฝ๊ฒ ํด๊ฒฐ!
- git์ด ๊ผฌ์๋ค๊ณ ์๊ฐ์ด ๋ค์์๋ ์ด๋๋ถํฐ ์ฑํฌ๊ฐ ์๋ง์๋์ง๋ฅผ ํ์ธํ๊ณ ์ฐจ๊ทผ์ฐจ๊ทผ ํด๊ฒฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค!(์์ ๊ฐ ์ป์)
- ์ ๊ท์ ํ์ฉ
matches
ํจ์ : ์ ๊ท์์์ ์ธํ ์ดํ์ ๊ทธ ํด๋์ค์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ชฐ๋์๋๋ฐ, ๊ฒ์์ผ๋ก ์ ์ถํด์ ํจํด๊ณผ ์ผ์นํ ๋ฌธ์์ด๋ค์ [String]์ผ๋ก ๋ฆฌํดํด์ฃผ๋ matchesํจ์๊ฐ ์์๋ค. matches์์ ๋ฆฌํดํ ๊ฐ์ value๋ง๋ค ํ๋์ฉ ๊ฒ์ฌํด์ ๋ง๋ ํ์์ธ์ง ์๋์ง ๊ฒ์ฌ, ์๋ฌ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ค.
- ์ ๊ท์ ์ ์ธ ์ดํ์ Parser๊ฐ ๊ฐ๋จํด์ก๋ค.
- ์นด์ดํ
ํ๋ ๊ฐ์ฒด, Data Convertingํ๋ ๊ฐ์ฒด์ Array ์ผ์ด์ค๋ฅผ ์ถ๊ฐํด์ ํด๊ฒฐ!
/*
์ค๊ดํธ ํ ์ธํธ ์์ ๋ฌธ์ : \{(.*?)\}
๋ฐ์ดํ ํ ์ธํธ ์์ ๋ฌธ์ : \"(.+?)\"
Array : true|false|\".+?\"|\d+|\{.+?\}
Object : (\".+?\")\:(true|false|\".+?\"|\d+|\[.+?\])
์ด ์ค๋ธ์ ํธ์์ 1 depth ์ ๋ ๋ ๋ค์ด๊ฐ์ ex) object์ ์์๋ฅผใ
ก"dee":234 ์ด๋ ๊ฒ ๋ผ์ด๋จ์ผ๋ฉด, ์ฌ๊ธฐ์ "ใ
ใ
ใ
":ใ
ใ
ใ
์ธ์ง ๊ฒ์ฌ๋ฅผ ํด์ผํ๋ ๊ฒ. ์ ๊ท์ ํ ์ค๋ก ์ค๋ธ์ ํธ ํํ ์ฒดํฌ๋, ๊ทธ ์์ ๊ฐ๊ฐ ์์๊ฐ "key":value ํํ๋ก ์ ๋ค์ด์๋์ง ์ฒดํฌํ๊ธฐ๊ฐ ํ๋๋๊น. ์ฐจ๋ผ๋ฆฌ ์ ์ฒด์์ ์๋ผ์ง ์์ ๋ฉ์ด๋ฆฌ๋ฅผ ๊ฒ์ฌํ๋ ๋ค๋ฅธ ์ ๊ท์์ ํ๋ ๋ ๋ง๋ค๋ ๊ฐ, ๋ก์ง์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฐ ํด์ ๋์
๋๋ฆฌ ํํ๊ฐ ๋ง๋์ง ๊ฒ์ฌํ๋๊ฒ ๋ ํธํ ๋ฐฉ๋ฒ์ผ๋ฏ.
[true,"sdfe",false,123,{"dee":234,"ss":false,"er":"wert"},"rr"]
{"dee":234,"ss":false,"er":"wert"}
{"dee":234,"ss":false,"er":["hana","hayul","haun"]}
["dee":234,"ss":false]
{"d":"e","t":12,"rr":false,"array":[12,true]}
GrammarChecker์์
1. ์ ์ฒด format ๊ฒ์ฌํ๊ณ ๋ด๋ถ ๊ฐ String๋ฐฐ์ด๋ก ๋ง๋ค๊ธฐ
2. String๋ฐฐ์ด์ ๊ฐ value๋ฅผ ํ๋์ฉ ๊ฒ์ฌํ๋ ๊ฒ ๋ง๋ค๊ธฐ (Arrayํํ์ผ๋ ๋์
๋๋ฆฌ๊ฐ ๋ค์ด์ค๋ฉด ์๋๋๊ฒ")
*/
func matches(for regex: String, in text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex)
let nsString = text as NSString
let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length))
return results.map { nsString.substring(with: $0.range)}
} catch let error {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
let testString = "[true,false,123,\"esdf\",{\"dee\":234,\"ss\":false,\"er\":\"wert\"},\"rr\"]"
let arrayformat = "true|false|[0-9]+|\\{.+?\\}"
let result = matches(for: arrayformat, in: testString)
print(result)
2017.12.22
TIL
- JSON step3 ํผ๋๋ฐฑ์ฒ๋ฆฌ
- ์๋ฌ์ฒ๋ฆฌ
- ํ์ํ๊ณณ์์๋ง ์ปจํธ๋กคํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ์ ์ด (main๊น์ง ๊ฐ์ catch์ํ๋๋ก)
- ์ ๊ทํํ์์ผ๋ก ๊ฑฐ๋ฅด๊ณ ๊ฐ๊ฐ ๋ฐธ๋ฅ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ ์ ํํ (value ํ๋ ๊ฒ์ฌํ ๋๋ ์ ๊ทํํ์ ํ์ ๋ฐ๋ผ์ ๋ง๋์ง ์ฒดํฌํ๋๋ก ๋ณ๊ฒฝ)
- ๋ก์ง ์ค๊ฐ์์ ํ๋ฆ์ ์ดํ๋๊ฒ ์์ด๋ดค์โฆํ๋๊ฑฐ๋ ์ํ๋๊ฑฐ๋ rethrow, throw ๋ค์ด๊ฐ๋ ํจ์์ ์๋ ๋๊ฐ์๊ฑฐ๊ฐ์์ rethrow/throw๋ก ํด๊ฒฐํ๊ธฐ
2017.12.24
TIL
JSON ๋ก์ง์ ๋ค์ ๊ทธ๋ ค๋ณด๊ณ ๊ฐ์ ๊ณผ ์ถ๊ฐ ๋ฏธ์
์ ์ฉ์ ์ํด ํ์ํ ๊ฒ๋ค์ ์ ๋ฆฌํ๋ค.
- Input - GrammarChecker - Parser > [String] - Convert (๋ง๋ ๊ฐ์ผ๋ก๋ง converting์ ํ๋๊น parser ๋ค ๋ถํฐ๋ ๊ฒ์ฌํ ํ์ ์์)
- GrammarChecker์์ typecheck๋ฅผ ํ๊ณ ์ ๊ทํํ์์ผ๋ก value ํ๋์ฉ ์ฒดํฌ (2 depth๋ถ๊ฐํ๋๊น)
- ์ ๊ทํํ์์ผ๋ก value ๊ฒ์ฌํ๋ ๊ฒ ๋ฃ๊ธฐ (ํ๋ฒ์ ๊ฒ์ฌ ๋ชปํ๊ฒ ์ใ
ใ
)
- GrammarChecker์ Manager๋ฉ์๋
- manager๋ฉ์๋๋ arrayformat / arrayvalue / objectformat /objectvalue๋ฅผ ๋ฉ์ธ๋ฉ์๋์ฒ๋ผ ์คํํจ (if array์ธ์ง bool์ธ์ง ํด์)
- input์ด array์ธ์ง object์ธ์ง ์ฒดํฌ
- array์ด๋ฉด arrayformat๊ฒ์ฌ/value๊ฒ์ฌ object์ด๋ฉด format value ๊ฒ์ฌ
- ๊ฐ format๊ณผ value๋ฉ์๋๋ ๊ฒ์ฌํด์ ์ ๊ท์์ ๋ง์ง ์๋ ํํ์ด๋ฉด false๋ฅผ ๋ฆฌํดํ๋ ๋ฆฌํดํ์
Bool์ ๋ฉ์๋
- ๊ทธ๋ผ ๊ทธ ๋งค๋์ ๋ false๋ฅผ ๋ฆฌํด๋ฐ๊ณ , ํธ์ถํ ๋ฉ์๋์์ false๋ฅผ ๋ฆฌํด๋ฐ์ผ๋ฉด error๋ฅผ throwํ๋ค.
- ๋งค๋์ ๋ฉ์๋๊ฐ ๋ฆฌํด๋ฐ์ bool๊ฐ์ด true์ด๋ฉด ๊ทธ ํฌ๋งท์ ๋ง๋๋ก value๋ฅผ ๋ถ๋ฆฌํด์ [String]์ ๋ฆฌํดํ๊ณ , ๊ทธ [String]์ Parser๋ก ๋ณด๋ด์ ธ์ ๋๋จธ์ง ๋ก์ง ์ฒ๋ฆฌ.
- GrammarChecker์์์๋ง ์๋ฌ๊ฐ ํธ๋ค๋ง๋๋๋ก ์ค๊ณ. ๊ฒฐ๊ตญ Manager๋ง public func์ด๋ฉด ๋ ๊ฒ๊ฐ๋ค.
- ์ต๋ํ ๋ค๋ฅธ ํ๋ฐ๋ถ ๋ก์ง์๋ ์๋ฌ์ฒ๋ฆฌ๊ฐ ์ํฅ์ด ์๋๋ก ์๋จ์์ ๋ชจ๋ ๊ฒ ๋ค ์ฒดํฌ๋๊ฒ ๋ง๋ค์์
ํ์ํ ๊ฒ๋ค
- Array Value์ object value๋ฅผ ์ฒดํฌํ ๋ (2depth๋ก ๋๋)ํ์ํ ์ ๊ท์. contains๋ฅผ ์ฐ๋ฉด ์ค๊ฐ์ ,๋ :์ด ๋ค์ด๊ฐ ๊ฒฝ์ฐ ๋ถ์ ํํ๊ฒ ๊ฑธ๋ฌ์ง ์ ์์
- value ์ฒดํฌํ๋ ์ ๊ทํํ์ ๋ง๋ค๊ธฐ
- manager๋ฉ์๋ ๋ง๋ค๊ณ checking๋ฉ์๋๋ ๋ค private์ผ๋ก ๊ฐ์ถ๊ธฐ- ๋งค๋์ ์์ ์ฒดํน ๋ฉ์๋ ํธ์ถ
- ๋งค๋์ ๋ฉ์๋ ๋ง๋ค๊ธฐ
- ์ฒดํน ๋ฉ์๋๋ฅผ Boolํ์
๋ฆฌํด์ผ๋ก ๋ง๋ค๊ธฐ
- ๊ฐ๊ฐ์ ์ฒดํฌ ๋ฉ์๋๋ฅผ boolํ์
์ผ๋ก ๋ณํ
- manager๊ฐ true๋ฅผ ๋ฆฌํด๋ฐ์์๋ ๋ง๋ [String]์ผ๋ก ์๋ฅด๋ ๋ก์ง์ด ํ์ํ๋ฐ ๊ทธ๊ฒ checker์์๋ ์๋๋์ง๊ผญ ๋ฐ๋ก๋ง๋ค์ด์ผ๋๋์ง ์๊ฐํ๊ธฐ..? checker๋ Bool๋ฆฌํด์ด๋ค ใ
ใ
- ํ์์์ ์๋ฅด๋ฉด๋์ง์์๊น!? ํ์์์ ์๋ฅด๊ณ dataconverter๋ก ํ๋์ฉ ๋ณด๋ด๊ธฐ!??!!?!?!
- Parser๋ก ๋์ด๊ฐ๋ ์คํธ๋ง์ ์ด์ ๋ฌธ๋ฒ์ฒดํฌ๋ ์์ ํ ํ์๊ฐ ์๋ String์ด์ด์ผ๋๋๋ฐ ์ง๊ธ ์ง ๋ก์ง์ผ๋ก ํ๋ฉด ๊ทธ๊ฒ ๋๋๊ฒ ๋ง๋์ง ํ๋ฒ๋ ์๊ฐํด๋ณด๊ธฐ
18 Dec 2017
|
property
lazy
mutating
lazy
lazy
๋ ์ค์ํํธ์ ํ๋กํผํฐ์ ๋์ค๋ ํค์๋์ด๋ค. ํ๊ตญ์ด๋ก๋ ์ง์ฐ ์ ์ฅํ ํ๋กํผํฐ
๋ผ๊ณ ํ๋๋ฐ, ์ฝ๊ฒ๋งํด์ ํด๋น ํ๋กํผํฐ์ ๊ฐ์ด ํ์ํ ๋ ๊ณ์ฐํ๋ค๋ ๋ป์ด๋ค. (์ง์ฐ ๋ก๋ฉ, lazy loading) ๊ณง๋ฐ๋ก ํ๋กํผํฐ์ ๊ฐ์ ๊ณ์ฐํ๋๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ ์๊ฐ ์ธก๋ฉด์์ ๋ญ๋น๊ฐ ์ฌํ ๊ฒฝ์ฐ, ๋๋ ์ธ์คํด์ค๊ฐ ๋ง๋ค์ด์ ธ์ผ ์ ์ ์๋ ํ์
์ ์ธ์ ์์์ ํ๋กํผํฐ ๊ฐ์ด ์์กดํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. (์ด๊ธฐํ๋ฅผ ํ ์ ์๋ ํ๋กํผํฐ)
์ง์ฐ ๋ก๋ฉ(lazy loading)์ ํ๋กํผํฐ์ ๊ฐ์ด ํ์ํด์ผ ๊ณ์ฐํ๋ค๋ ๋ป์ด๋ค. ๋ฐ๋ผ์ ํ๋กํผํฐ์ ๊ฐ์ ๊ณ์ฐํ๋ ์ผ๋ ์ธ์คํด์ค์ ์ด๊ธฐํ ์ดํ๋ก ๋ฏธ๋ค์ง๋ค. ๋ฐ๋ผ์ ๊ทธ ๊ฐ์ด ๋์ค์ ๋ณ๊ฒฝ๋๋ฏ๋ก var
๋ก ์ ์ธํด์ผํ๋ค.
lazy ํ๋กํผํฐ ์ ์ธํ๋ ๋ฒ
struct Cup {
lazy var beverage : String = {
// code
return chosenBeverage
}()
}
mutating ํจ์ / var ํ์
Struct
์ฐธ๊ณ ์ฌ์ดํธ
lazy
๋ฅผ ์ฌ์ฉํ๋ ์คํธ๋ญํธ์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ๋๋, ํญ์ var๋ก ์ ์ธํด์ผํ๋ค.
-> lazy
ํ๋กํผํฐ์ ์ํด์ ์์ฑ์ด ๋ฐ๋๊ณ , ๊ทธ ์คํธ๋ญํธ๋ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์คํธ๋ญํธ๋ผ๊ณ ๊ฐ์ฃผ๋๊ธฐ ๋๋ฌธ์! let
์ผ๋ก ์ ์ธํ๋ฉด ์ปดํ์ผ์๋ฌ๊ฐ ๋๋ค.
lazy
์ ์ธ๋ ํ๋กํผํฐ์ ์ ๊ทผํ๋ ๋ฉ์๋๋ ๋ฐ๋์ mutating
ํค์๋๊ฐ ์ ์ธ๋์ด์ผ ํ๋ค.
lazy
ํ๋กํผํฐ๋ ๊ฐ์ด ํ์ํ ๋ ๊ณ์ฐ๋๋๋ฐ, ๊ทธ ํ๋กํผํฐ์ ์ ๊ทผํ๋ ๋ฉ์๋๋ ํธ์ถ๋๋ ์์ ์ ํ๋กํผํฐ์ ๊ฐ์ด ๊ณ์ฐ๋๊ณ , ๊ทธ๊ฑด ๋ฐ๋ก ์ ์ ์ ์ผ๋ก ๊ทธ ๋ฉ์๋๋ ํ๋กํผํฐ ๊ฐ์ ๋ฐ๊พธ๋ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ด๋ค.
lazy
ํค์๋๊ฐ ๋ถ์ ํ๋กํผํฐ๋ ํ ๋ฒ๋ง ๊ณ์ฐ๋๋ค. ์ง์ฐ ํ๋กํผํฐ๋ ์ฒซ ์ก์ธ์ค๋ ํ ๋ฒ๋ง ๊ณ์ฐ๋๊ณ , ์ดํ์๋ ๋ค์ ์กฐ์ ๋์ง ์๋๋ค.
11 Dec 2017
|
TIL
2017.12.11
TODO
- JSON step2
- iterator ์ฌ์ฉ / string, character์ index ์ฌ์ฉ
- ํน์ string remove
- [ ]์ธ์ง { }์ธ์ง ํ๋ณํด์ ๋ก์ง ๋ถ๋ฆฌ
- [ ]๋ง ์๋ ๊ฒฝ์ฐ : , ๋ก ๊ตฌ๋ถ
- { }๋ง ์๋ ๊ฒฝ์ฐ : { }์ธํธ๋ฅผ ์ฐพ๋ ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ
- { }์ value ๊ฐ์ด ์๋ ๊ฒฝ์ฐ : { }์ธํธ๋ฅผ ์ฐพ๋ ๋ฐ๋ณต๋ฌธ ์ฌ์ฉํ๊ณ { } ๋ฌธ์ฅ remove๊น์ง
- { }๋ง ์๋ ๊ฒฝ์ฐ : , ๋ก ๊ตฌ๋ถํด์ ์ด๋ ์ด์ ๋ฃ๊ณ ์ด๋ ์ด ์์ ๊ฐ๊ฐ์ :๋ก ๋ถ๋ฆฌ > value๋ง ๊ฐ์ง๊ณ ์บ์คํ
ํ๊ธฐ
TIL
- step1๋ถํฐ ๋ค์ ๊ตฌํ : step1์์๋ AnyType์ ๋ชจ๋ ๋ด๋ Array๋ฅผ ๋ง๋ ๊ฒ ์๋๋ผ, counting๋ง ํ๋ ์์ผ๋ก ๊ตฌํํ ๋ฌธ์ ๊ฐ ์์์
- ๋ฌธ์๋ฅผ ํ์ํ๊ณ ์๋ฅด๋ ๋ถ๋ถ๊ณผ ๊ฒ์ฌํ๋ ๋ถ๋ถ, ์นด์ดํ
ํ๋ ๋ถ๋ถ, ์ถ๋ ฅํ๋ ๋ถ๋ถ ๋ชจ๋ ๋ฐ๋ก ๊ฐ์ฒด๋ฅผ ๋๋
- ํนํ, ๊ฐ์ฒด๋ฅผ ๋๋๊ธฐ ์ด๋ ค์ด ๋ถ๋ถ์ด๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๋ณต์กํด์ง๋ ๊ฒฝ์ฐ๋ ๋ฐ์ดํฐ ์ค๋ธ์ ํธ๋ฅผ ๋ก์ง ๊ฐ์ฒด ๋ด์์ ์์ฑํด์ ๋๊ธฐ๋ ๋ฐฉ์์ผ๋ก์ฌ์ฉํจ
Any
ํ์
์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ฒ์ด ์๋ JSONData
๋ฅผ enum
์ผ๋ก ์ ์ํจ
- enum ์ฐ๊ด๊ฐ, enum ์ปค์คํ
ํ์
- step2๋ฅผ ์ฌ๊ตฌํํ๋ฉด์ ๋ก์ง ํ๋ฆ๋ ๊ทธ๋ฆผ!
2017.12.12
TODO
- JSON step2
- Type โJSONTargetโ does not conform to protocol โSequenceโ ์ค๋ฅํด๊ฒฐ
- JSONTarget ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ฐ ๊ฐ์ฒด์ ํ์ํ ํจ์ ๊ตฌํ
- countํ๋ ํจ์ ๊ตฌํํ๊ธฐ
- value๊ฐ(parsing target์ด ๋๋ ๊ฐ) ๊ฐ์ ธ์ค๋ ํจ์ ๊ตฌํํ๊ธฐ (
MyObject
๊ฐ์ฒด๋ ํนํ value๊ฐ์ ๊ฐ์ ธ์ค๋ ํจ์๋ก ๊ตฌํ)
- TargetIdentifier์์ ๊ฐ์ฒด ๋ค์ด์บ์คํ
ํ๊ณ ๊ทธ JSONTarget ํ์
์ ๋ง๋ ValueIdentifier์ parsingํจ์ ํธ์ถํ๊ธฐ
- ValueIdentifier์ ํจ์๋ private์ผ๋ก ๊ตฌํํ๊ธฐ
TIL
- ๋์
๋๋ฆฌ์์ subscript ์ ํ๊ณต์๋ฌธ์
subscript(_: )
Declaration : subscript(position: Dictionary<Key, Value>.Index) -> Dictionary.Element { get }
Return Value
A two-element tuple with the key and value corresponding to position.
<JSON readme>
- step2 ์ปค๋ฐ : add case of parsing one object
- string์ผ๋ก ๋ค์ด์จ ๋ถ์๋์์ ํ๋๋ก ํต์ผํ๊ธฐ์ํด ParsingTarget์ผ๋ก ํต์ผ.
- ParsingTargetFactory์์ ์
๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ๋ถ์ํด์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ MyArray๋ MyObject๊ฐ ์์ฑ๋๋ค.
- string์ ๋ถ๋ฆฌํด์ ๋ถ์๋์๋ง(array์ value๋ค, dictionary์ ๊ฒฝ์ฐ value๋ง) [String]ํํ๋ก ๋ถ์ ๊ฐ์ฒด์ ๋๊ธฐ๋ ๋ฐฉ์
- ๋ถ์ํ๋ ๊ฐ์ฒด์์ ParsingTarget(array๋ object)์ ๋ฐ์์, ๊ทธ ์ปฌ๋ ์
์ ๊ฐ์ ํ๋์ฉ ์ ๊ทผํ์ด์ผ ํ๋๋ฐ
Type 'ParsingTarget' does not conform to protocol 'Sequence'
๋ผ๋ ์ค๋ฅ๊ฐ ๋ฌ๋ค. ๊ฐ ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํด์ index๋ง ๋๊ฒจ์ฃผ๋ฉด ๊ทธ index์ ๋ง๋ value๋ฅผ ๋๊ฒจ์ฃผ๋ getEachValue()ํจ์์ for๋ฌธ์ ๋๋ฆฌ๊ธฐ ์ํด ๊ฐ์ฒด ์์ฑ์ ํฌ๊ธฐ๋ฅผ ๋ฆฌํดํ๋ count()ํจ์๋ฅผ ๊ตฌํํ๋ค.
- flow
- Array๋ Object์ธ ๊ฒฝ์ฐ์, JSONDataFactory์์ parsing๋์์ธ value๋ง ์ด๋ ์ด์ ๋ด์์ ValueCounter๋ก ๋ณด๋๋๋ฐ, ์ด๋ ๊ฒ ํ๋ฉด ๊ฒฐ๊ตญ Anyํ์
๋ฐธ๋ฅ๋ฅผ ๋ด์ object๋ฅผ ๋ง๋ค ์ ์์ ๊ฒ ๊ฐ์์(๊ฒฐ๊ตญ object์ ๊ฒฝ์ฐ ์นด์ดํ
๋ง ํ๊ฒ ๋ ์
..) JSONData enum์ Array์ Object value๋ ์๋ก์ด ์ผ์ด์ค๋ก ์ถ๊ฐํ๋ค.
- ๊ทธ๋์ setTargetType()์ [JSONData]๋ฅผ ๋ฆฌํดํ๋ ๊ฒ์์ JSONData์์ฒด๋ฅผ ๋ฆฌํด ํ๋๊ฒ์ผ๋ก ๋ฐ๋์๋ค.
- ์ด๋ ๊ฒ ํ๋๊น counter์์ enum์ ๋ฐ์ธ๋ฉํด์ ์จ์ผ ํ๋๊ฒ ๋ฌธ์ ๊ฐ ๋๋ค!
2017.12.13
TIL
- ํจํด๋งค์นญ (enum ๋ฐ์ธ๋ฉ)
- ์ค์ํํธ์ฝ๋ฆฌ์ ๋ฐ์
์ฐธ์!
2017.12.14
TIL
- enum ๋ฐ์ธ๋ฉ
- JSON step2 : ํ๋์ ๋ฐฐ์ด ์
๋ ฅํ์๋, ํ๋์ ๊ฐ์ฒด ์
๋ ฅํ์๋์ ๋น๋ ์ฑ๊ณต!
- ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์์ด ์๋ฅด๋ ๋ฐฉ๋ฒ ์์๋ด :
range
}
```
๋ฌธ์ : ์ด๋ ๊ฒ {} ์ค๊ดํธ์ ๋ด๋ถ ๊ฐ๋ง objectValue์ ์ ์ฅํ ์ ์์ผ๋ฉด, ๊ทธ ์คํธ๋ง๋ง ๋นผ๊ณ ๋๋จธ์ง ๋ฐฐ์ด์ ์์ value๋ค๋ง appendํ๊ณ ๋ง์ง๋ง์ objectValue๋ฅผ appendํด์ parsingTarget์ผ๋ก ๋ง๋ค ์ ์์ผ๋๊น.. ๊ทผ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ์ผ๋จ {}๋ก ๊ฐ์ธ์ง ๊ฐ์ฒด๊ฐ ๋ ๊ฐ ์ด์์ผ๋๋ ์ ๋๋ก ์ฐพ์์ง์ง ์์๋ค.
<JSON readme>
step2 ์ปค๋ฐ : enum๋ฐ์ธ๋ฉ ์ฑ๊ณต, ๊ฐ์ฒด๊ฐ ๊ฐ์ enumํ์
์ผ๋ก ๋ฌถ์ฌ์์ง๋ง ์ปฌ๋ ์
์ ๋ฌ๋ผ์ (Array, Dictionary)
makeCountInfo์์๋ ์นด์ดํธ๋ฅผ ํด์ผํ๋ ํ๊ฒ์ ์ข
๋ฅ์ ๋ฐ๋ผ ๋ฐ์ธ๋ฉ์ ํ๊ณ , ์ด์ธ์ privateํจ์๋ฅผ ์ ์ธํด์ array์ผ๋๋ object์ผ๋ ์นด์ดํ
ํ๋ ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์๋ค.
ValueCounter์์ ์์ฑ๋ CountInfo(CountingInfo์์ ์ด๋ฆ๋ณ๊ฒฝ)๋ OutputView์ ์ ๋ฌ๋์ด ์ถ๋ ฅ๋๋ค.
ํ๋์ ๋ฐฐ์ด ์
๋ ฅํ์๋, ํ๋์ ๋์
๋๋ฆฌ ์
๋ ฅํ์๋์ ๋น๋ ์ฑ๊ณต!
<์๊ฐ>
MyObject๊ฐ MyArray์ ๋ค์ด์๋ ๊ฒฝ์ฐ๋ฅผ ํด์ผํ๋๋ฐโฆ. string ๋ฐฐ์ด์ด๋ ๋์
๋๋ฆฌ๋ก ๋๊ธฐ์ง ๋ง๊ณ ๋ฐ๋ก ํํ๋ฅผ ํ๋ณํ๊ณ ๋ณํํด์ ๋ฃ์ด๋ฒ๋ฆฌ๋๊ฑธ๋ก ๊ตฌํํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํจ.
๊ทผ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ๋ถ๋ฆฌํ๋ฉด์ ํ๋ณํํ๋ ๊ฐ์ฒด์ ์๋ค๊ฐ๋ค ํ ์๋ฐ์์๊ฒ ๋๋๋ฐ, ์ด๊ฒ ๊ฐ์ฒด๋ผ๋ฆฌ ์์กด์ฑ์ด ๋์์ง๋๊ฒ ์๋๊น?ใ
ใ
โฆ.
์๋๋ฉด for๋ฌธ์ ๋๋ฆฌ๋ฉด์ ๊ฒ์ฌ๊ฐ์ฒด์ ๊ฒ์ฌํ๋ ๋ฉ์๋์ ๋๊ฒจ๋ฒ๋ฆฌ๊ณ , ๊ฒ์ฌํ๋ ๋ฉ์๋์์๋ ๊ณ์ appned๋ง ํ๊ณ , ๋ชจ๋ ๊ฐ์ด ๋ค ๋ณํ๋์ด์ ๋ค์ด๊ฐ ๋ก์ปฌ๋ณ์๋ก ๋ค ํ๋ณํ์ด ์๋ฃ๋ myArray๋ฅผ ๋ง๋ ๋ค!!!!!!(๊ตณ์ด myArray,myobject๋ฅผ string์ผ๋ก ๋ง๋ค์ง ์๋ ๊ฒ)
2017.12.15
TODO
- JSON step2
- String์ characterView๋ฅผ ์ฌ์ฉํด์ ํ ๊ธ์์ฉ ํ์ํ๊ณ ์ค๊ดํธ๋ฅผ ์์๋ด๋ ๋ฐฉ๋ฒ
- ParsingTargetFactory๊ฐ์ฒด์์ ์
๋ ฅ๊ฐ์ String์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋ณ๋ก ์๋ฏธ๊ฐ ์์ผ๋ ์์ ๊ณ , token์ ์ฐพ์๋ด๋ฉด ๋ฐ๋ก JSONData ํํ๋ก ํ๋ณํ์ ํด์ ๋ถ์๋์์ผ๋ก ๋ง๋ค์ด ๋ผ ์ ์๋๋ก ๊ตฌ์กฐ ๊ฐ์ ํ๊ธฐ
TIL
JSON step2
2017.12.17
TIL
JSON step2
- (12.17 ๋ฐ๊ฒฌ){}ํํ๋ ๋น์ฐํ ์ด๋ฏธ MyObject์์ ๋ด๋ถ value๋ค์ด ๋ค JSONDataํ์
์ผ๋ก ๋ณํ์ด ๋ Dictionary<String,JSONData>์ธ ์ํ๋ก matchValueType๋ก ๊ฐ๋ ๋น์ฐํ if๋ฌธ์ ๊ฑธ๋ฆฌ์ง ์์์ String์ผ๋ก ์ธ์๋๊ณ , ์นด์ดํ
ํ๋ ๊ณณ์์๋ string๊ณผ ๊ฐ์ฒด๊ฐ ๋ชจ๋ ์ธ์๋๋ ๊ฐ์ฒด ์ ๋งํผ string ์๋ ์นด์ดํ
๋๋๊ฒ ๋น์ฐโฆ
- MyArray์ MyObject๊ฐ ๋ณํ๋๋ ํ๋ฆ์ ๋ณ๊ฒฝ
- JSONDataFactory์ matchValueType()๋ฅผ string์ ๋ฐ์์ JSONData ํ์
์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ผ๋ก ์์
- {}๊ฐ ์์ผ๋ฉด JSONData.Object
- []๊ฐ ์์ผ๋ฉด JSONData.Array๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋๋ก ์์
06 Dec 2017
|
error
throw
do-try-catch
errorhandling
throw
์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋(์๋ชป๋ ์ ์๋) ํจ์์๋ ์์ธ์์ด throw
๋ถ์ด์ผํ๋ค. ํจ์์ throw
๋ฅผ ๋ถ์ด๋ฉด ๊ทธ ํจ์์ ๋ฆฌํดํ์
์ โ์๋ ๋ฆฌํดํ๋ ํ์
์ด๋ errorํ๋ก์ฝ์ ์ธ์คํด์คโ๋ก ๋ณ๊ฒฝ๋๋ค.
do-try-catch
do
: ์ ์์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค. throw
๊ฐ ์ง์ ๋ ํจ์๋ฅผ ํธ์ถ ํ ์ ์๋๋ค.
try
: ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ throw
๊ฐ ๋ถ์ ํจ์๋ฅผ ํธ์ถ ํ ๋ ๋ถ์ธ๋ค.
catch
: do
๊ตฌ๋ฌธ ๋ค์ ๋ถ๋๋ค. try
ํธ์ถ ์ค์์ ์ด๋ ํ๋๋ผ๋ ์ค๋ฅ๋ฅผ ๋์ง๋ฉด catch
๊ฐ ์คํ๋๋ค. ์ค๋ฅ ์ข
๋ฅ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ ํ์ง ์์ผ๋ฉด ๋์ ธ์ง error๊ฐ ์๋ค๋ฉด ๊ฐ๋ฆฌ์ง ์๊ณ ์ก์๋ด๋๋ฐ, ํน์ ์ค๋ฅ ์ข
๋ฅ๋ฅผ ์ก์๋ด๊ธฐ ์ํด catch
๋ธ๋ก์ ์ถ๊ฐํ ์๋ ์๋ค.