TIL - 221109

MeteorLeeΒ·2022λ…„ 11μ›” 10일
0

TIL

λͺ©λ‘ 보기
10/40
post-thumbnail

πŸ“… 였늘 ν•œ 일

✍🏻 μžλ°”μ˜ λ‹€μ–‘ν•œ κΈ°λŠ₯λ“€

πŸ“š 였늘 κ³΅λΆ€ν•œ λ‚΄μš©


πŸ“‹ λ‚΄λΆ€ 클래슀(Inner Class)

πŸ“„ λ‚΄λΆ€ν΄λž˜μŠ€

  • μ—¬λŸ¬ λ‚΄λΆ€ ν΄λž˜μŠ€μ— λŒ€ν•΄μ„œ κ³΅λΆ€ν–ˆλ‹€. 일단 클래슀 μ•ˆμ˜ 클래슀λ₯Ό μƒμ„±ν•˜λŠ” 것이 μ‹ κΈ°ν–ˆλŠ”λ° ꡳ이? λΌλŠ” 생각도 ν•˜κΈ΄ ν–ˆλŠ”λ° μ™Όμͺ½ ν”„λ‘œμ νŠΈμ— 클래슀 갯수λ₯Ό ν™•μ‹€ν•˜κ²Œ 쀄여쀄 수 있고 λ³΄μ•ˆμ— μ’‹λ‹€κ³  ν•˜λ‹ˆ 고개λ₯Ό λ„λ•μ΄κ²Œ 됬닀. λ¬Όλ‘  ν™œμš©λ²•μ— λŒ€ν•΄μ„œλŠ” λ§Žμ€ 생각이 ν•„μš” ν•  것 κ°™λ‹€.

πŸ“„ 지역 λ‚΄λΆ€ 클래슀(Local Inner Class)

  • λ©”μ„œλ“œ λ‚΄μ—μ„œ 생성 λ˜λŠ” 클래슀둜 μ²˜μŒμ—λŠ” λ©”μ„œλ“œμ•ˆμ— μžˆλŠ” μ™ΈλΆ€ λ³€μˆ˜μ™€ 맀개 λ³€μˆ˜κ°€ μ™œ final둜 μ„ μ–Έλ˜μ•Ό ν•˜λŠ” 건지 이해가 μ•ˆλ¬λ‹€. λ©”μ„œλ“œμ˜ λ°˜ν™˜κ°’μ„ λ‚΄λΆ€ 클래슀둜 λ°›μ•„ μƒμ„±ν•˜κ³  λ‚΄λΆ€ 클래슀의 λ‚΄λΆ€ λ©”μ„œλ“œλ₯Ό μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ 상관없이 μ‚¬μš©ν•  λ•Œ μ™ΈλΆ€ 클래슀의 맀개 λ³€μˆ˜λ‚˜ μ™ΈλΆ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€κ³ λ§Œ μƒκ°ν–ˆκΈ° λ•Œλ¬Έμ΄μ˜€λ‹€. μ™œλƒν•˜λ©΄ λ©”μ„œλ“œλŠ” κ²°κ΅­ stackλ©”λͺ¨λ¦¬μ— 작히고 κ·Έ μ•ˆμ˜ 둜컬 λ³€μˆ˜λ“€λ„ stackμ•ˆμ— 작히게 되기 λ•Œλ¬ΈμΈλ° 그에 λ°˜ν•΄ λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” κ²°κ΅­ 클래슀 μ΄λ―€λ‘œ μƒμ„±λœ μΈμŠ€ν„΄μŠ€κ°€ heap에 작히고 이에따라 i와 numλ˜ν•œ heap에 작히게 λ˜λŠ” 것이닀. λ¬Όλ‘  μ΄λ ‡κ²Œ μƒμ„±λœ i와 num은 μˆ˜μ •μ΄ λΆˆκ°€λŠ₯ ν•˜κ²Œ 바뀐닀.

