πŸ’» 개발/Kotlin 4

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

κ°€λ³€μ„± λ³€ν•  수 μžˆλ‹€? 가변성이 λ­μ—μš”? πŸ™„ μ½”ν‹€λ¦° μ—μ„œμ˜ 가변성은 ν˜•μ‹ λ§€κ°œλ³€μˆ˜κ°€ 클래슀 계측에 영ν–₯을 μ£ΌλŠ” 것을 λ§ν•œλ‹€. 예λ₯Ό λ“€μ–΄ ν˜•μ‹ 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 } ..