πŸ’» 개발

    [Android] MVVM νŒ¨ν„΄ 적용기 - 2

    GitHub - k906506/MVVM: πŸ”¨ MVVM이 λ­μ—μš”? πŸ”¨ MVVM이 λ­μ—μš”? Contribute to k906506/MVVM development by creating an account on GitHub. github.com MVVM 두 번째 μ‹œκ°„μ΄λ‹€. κ°‘μž‘μŠ€λŸ½κ²Œ μ°Ύμ•„μ˜¨ μ΄μœ λŠ” μ‘Έν”„λ₯Ό μ§„ν–‰ν•˜λ‹€κ°€ RecyclerView λ₯Ό Room 을 μ‚¬μš©ν•΄μ„œ MVVM νŒ¨ν„΄ 으둜 κ΅¬ν˜„ν–ˆλŠ”λ° μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜μ§€ μ•Šμ•„μ„œ RecyclerView + Room + MVVM 을 μ •λ¦¬ν•˜κ³  μ½”λ“œλ₯Ό λ‹€μ‹œ 보렀고 ν•œλ‹€. μš°μ„  MVVM 을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” μœ„μ˜ 그림을 μ΄ν•΄ν•˜κ³  λ„˜μ–΄κ°€λŠ” 것이 μ’‹λ‹€. κ·Έλ¦Όμ—μ„œ 주의깊게 봐야할 것은 ν™”μ‚΄ν‘œμ˜ λ°©ν–₯ 이닀. λͺ¨λ“  ν™”μ‚΄ν‘œκ°€ 단방ν–₯으둜 μ—°κ²° λ˜μ–΄μžˆκ³  μƒμœ„ μš”μ†ŒλŠ” ν•˜μœ„ μš”μ†Œλ₯Ό μ°Έμ‘°ν•œλ‹€. μ°Έμ‘°..

    [μ½”ν‹€λ¦° 완전정볡] 곡변성, λ°˜κ³΅λ³€μ„±, 무변성

    κ°€λ³€μ„± λ³€ν•  수 μžˆλ‹€? 가변성이 λ­μ—μš”? πŸ™„ μ½”ν‹€λ¦° μ—μ„œμ˜ 가변성은 ν˜•μ‹ λ§€κ°œλ³€μˆ˜κ°€ 클래슀 계측에 영ν–₯을 μ£ΌλŠ” 것을 λ§ν•œλ‹€. 예λ₯Ό λ“€μ–΄ ν˜•μ‹ A의 값이 ν•„μš”ν•œ λͺ¨λ“  ν΄λž˜μŠ€μ— ν˜•μ‹ B의 값을 넣어도 λ¬Έμ œκ°€ μ—†λ‹€λ©΄ BλŠ” A의 ν•˜μœ„ ν˜•μ‹μ΄ λœλ‹€. μ•„λž˜ μ½”λ“œλ₯Ό 보자. val integer : Int = 1 val number : Number = integer // NumberλŠ” μƒμœ„ μžλ£Œν˜•, IntλŠ” ν•˜μœ„ μžλ£Œν˜• Intν˜•μœΌλ‘œ μ„ μ–Έν•œ integer λ³€μˆ˜κ°€ Numberν˜•μœΌλ‘œ μ„ μ–Έν•œ number λ³€μˆ˜μ— 할당해도 아무 λ¬Έμ œκ°€ μ—†λŠ” 것을 λ³Ό 수 μžˆλ‹€. 이게 λ°”λ‘œ 가변성이닀. 또 λ‹€λ₯Έ μ˜ˆλ‘œλŠ” Int?와 Intκ°€ μžˆλ‹€. Int?λŠ” null도 ν¬ν•¨ν•˜λ―€λ‘œ Int?κ°€ Int의 μƒμœ„ μžλ£Œν˜•μ΄ λœλ‹€. κ°€λ³€μ„±μ˜ 3가지 μœ ν˜• 기본적으둜..

    [μ½”ν‹€λ¦° 완전정볡] μ œλ„€λ¦­

    μ œλ„€λ¦­ μ œλ„€λ¦­ , λ‹€λ₯Έ μ–Έμ–΄λ₯Ό 이미 κ²½ν—˜ν•˜κ³  μ™”λ‹€λ©΄ λ‚―μ„  λ‹¨μ–΄λŠ” μ•„λ‹ˆλ‹€. 뭐 λŒ€μΆ© μ–˜κΈ°ν•˜λ©΄ μžλ£Œν˜• 을 λ‚˜μ€‘μ— μ„ μ–Έν•˜λŠ”? 그런 λŠλ‚Œμ΄λ‹€. μš°μ„  ν™•μ‹€ν•˜κ²Œ 집고 λ„˜μ–΄κ°€λ³΄μž. κ·Έλž˜μ„œ μ œλ„€λ¦­μ΄ 뭐고 μ™œ μ“°λŠ”κ±°μ—μš”? πŸ€” μ œλ„€λ¦­ 은 클래슀 λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  μžλ£Œν˜•μ„ λ‚˜μ€‘μ— μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ ν™•μ •ν•˜λŠ” 방법이닀. μ œλ„€λ¦­μ΄ λ‚˜μ˜€κ²Œ 된 배경은 μžλ£Œν˜•μ˜ 객체듀을 λ‹€λ£¨λŠ” λ©”μ†Œλ“œλ‚˜ ν΄λž˜μŠ€μ—μ„œ 컴파일 μ‹œκ°„μ— μžλ£Œν˜•μ„ κ²€μ‚¬ν•˜μ—¬ μ λ‹Ήν•œ μžλ£Œν˜•μ„ μ„ νƒν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€. μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λ©΄ 객체의 μžλ£Œν˜•μ„ μ»΄νŒŒμΌν•  λ•Œ μ²΄ν¬ν•˜κΈ° λ•Œλ¬Έμ— 객체 μžλ£Œν˜•μ˜ μ•ˆμ •μ„±μ„ 높이고 ν˜• λ³€ν™˜μ˜ λ²ˆκ±°λ‘œμ›€μ΄ 쀄어든닀. μ œλ„€λ¦­μ˜ μ‚¬μš© 방법 μ œλ„€λ¦­μ€ μ•΅κΈ€ λΈŒλž˜ν‚· 사이에 ν˜•μ‹ λ§€κ°œλ³€μˆ˜ λ₯Ό λ„£μ–΄ μ„ μ–Έν•˜κ³  ν•˜λ‚˜ μ΄μƒμ˜ ν˜•μ‹ λ§€κ°œλ³€μˆ˜λ₯Ό 지정할 수 μžˆλ‹€. ν˜•μ‹ λ§€κ°œλ³€μˆ˜λŠ” 자..

    [μ½”ν‹€λ¦° 완전정볡] μ—¬λŸ¬ μ’…λ₯˜μ˜ 클래슀

    보톡 클래슀 λŠ” 속성과 λ™μž‘μ„ 가지기 λ•Œλ¬Έμ— ν”„λ‘œνΌν‹° 와 λ©”μ†Œλ“œ λ₯Ό λ©€λ²„λ‘œ 가진닀. 먄약 νŠΉμ • λ™μž‘μ„ 가지지 μ•Šκ³  μ˜€λ‘œμ§€ 데이터 μ €μž₯을 μœ„ν•΄ μ‚¬μš©ν•œλ‹€λ©΄ 일반적인 ν΄λž˜μŠ€μ—μ„œμ˜ κ΅¬ν˜„ 뢀뢄은 ν•„μš”κ°€ 없을 것이닀. κ΅¬ν˜„λΆ€λ₯Ό μž‘μ„±ν•˜μ§€ μ•ŠμœΌλ©΄ 그만큼 λ©”λͺ¨λ¦¬λ₯Ό 덜 μ‚¬μš©ν•˜κ²Œ 되고 μžμ›μ˜ λ‚­λΉ„λ₯Ό 막을 수 있게 될 것이닀. 이처럼 μ½”ν‹€λ¦°μ—μ„œλŠ” 데이터 μ €μž₯을 μœ„ν•œ ν΄λž˜μŠ€κ°€ μžˆλŠ”λ° λ°”λ‘œ 데이터 클래슀 이닀. 데이터 클래슀 보톡 데이터 전달을 μœ„ν•œ 객체λ₯Ό DTO(Data Transfer Object) 라고 λΆ€λ₯Έλ‹€. κ΅¬ν˜„ λ‘œμ§μ„ 가지고 μžˆμ§€ μ•Šκ³  μˆœμˆ˜ν•œ 데이터 객체λ₯Ό ν‘œν˜„ν•˜κΈ° λ•Œλ¬Έμ— 속성과 속성에 μ ‘κ·Όν•˜κ³ μž ν•˜λŠ” κ²Œν„°μ™€ μ„Έν„° λ₯Ό 가진닀. μΆ”κ°€μ μœΌλ‘œ toString(), equals() κ³Ό 같은 데이터λ₯Ό ν‘œν˜„ν•˜κ±°λ‚˜ λΉ„κ΅ν•˜λŠ” λ©”μ†Œλ“œ..

    [μ½”ν‹€λ¦° 완전정볡] 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€

    좔상 클래슀 좔상 클래슀 VS μΈν„°νŽ˜μ΄μŠ€ 좔상 클래슀 λŠ” λŒ€λž΅μ μΈ μ„€κ³„μ˜ λͺ…세와 κ³΅ν†΅μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ΄λ‹€. 즉, ꡬ체적이지 μ•Šμ€ 것이닀. 좔상 클래슀 λ₯Ό μƒμ†ν•˜λŠ” ν•˜μœ„ 클래슀 λŠ” 좔상 클래슀의 λ‚΄μš©μ„ 더 ꡬ체화 ν•΄μ•Ό ν•œλ‹€. μ˜€μž‰? 그럼 좔상 ν΄λž˜μŠ€λž‘ μΈν„°νŽ˜μ΄μŠ€λŠ” 같은 κ±° 아냐? πŸ€” μ—„λ°€νžˆ λ§ν•˜λ©΄ λ‹€λ₯΄λ‹€. μΈν„°νŽ˜μ΄μŠ€ μ—­μ‹œ λŒ€λž΅μ μΈ 섀계 λͺ…μ„Έλ₯Ό κ΅¬ν˜„ν•˜κ³  μΈν„°νŽ˜μ΄μŠ€ λ₯Ό μƒμ†ν•˜λŠ” ν•˜μœ„ 클래슀 μ—μ„œ 이λ₯Ό κ΅¬μ²΄ν™”ν•˜λŠ” 것은 λ™μΌν•˜λ‹€. ν•˜μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€μ—μ„œλŠ” ν”„λ‘œνΌν‹°μ˜ μƒνƒœ 정보λ₯Ό μ €μž₯ν•  수 μ—†λ‹€. λ‹€μ‹œ λ§ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€ μ—μ„œλŠ” ν”„λ‘œνΌν‹°μ˜ μ΄ˆκΈ°ν™” κ°€ λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” 것이닀. interface Vehicle { val name : String val color : String val weight : Double } ..

    [TIL] 22.04.20

    κ³΅λΆ€ν•œ 것 μ •μ²˜κΈ° 21λ…„ 3회차 μ•Œκ²Œλœ 것 [1κ³Όλͺ©] μ†Œν”„νŠΈμ›¨μ–΄ 섀계 1. λžŒλ°”μš° 뢄석 기법 - 객체 λͺ¨λΈλ§ -> 동적 λͺ¨λΈλ§ -> κΈ°λŠ₯ λͺ¨λΈλ§ 순으둜 진헹 - 객체 λͺ¨λΈλ§ : 정보 λͺ¨λΈλ§μ΄λΌκ³ λ„ λΆ€λ₯΄λ©° 클래슀 λ‹€μ΄μ–΄κ·Έλž¨μ„ μž‘μ„± - 동적 λͺ¨λΈλ§ : μƒνƒœ λ‹€μ΄μ–΄κ·Έλž¨μ„ μž‘μ„± - κΈ°λŠ₯ λͺ¨λΈλ§ : 자료 흐름도(Data Flow Diagram)을 μž‘μ„± 2. μš”κ΅¬μ‚¬ν•­ 개발 ν”„λ‘œμ„ΈμŠ€ λ„μΆœ(μš”κ΅¬μ‚¬ν•­ μˆ˜μ§‘) -> 뢄석 -> λͺ…μ„Έ -> 확인(μš”κ΅¬μ‚¬ν•­ 검증) 3. μ• μžμΌ 개발 ν”„λ‘œμ„ΈμŠ€ - 읡슀트림 ν”„λ‘œκ·Έλž˜λ° : XP, 고객과 함꼐 2μ£Ό μ •λ„μ˜ 반볡 개발, TDD - 슀크럼 : 30μΌλ§ˆλ‹€ λ™μž‘ κ°€λŠ₯ν•œ μ œν’ˆμ„ μ œκ³΅ν•˜λŠ” μŠ€ν”„λ¦°νŠΈ 개발 4. UML 관계 - μΌλ°˜ν™” : Generalization, μ‹€μ„  삼각 ν™”μ‚΄ν‘œ, 일반적인 것과 ..

    [TIL] 22.04.18

    κ³΅λΆ€ν•œ 것 μ •μ²˜κΈ° 21λ…„ 1회차 μ•Œκ²Œλœ 것 [1κ³Όλͺ©] μ†Œν”„νŠΈμ›¨μ–΄ 섀계 1. λ””μžμΈ νŒ¨ν„΄ - 생성 νŒ¨ν„΄ : 좔상 νŒ©ν† λ¦¬, λΉŒλ”, νŒ©ν† λ¦¬ λ©”μ†Œλ“œ, ν”„λ‘œν† νƒ€μž…, 싱글톀 - ꡬ쑰 νŒ¨ν„΄ : μ–΄λŒ‘ν„°, λΈŒλ¦¬μ§€, μ»΄νΌμ§€νŠΈ, λ°μ½”λ ˆμ΄ν„°, νΌμ‚¬λ“œ, ν”„λ‘μ‹œ - ν–‰μœ„ νŒ¨ν„΄ : 컀맨트, μ˜΅μ €λ²„, μ „λž΅, μƒνƒœ 2. 객체지ν–₯ 뢄석 방법둠 - Cord-Yourdon : E-R λ‹€μ΄μ–΄κ·Έλž¨μ„ μ‚¬μš©ν•˜μ—¬ 객체의 ν–‰μœ„λ₯Ό 데이터 λͺ¨λΈλ§ ν•˜λŠ”λ° 초점 3. μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œ 뢄석 - ν”Œλž«νΌ κΈ°λŠ₯ 뢄석 - ν”Œλž«νΌ μ„±λŠ₯ νŠΉμ„± 뢄석 - 운영체제 뢄석 - λ„€νŠΈμ›Œν¬ 뢄석 - DBMS 뢄석 4. UML - 클래슀 λ‹€μ΄μ–΄κ·Έλž¨ : μ‹œμŠ€ν…œμ„ κ΅¬μ„±ν•˜λŠ” ν΄λž˜μŠ€λ“€ μ‚¬μ΄μ˜ 관계λ₯Ό ν‘œμ‹œ - μ•‘ν‹°λΉ„ν‹° λ‹€μ΄μ–΄κ·Έλž¨ : μ‹œμŠ€ν…œ 내뢀에 μ‘΄μž¬ν•˜λŠ” μ—¬λŸ¬ ν–‰μœ„μ™€ λΆ„κΈ° 및 쑰건을 ν‘œμ‹œ ..

    [TIL] 22.04.17

    κ³΅λΆ€ν•œ 것 μ •μ²˜κΈ° 22λ…„ 1회차 μ•Œκ²Œλœ 것 [1κ³Όλͺ©] μ†Œν”„νŠΈμ›¨μ–΄ 섀계 1. μ†Œν”„νŠΈμ›¨μ–΄ 섀계 방법 - 상ν–₯식 섀계 방법 : λ°”ν…€μ—…, μž‘μ€ 문제λ₯Ό ν•΄κ²°ν•˜μ—¬ 큰 문제둜 톡합, 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° (Java) - ν•˜ν–₯식 섀계 방법 : νƒ‘λ‹€μš΄, 큰 문제λ₯Ό μž‘μ€ 문제둜 λΆ„ν•΄, 절차 쀑심 ν”„λ‘œκ·Έλž˜λ° (C) 2. 데이터 흐름도 - ν”„λ‘œμ„ΈμŠ€ : 원 - 데이터 흐름 : ν™”μ‚΄ν‘œ - 데이터 μ €μž₯ : 평행선 - μ’…λ£Œ : μ‚¬κ°ν˜• 3. UI 섀계 도ꡬ - 와이어 ν”„λ ˆμž„ : νŽ˜μ΄μ§€μ— λŒ€ν•œ λŒ€λž΅μ μΈ λ ˆμ΄μ•„μ›ƒ 및 UI μš”μ†Œ 섀계 - λͺ©μ—… : 와이어 ν”„λ ˆμž„μ—μ„œ λ””μžμΈ, μ‚¬μš© 방법 μ„€λͺ…, 평가λ₯Ό μœ„ν•΄ μ‹€μ œ ν™”λ©΄κ³Ό μœ μ‚¬ν•˜λ„λ‘ UIλ₯Ό λ³€κ²½ (정적) - μŠ€ν† λ¦¬λ³΄λ“œ : 와이어 ν”„λ ˆμž„μ—μ„œ μ½˜ν…μΈ  μ„€λͺ…, 흐름도 μΆ”κ°€ - ν”„λ‘œν† νƒ€μž… : 와이어 ν”„λ ˆμž„..

    [Android] MVVM νŒ¨ν„΄ 적용기 - 1

    GitHub - k906506/MVVM: πŸ”¨ MVVM이 λ­μ—μš”? πŸ”¨ MVVM이 λ­μ—μš”? Contribute to k906506/MVVM development by creating an account on GitHub. github.com μš”μ¦˜ MVVM 에 λŒ€ν•΄μ„œ κ³΅λΆ€ν•˜κ³  μžˆλ‹€. μ§€κΈˆκΉŒμ§€ μ•± κ΅¬ν˜„ν•  λ•Œ κ·Έλƒ₯ 앑티비티에 λ‹€ λ•Œλ €λ°•μ•˜μ—ˆλŠ”λ° λͺ¨λΈμ΄λž‘ λ·°κ°€ λ„ˆλ¬΄ κ°•ν•˜κ²Œ κ²°ν•©λ˜μ–΄ μžˆλŠ” λŠλ‚Œμ΄ κ°•ν–ˆλ‹€. λ˜ν•œ λŒ€λΆ€λΆ„μ˜ λ‘œμ§μ„ λ·°(μ•‘ν‹°λΉ„ν‹°)μ—μ„œ μ²˜λ¦¬ν•˜κ³  ν•˜κ³  μžˆμ—ˆκ³  μž¬μ‚¬μš©μ„±μ΄ 맀우 λ–¨μ–΄μ‘Œμ—ˆλ‹€. μ‹€μ œλ‘œ κ²¨μšΈλ°©ν•™μ— μ§„ν–‰ν–ˆλ˜ κΈ€λ‘œλ²ŒμΈμž¬νŠΈλž™ λ•Œ μ–΄ν”Œ 을 ν•˜λ‚˜ λ§Œλ“€μ—ˆκ³  λ‚˜λ¦„ λΆ„λ¦¬ν•œλ‹€κ³  λΆ„λ¦¬ν–ˆλŠ”λ° μ§„μ§œ μž¬μ‚¬μš©μ„±μ΄ 0 μ΄μ—ˆλ‹€. MVC κ°€ κ΅¬ν˜„ν•˜κΈ°λŠ” 정말 νŽΈν–ˆμ§€λ§Œ 이 κΈ°νšŒμ— νŒ¨ν„΄ 곡뢀도 ν• κ²Έ MVVM 을 μ ‘ν•˜κ²Œ λ˜μ—ˆλ‹€. λ¬Όλ‘  MVC ..

    [Error] Failed to call observer method

    였λ₯˜ λ°œμƒ Databinding + ViewModel + LiveData 둜 κ°„λ‹¨ν•œ MVVM 예제λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ Databinding 으둜 ν‘œν˜„ν•  λ³€μˆ˜(?)λ₯Ό layout μ•ˆμ— λΈ”λŸ­μ— λ„£μ–΄μ€¬λ”λ‹ˆ λ°œμƒν•œ 였λ₯˜ 였λ₯˜ λ‚΄μš© ν•΄κ²° String 으둜 λ³€ν™˜ν•˜μ§€ μ•Šμ•„μ„œ λ°œμƒν•œ 문제... γ…‹γ…‹γ…‹γ…‹γ…‹... toString() 을 ν•΄μ€¬λ”λ‹ˆ μ •μƒμ μœΌλ‘œ μž‘λ™ν–ˆλ‹€. μ°Έκ³  MVVM 예제 StackOverFlow