πŸ“„ 읡λͺ… λ‚΄λΆ€ 클래슀 (Anonymous Inner Class)

  • κ°€μž₯ 많이 μ‚¬μš©λœλ‹€κ³  ν•˜λŠ” 읡λͺ… ν•¨μˆ˜μ΄λ‹€. μœ„μ˜ ν΄λž˜μŠ€λ“€μ—μ„œλ„ ꡳ이 μ“Έ ν•„μš”κ°€ μ—†λŠ” ν΄λž˜μŠ€λ“€μ„ μƒλž΅ν•˜κ³  μž‘μ„±ν•˜λŠ”κ²Œ κ°€λŠ₯ν•˜λ‹€κ³  ν•˜λŠ”λ°, μ§€κΈˆμ˜ λ‚˜ν•œν…ŒλŠ” 였히렀 독인 것 κ°™λ‹€. μ—†μœΌλ©΄ ν—ˆμ „ν•΄...

  • 일단, 생긴 ν˜•νƒœκ°€ λ‚΄κ°€ 잘 λͺ¨λ₯΄λŠ” ꡬ쑰닀. μ§€κΈˆ λ‹Ήμž₯ μ‚¬μš©ν•˜κΈ°μ—λŠ” 무리가 μžˆλ”λΌλ„ λˆˆμ— μ΅ν˜€λ‘κ³  곡뢀할 λ•Œ ν™œμš©ν•  λ°©μ•ˆμ΄ μ—†λ‚˜ 생각해봐야 κ² λ‹€.

πŸ“‹ λžŒλ‹€μ‹

  • μžλ°” μŠ€ν¬λ¦½νŠΈμ—μ„œ 였히렀 많이 μ‚¬μš©λ˜κ³  μžλ°”μ—μ„œλŠ” μ΅μˆ™ν•˜μ§€ μ•Šμ€ ꡬ쑰닀.

πŸ“„ λžŒλ‹€μ‹

  • 일단 μ΅μˆ™ν•˜μ§€ μ•Šμ€ ꡬ쑰에 겁먹긴 ν–ˆμ§€λ§Œ κ·Έλž˜λ„ μ΅μˆ™ν•΄ 지고 λ‚˜λ‹ˆ ꡉμž₯히 νŽΈλ¦¬ν•˜λ‹€. 일단 λ©”μ„œλ“œλ₯Ό 맀번 μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” 것이 μž₯점이닀. 였히렀 λ©”μ„œλ“œλ₯Ό 많이 λ§Œλ“€μ–΄μ„œ 눈이 μ•„ν”ˆ 것 보닀 ν•œλ²ˆ μ‚¬μš©ν•  λ©”μ„œλ“œλŠ” λžŒλ‹€μ‹μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 것이 쒋은 것 κ°™λ‹€. λ¬Όλ‘  이런 λžŒλ‹€μ‹λ„ λ„ˆλ¬΄ 길게 μ“Έ κ²½μš°μ—λŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 편이 λ§žλŠ” 것 κ°™κΈ΄ ν•˜λ‹€.

  • 이전에 μ‚¬μš©ν–ˆλ˜ 읡λͺ…ν΄λž˜μŠ€μ™€ 자주 μ‚¬μš©ν•˜κ²Œ 될 μ˜ˆμ •μΈ 것 κ°™μ•„μ„œ λ‘κ°œλ₯Ό ν•©μΉœ 예제λ₯Ό 자주 풀어봐야 ν•  것 κ°™λ‹€. λ˜ν•œ λ³€μˆ˜μ²˜λŸΌ ν™œμš©λ„ κ°€λŠ₯ν•˜λ‹€κ³  ν•˜λŠ”λ° 이 뢀뢄은 얕은 이해밖에 ν•˜μ§€ λͺ»ν•΄μ„œ 아쉽닀.

πŸ“‹ 슀트림(Stream)

  • λ‚΄μš©μ΄ μƒλ‹Ήνžˆ κΈ΄ 파트이고 개인적인 μƒκ°μœΌλ‘œλŠ” Iterator와 λΉ„μŠ·ν•˜λ‹€κ³  μƒκ°ν–ˆλ‹€. μ»€μ„œμ™€ λΉ„μŠ·ν•œ κ°œλ…μœΌλ‘œ μƒκ°ν•˜κ³  μ΄ν•΄ν–ˆλ‹€.

슀트림

  • 말 κ·ΈλŒ€λ‘œ ν•˜λ‚˜μ˜ μ»€μ„œλ₯Ό μƒμ„±ν•΄μ„œ μ‚¬μš©ν•œλ‹€κ³  μƒκ°ν–ˆλ‹€. μ™œλƒν•˜λ©΄ 값을 λ³€κ²½ν•˜μ§€λ„ λͺ»ν•˜κ³  ν•œλ²ˆ μ‚¬μš©ν•œ μŠ€νŠΈλ¦Όμ€ λ‹€μ‹œ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. μ΅œμ’… μ—°μ‚° 이후 더 이상 μˆ˜ν–‰ν•˜μ§€ λͺ»ν•˜λŠ” 것도 μ»€μ„œκ°€ λκΉŒμ§€ μ΄λ™ν–ˆκΈ° λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν–ˆλ‹€.

reduce() μ—°μ‚°

  • λ‚΄κ°€ μ›ν•˜λŠ” 슀트림 연산을 μœ„ν•΄ λ§Œλ“œλŠ” λ©”μ„œλ“œμ™€ 같은 것이라고 μƒκ°ν–ˆλŠ”λ° κ½€λ‚˜ μ–΄λ €μš΄ 뢀뢄이 λ§Žμ•˜λ‹€.

    T reduce(T identify, BinaryOperator accumulator)

  • 이런 ν˜•νƒœλ‘œ 이루어져 μžˆλ‹€κ³  ν•˜λŠ”λ° ν˜•νƒœλŠ” λ‘˜μ§ΈμΉ˜κ³  μƒˆλ‘œμš΄ 클래슀λ₯Ό ν˜ΈμΆœν•΄μ„œ λ³€μˆ˜λ‘œ μ‚¬μš©ν•˜λŠ” 읡λͺ… 클래슀의 뢀뢄이 μ‚¬μš©λ˜μ—ˆλŠ”λ° 읡λͺ… 클래슀λ₯Ό μˆœκ°„ 생각λͺ»ν•΄ 많이 ν—€λ§Έλ‹€. μžλ°”μ‹μ—μ„œ λžŒλ‹€μ‹μ„ 지원할 λ•Œ 읡λͺ… ν΄λž˜μŠ€κ°€ μƒλž΅λ¬λ‹€λŠ” 점을 λͺ°λžκΈ° λ•Œλ¬Έμ΄λ‹€. λžŒλ‹€μ‹μœΌλ‘œ if else if return의 λ‹€μ–‘ν•œ ν˜•νƒœλ„ μ‚¬μš©ν•˜λ‹€κ³  μ•Œκ²Œ λ˜μ–΄μ„œ μ’‹μ•˜λ‹€.

πŸ›‘ μ–΄λ €μ› λ˜μ 


πŸ›‘ λ‚˜λŠ” 항상 heap이냐 stack이냐 μ–΄λ”” λ©”λͺ¨λ¦¬μ— μž‘νžˆλƒμ— μ§‘μ°©ν•˜λŠ” 것 κ°™λ‹€. μ΄μ œλŠ” λͺ¨λ“  κ²ƒμ˜ λ©”λͺ¨λ¦¬λ₯Ό λ‚΄κ°€ μ•„λŠ” 방법이 μ—†κ³  μ–΄λŠμ •λ„λŠ” κ°μ•ˆν•˜κ³  λ‹€μŒ 곡뢀할 λ•Œ μ°Ύμ•„μ•Ό κ² λ‹€λŠ” 생각도 λ“€κΈ° μ‹œμž‘ν–ˆλ‹€. 아직도 지역 λ‚΄λΆ€ λ³€μˆ˜μ˜ λ§€κ°œλ³€μˆ˜κ°€ μ–΄λŠ λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜λŠ”μ§€ ν™•μ‹€ν•˜κ²Œ λͺ¨λ₯΄κ² λ‹€.

πŸ›‘ 읡λͺ… ν΄λž˜μŠ€κ°€ λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ 쓰이기에 μ–΄λŠ 방식을 μ¨μ•Όν•˜κ³  μ–΄λ–€ λ•Œ μ‚¬μš©ν•΄μ•Όν• μ§€ 쑰금 μ–΄λ ΅λ‹€. μ‚¬μš©ν•˜λŠ” 것이 특히 μ–΄λ €μš΄λ° λ‚˜λŠ” 이런 방식을 μƒκ°ν•˜κΈ° νž˜λ“€ 것 같기에 κ±±μ •λœλ‹€.

πŸ›‘ λžŒλ‹€μ‹μ„ 읡λͺ…ν΄λž˜μŠ€ μƒλž΅μ΄λΌκ³  μƒκ°ν•˜κ²Œ 된 μ΄ν›„λ‘œ μ‘°κΈˆμ€ λ‚«μ§€λ§Œ κ·Έλž˜λ„ 객체지ν–₯μ—μ„œ μ‚¬μš©ν•˜λŠ” 방식이 μ•„λ‹ˆλΌμ„œ κ·ΈλŸ°μ§€ κ»„λ„λŸ½λ‹€. 리턴 λ°©μ‹μ΄λ‚˜ ; 의 μœ„μΉ˜λ“± 신경써야할 것이 λ§ŽκΈ°μ— λ‹€μŒ λ²ˆμ— μ‚¬μš©ν•  λ•Œ 찾아보고 μ‚¬μš©ν•  것 κ°™λ‹€.

βœ… μž˜ν•˜κ±°λ‚˜ κ°œμ„ ν•œμ 


βœ… μ΅œλŒ€ν•œ λ©”λͺ¨λ¦¬ κ΄€λ ¨ν•΄μ„œ 찾아보기. λͺ¨λ“  λ©”λͺ¨λ¦¬ 관련뢀뢄에 λ‚΄κ°€ μ •ν™•ν•˜κ²ŒλŠ” μ•Œ 수 μ—†κ² μ§€λ§Œ μ΅œλŒ€ν•œ νƒ€ν˜‘ν•˜μ§€ μ•Šκ³  μ•Œμ•„λ³΄λ €κ³  λ…Έλ ₯ν•˜κ³  μžˆλ‹€. 이런 행동을 λ©ˆμΆ”μ§€ 말자!!

βœ… λžŒλ‹€μ‹μ„ λ‹€μ–‘ν•˜κ²Œ λ§Œλ“€μ–΄ λ΄€λ‹€. λ¬Όλ‘  숫자 리턴값 λ“± μ‘°κΈˆμ”© λ°”κΎΈλŠ” κ±°μ§€λ§Œ κ·Έλž˜λ„ 잘 λͺ¨λ₯΄λŠ” 뢀뢄을 μ—¬λŸ¬λ²ˆ 해보고 λ‹€μŒμ— μ‚¬μš©ν•  일이 μžˆμ„ λ•Œ μ‘°κΈˆμ΄λΌλ„ μˆ˜μ›”ν•˜κ²Œ μ‚¬μš©ν•˜κΈ°μœ„ν•΄ λ…Έλ ₯ν–ˆλ‹€.

πŸ™ƒ λŠλ‚€μ 


πŸ‘Ώ μ–΄λ €μš΄ 파트만 계속 λ‚˜μ˜€λŠ” 기뢄이닀. ν•œ νŒŒνŠΈμ— ν•˜λ‚˜ μ΄μƒμ˜ 이해가 λ˜μ§€ μ•ŠλŠ” 뢀뢄이 μ‘΄μž¬ν•˜κ³  이λ₯Ό μ°Ύμ•„λ³΄λŠ” 데 μ‹œκ°„μ„ 많이 μ“°κ²Œ λœλ‹€. 10λΆ„ 짜리 κ°•μ˜κ°€ 30λΆ„ ~ 40λΆ„μ”© λŠ˜μ–΄λ‚˜κ³  μžˆλ‹€.

πŸ˜ƒ κ·Έλž˜λ„ 큰 λ§‰νž˜μ—†μ΄ κ³„μ†ν•΄μ„œ λ‚˜μ•„κ°€κ³  μžˆλ‹€. 계속 λ…Έλ ₯ν•˜μž.

πŸ€”πŸ€”πŸ€”
사싀 κ°€μž₯ 크게 μƒκ°ν•˜λŠ” 뢀뢄인데 λ©”λͺ¨λ¦¬μ™€ κ΄€λ ¨λœ λΆ€λΆ„μ΄λ‚˜ 이런 μ €λŸ° λΆ€λΆ„μ—μ„œ Cλ₯Ό μ‚¬μš©ν•˜λ©΄ μ’‹κ² λ‹€λΌλŠ” 생각이 자주 λ“ λ‹€. μ €λ²ˆμ˜ vtable도 κ·Έλ ‡κ³  λ©”λͺ¨λ¦¬μ™€ κ΄€λ ¨λœ λΆ€λΆ„μ—μ„œλŠ” 특히 더 Cλ₯Ό 톡해 이해λ₯Ό ν•œλ‹€λ©΄ μ’‹κ² λ‹€ λΌλŠ” 생각이 자주 λ“ λ‹€. λ§Œμ•½ κΈ°νšŒκ°€ λœλ‹€λ©΄ Cλ₯Ό μ΅νžˆλ©΄μ„œ λ©”λͺ¨λ¦¬ κ΄€λ ¨ 뢀뢄에 λŒ€ν•΄ κΉŠμ€ 곡뢀λ₯Ό 해보고 μ‹Άλ‹€.

profile
μ½”λ”© μ‹œμž‘

0개의 λŒ“κΈ€