λͺ©λ‘πŸ“– (25)

DevLog 😢

[객체지ν–₯μ˜μ‚¬μ‹€κ³Όμ˜€ν•΄] 03 - νƒ€μž…κ³Ό 좔상화

βœ”οΈ 좔상화 🌱 μΆ”μƒν™”λž€, λͺ…ν™•ν•˜κ²Œ μ΄ν•΄ν•˜κΈ° μœ„ν•΄ νŠΉμ • μ ˆμ°¨λ‚˜ 물체λ₯Ό μ˜λ„μ μœΌλ‘œ μƒλž΅ν•˜κ±°λ‚˜ 감좀으둜 λ³΅μž‘λ„λ₯Ό κ·Ήλ³΅ν•˜λŠ” 방법이닀. λ³΅μž‘μ„±μ„ μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ μˆ˜μ€€μœΌλ‘œ λ‹¨μˆœν™”ν•˜λŠ” 것이 λͺ©μ μ΄λ‹€. μ§€λ‚œ ν¬μŠ€νŒ…λΆ€ν„° 계속 μ–˜κΈ°ν•˜κ³  μžˆλŠ” '고양이 μŠ€λ‚΅λ°”'λΌλŠ” κ²Œμž„μ΄λ‹€. μœ„ μ΄λ―Έμ§€λŠ” μ‹€μ œλ‘œ κ²Œμž„μ„ ν”Œλ ˆμ΄ν•˜λŠ” μž₯면이닀. μœ„ κ·Έλ¦Όμ—μ„œ 무엇이 λ³΄μ΄λŠ”κ°€? 각각 μ†λ‹˜λƒ₯, μ•Œλ°”λƒ₯, μ…°ν”„λƒ₯이라고 λͺ…ν™•ν•˜κ²Œ μ‘΄μž¬ν•œλ‹€. κ·ΈλŸ¬λ‚˜, μ†λ‹˜λƒ₯도, μ•Œλ°”λƒ₯도, μ…°ν”„λƒ₯도 λͺ¨λ‘ 고양이닀. 그리고 λ™μ‹œμ— 객체라고 λ³Ό 수 μžˆλ‹€. 이와 같이 각각의 객체듀을 ‘고양이’라고 ν•œ λ²ˆμ— μ •μ˜λ‚΄λ¦¬λŠ” 것을 '좔상화'라고 ν•œλ‹€. κ³ μ–‘μ΄λŠ”, 곡톡점을 가진 객체듀을 포괄할 수 μžˆλŠ” κ°œλ…μ΄ λœλ‹€. 그리고, μ΄λŸ¬ν•œ ‘고양이’λΌλŠ” κ°œλ…μ„ μ μš©ν•˜μ—¬ λ‹€μ‹œ μ†λ‹˜λƒ₯, μ•Œλ°”λƒ₯, μ…°ν”„λƒ₯으..

[λͺ¨λ˜μžλ°”μΈμ•‘μ…˜] μŠ€νŠΈλ¦Όμ΄λž€ λ¬΄μ—‡μΌκΉŒ?

πŸ’¬ λͺ¨λ˜ μžλ°” 인 μ•‘μ…˜ 챕터 4을 읽고 μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. βœ”οΈ μŠ€νŠΈλ¦Όμ΄λž€? μžλ°” 8에 μƒˆλ‘­κ²Œ λ“€μ–΄μ˜¨ κΈ°λŠ₯ 쀑, κ°€μž₯ 핡심적인 κΈ°λŠ₯이라고 말해도 λ¬΄λ°©ν•˜λ‹€. μ»¬λ ‰μ…˜ λ°μ΄ν„°μ˜ λ°˜λ³΅μ„ 도와주고, λ©€ν‹° μŠ€λ ˆλ“œ μ½”λ“œ 없이 병렬성을 κ΅¬ν˜„ν•  수 μžˆλŠ” μ•„μ£Ό μœ μš©ν•œ μΉœκ΅¬μ΄λ‹€. λ˜ν•œ, filterλ‚˜ sorted, map, collect 같은 연산은 ‘high-level building block’이라고 ν•˜λŠ”λ°, μŠ€νŠΈλ¦Όμ„ 마치 λΈ”λ‘μ²˜λŸΌ μŒ“κ³ , 쑰립할 수 μžˆλ‹€λŠ” 점이 큰 νŠΉμ§•μ΄λ‹€. βœ”οΈ stream λ©”μ„œλ“œ 🌱 μŠ€νŠΈλ¦Όμ΄λž€, 데이터 처리 연산을 μœ„ν•΄ μ†ŒμŠ€μ—μ„œ μΆ”μΆœλœ μ—°μ†λœ μš”μ†Œμ΄λ‹€. 1) μ—°μ†λœ μš”μ†Œ μ»¬λ ‰μ…˜μ€ 데이터에 λŒ€ν•œ μžλ£Œκ΅¬μ‘°μ˜€λ‹€λ©΄, μŠ€νŠΈλ¦Όμ€ 이λ₯Ό μ–΄λ–€ μ‹μœΌλ‘œ 계산할지에 λŒ€ν•΄ 닀룬닀. 두 가지 λͺ¨λ‘, μ—°μ†λœ κ°’ μ§‘ν•©μ˜ μΈν„°νŽ˜..

πŸ“–/Modern Java in Action 2023. 4. 7. 11:49
[객체지ν–₯μ˜μ‚¬μ‹€κ³Όμ˜€ν•΄] 02 - μ΄μƒν•œ λ‚˜λΌμ˜ 객체

🌱 λ“€μ–΄κ°€κΈ° μ „ λ³Έ μ±…μ—μ„œλŠ” μ΄μƒν•œ λ‚˜λΌμ˜ μ•¨λ¦¬μŠ€ 이야기와 객체의 κ°œλ…μ„ μ ‘λͺ©μ‹œμΌœ μ„€λͺ…ν•œλ‹€. μ•¨λ¦¬μŠ€λ„ 쒋은 μ˜ˆμ œμ§€λ§Œ, μ§€λ‚œ μ‹œκ°„μ— μ†Œκ°œν–ˆλ˜ "고양이 μŠ€λ‚΅λ°”" κ²Œμž„μ— λ§žμΆ°μ„œ 이번 챕터도 ν’€μ–΄λ‚˜κ°ˆ μ˜ˆμ •μ΄λ‹€. βœ”οΈ 객체의 행동과 μƒνƒœ 고양이 μŠ€λ‚΅λ°” κ²Œμž„μ—μ„œ, 각각의 λƒ₯λƒ₯이듀은 μ½”μŠ€νŠ¬μ„ μž…μ„ 수 μžˆλ‹€. 그리고 μ–΄λ–€ μ½”μŠ€νŠ¬μ„ μž…λŠ”μ§€μ— λ”°λΌμ„œ 얻을 수 μžˆλŠ” νš¨κ³Όκ°€ 달라진닀. λ§Œμ•½, μ•Œλ°”λƒ₯이 μ–΄ν₯ 슈트λ₯Ό μž…μ—ˆλ‹€κ³  μƒκ°ν•΄λ³΄μž. μ•Œλ°”λƒ₯은 μ–΄ν₯ 슈트λ₯Ό μž…μŒμœΌλ‘œμ„œ 생산속도가 μ¦κ°€ν•˜κ²Œ λœλ‹€. μ•Œλ°”λƒ₯의 κΈ°μ‘΄ 생산 μ†λ„λŠ” 10이라고 κ°€μ •ν–ˆμ„ λ•Œ, μ–΄ν₯ 슈트λ₯Ό μž…μœΌλ©΄ 생산 속도가 20이 λ˜λŠ” 것이닀. 이런 μ‹μœΌλ‘œ μ•Œλ°”λƒ₯의 생산 μ†λ„λŠ” μ–΄λ–€ μ½”μŠ€νŠ¬μ„ μž…λŠλƒμ— λ”°λΌμ„œ 달라진닀. = 즉, μ•Œλ°”λƒ₯이 μ–΄λ–€ 행동을 ν•˜λŠ”μ§€μ— λ”°λΌμ„œ μ•Œλ°”λƒ₯의 ..

[μ΄νŒ©ν‹°λΈŒμžλ°”] μ•„μ΄ν…œ 04. μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ§‰μœΌλ €λ©΄ private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λΌ

πŸ’¬ μ΄νŒ©ν‹°λΈŒμžλ°” μ•„μ΄ν…œ 4을 읽고 μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. βœ”οΈ μœ ν‹Έλ¦¬ν‹° 클래슀 μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ™€ λ³€μˆ˜κ°€ 없이, 정적 λ©”μ„œλ“œμ™€ 정적 λ³€μˆ˜λ§Œ μ œκ³΅ν•˜λŠ” 클래슀λ₯Ό μ˜λ―Έν•œλ‹€. 개인적인 μ˜κ²¬μ΄μ§€λ§Œ, μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λŠ” 객체지ν–₯적 κ΄€μ μ—μ„œ 봀을 λ•Œ μ’‹λ‹€κ³ λŠ” 보기 νž˜λ“€ 것 κ°™λ‹€. μžλ°”μ—μ„œ μ œκ³΅ν•˜λŠ” μœ ν‹Έλ¦¬ν‹° 클래슀 쀑에 λŒ€ν‘œμ μΈ 것듀을 λͺ‡ 가지 μ‚΄νŽ΄λ³΄μž. public class Arrays { private Arrays() {} ... } μœ„ μ½”λ“œλŠ” java.util에 μ‘΄μž¬ν•˜λŠ” Arrays ν΄λž˜μŠ€μ΄λ‹€. 이 ν΄λž˜μŠ€λŠ” 배열을 μ‘°μž‘ν•˜κΈ° μœ„ν•΄ μ •λ ¬μ΄λ‚˜ 검색 등을 ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ 정적 λ©”μ„œλ“œλ“€μ„ μ œκ³΅ν•œλ‹€. (λŒ€λΆ€λΆ„μ˜ λ©”μ„œλ“œλŠ” μ˜€λ²„λ‘œλ”©λ˜μ–΄ μžˆμ–΄μ„œ μ‹€μ œλ‘œ ν•˜λŠ” 역할은 검색, 볡사, μ±„μš°κΈ°, μ •λ ¬... 등등이 μžˆλ‹€) μœ ν‹Έλ¦¬ν‹° 클래슀둜 사..

πŸ“–/Effective Java 2023. 4. 6. 12:08
[객체지ν–₯μ˜μ‚¬μ‹€κ³Όμ˜€ν•΄] 01 - ν˜‘λ ₯ν•˜λŠ” κ°μ²΄λ“€μ˜ 곡동체

🌱 λ“€μ–΄κ°€κΈ° μ „ κ°μ‚¬μ˜€, 일λͺ… 토끼책이라고 λΆˆλ¦¬λŠ” 책이닀. 레벨 1이 λλ‚˜κΈ° 전에 읽고 μ‹Άμ—ˆλŠ”λ° 그러질 λͺ»ν•΄μ„œ λ°©ν•™ κΈ°κ°„ λ™μ•ˆ κ°„λ‹¨ν•˜κ²Œ 읽고 μ •λ¦¬ν•΄λ³΄μ•˜λ‹€. 객체지ν–₯에 λŒ€ν•΄ κ³΅λΆ€ν•˜κΈ° μ „μ—λŠ” ‘λ‚΄κ°€ μ™œ 객체지ν–₯적으둜 μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜μ§€…? μ™œ μΊ‘μŠν™” 이런 κ±Έ μ§€μΌœμ•Ό ν•˜μ§€?’λΌλŠ” 생각을 많이 ν–ˆμ—ˆλŠ”λ°, 객체지ν–₯적 섀계가 μ™œ μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ μ¦κ°€μ‹œν‚€λŠ”μ§€, μ–΄λ–€ μΈ‘λ©΄μ—μ„œ 쒋은지 λ‚΄ λ‚˜λ¦„λŒ€λ‘œ λ¨Έλ¦Ώμ†μ—μ„œ μ •μ˜κ°€ λ˜λŠ” 것 κ°™μ•„μ„œ μž¬λ°Œλ‹€. μžλ°” κ°œλ°œμžλ‘œμ„œ λͺ¨λ“  μ„€κ³„μ˜ 기본은 객체지ν–₯에 λŒ€ν•œ 이해가 μ•„λ‹κΉŒ… λΌλŠ” 생각이 λ“€μ—ˆλ‹€! 각 μž₯에 λŒ€ν•΄μ„œ λ‚΄ λ‚˜λ¦„μ˜ 견해λ₯Ό λ‹΄μ•„ μ •λ¦¬ν•΄λ³΄κ³ μž ν•œλ‹€. βœ”οΈ ν˜‘λ ₯ 관계 ν”νžˆ 객체지ν–₯ 세계λ₯Ό 말할 λ•Œ 싀세계λ₯Ό λͺ¨λ°©ν•˜κΈ° μœ„ν•¨μ΄λΌκ³  λ§Žμ΄λ“€ λ‹΅ν•œλ‹€. (λ‚˜ μ—­μ‹œ 이 책을 읽기 전에 κ·Έλž¬λ‹€) ..

[μ΄νŒ©ν‹°λΈŒμžλ°”] μ•„μ΄ν…œ 03. private μƒμ„±μžλ‚˜ μ—΄κ±° νƒ€μž…μœΌλ‘œ μ‹±κΈ€ν„΄μž„μ„ λ³΄μ¦ν•˜λΌ

πŸ’¬ μ΄νŒ©ν‹°λΈŒμžλ°” μ•„μ΄ν…œ 3을 읽고 μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. βœ”οΈ μ‹±κΈ€ν„΄ μΈμŠ€ν„΄μŠ€ μΈμŠ€ν„΄μŠ€λ₯Ό 였직 ν•˜λ‚˜λ§Œ 생성할 수 μžˆλŠ” 클래슀. λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό 쀄일 수 있고, 데이터λ₯Ό κ³΅μœ ν•  수 μžˆλ‹€. λ‹€λ§Œ, 결합도가 μ¦κ°€ν•˜λ©° ν΄λΌμ΄μ–ΈνŠΈμ˜ ν…ŒμŠ€νŠΈκ°€ μ–΄λ €μ›Œμ§ˆ 수 μžˆλ‹€λŠ” 점이 μ‘΄μž¬ν•œλ‹€. -> μΈμŠ€ν„΄μŠ€λ₯Ό κ΅¬ν˜„ν•΄μ„œ λ§Œλ“  싱글턴이 μ•„λ‹ˆλΌλ©΄, μ‹±κΈ€ν„΄ μΈμŠ€ν„΄μŠ€λ₯Ό mock 객체둜 λŒ€μ²΄ν•˜κΈ°κ°€ νž˜λ“€κΈ° λ•Œλ¬Έμ΄λ‹€. πŸ’¬ μƒμ„±ν•˜λŠ” 방법 1. μƒμ„±μžλ₯Ό λͺ¨λ‘ private둜 λ§Œλ“€κ³ , μΈμŠ€ν„΄μŠ€μ˜ μœ μΌν•œ μ ‘κ·Όμžλ₯Ό public static으둜 μƒμ„±ν•˜κΈ° public class Crew { public static final Crew INSTANCE = new Crew(); private Crew() { ... } public void hello() {...} }..

πŸ“–/Effective Java 2023. 4. 4. 23:29
[μ΄νŒ©ν‹°λΈŒμžλ°”] μ•„μ΄ν…œ 02. μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ

πŸ’¬ μ΄νŒ©ν‹°λΈŒμžλ°” μ•„μ΄ν…œ 2을 읽고 μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. βœ”οΈ ν΄λž˜μŠ€μ— 멀버 λ³€μˆ˜κ°€ λ§Žμ„ 경우, 객체λ₯Ό μ–΄λ–»κ²Œ 생성할 수 μžˆμ„κΉŒ? - μƒμ„±μžλ₯Ό μ—¬λŸ¬ μ’…λ₯˜λ‘œ λ‘μ–΄μ„œ, ν•„μš”ν•œ λ§€κ°œλ³€μˆ˜λ§Œμ„ μ‚¬μš©ν•˜λŠ” μƒμ„±μž μ—¬λŸ¬ 개λ₯Ό λ§Œλ“€ 수 μžˆλ‹€ - κ·ΈλŸ¬λ‚˜, 이 방법은 ν•„λ“œκ°€ λŠ˜μ–΄λ‚˜λ©΄ 그만큼 관리해야 ν•˜λŠ” μƒμ„±μžκ°€ λ§Žμ•„μ§€κΈ° λ•Œλ¬Έμ— 쒋지 μ•Šλ‹€. - λ˜ν•œ, λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬ν•˜λ©΄ (μΈν…”λ¦¬μ œμ΄μ˜ νŒŒλΌλ―Έν„° 힌트λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 이상) 각 κ°’μ˜ 의미λ₯Ό ν•œλˆˆμ— μ•Œμ•„λ³΄κΈ°κ°€ νž˜λ“€κ³ , 버그가 λ°œμƒν•  ν™•λ₯ μ΄ λ†’μ•„μ§ˆ 수 μžˆλ‹€. public class Crew { private String name; private int age; private String course; private String nickname; } μ˜ˆμ‹œλ‘œ, 크루에 λŒ€ν•œ 정보λ₯Ό λ‚˜νƒ€λ‚΄λŠ”..

πŸ“–/Effective Java 2023. 4. 3. 19:54
[μ΄νŒ©ν‹°λΈŒμžλ°”] μ•„μ΄ν…œ 78. 곡유 쀑인 κ°€λ³€ λ°μ΄ν„°λŠ” 동기화해 μ‚¬μš©ν•˜λΌ (1)

πŸ’¬ μ΄νŒ©ν‹°λΈŒμžλ°” μ•„μ΄ν…œ 78을 읽고 μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. 이번 μ •λ¦¬λŠ” μ±…κ³ΌλŠ” λ‹€μ†Œ λ‹€λ₯Έ λ‚΄μš©μž…λ‹ˆλ‹€ :D κ°œλ… μžμ²΄κ°€ μ–΄λ €μš΄ λΆ€λΆ„μ΄μ–΄μ„œ 책을 읽으며 κΆκΈˆν•œ 뢀뢄에 λŒ€ν•΄ μ‘°μ‚¬ν•˜λŠ” μ‹μœΌλ‘œ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ πŸ™‡‍♀️ 두 편으둜 λ‚˜λˆ„μ–΄μ„œ ν¬μŠ€νŒ… ν•  μ˜ˆμ •μž…λ‹ˆλ‹€! 아직 λ―Έν‘ν•œ 점이 λ§Žμ•„μ„œ, 더 μ •ν™•ν•œ 정보λ₯Ό μ•Œκ²Œ 되면 λ³Έ κ²Œμ‹œκΈ€μ„ μˆ˜μ •ν•  μ˜ˆμ •μž…λ‹ˆλ‹€. βœ”οΈ λ™κΈ°ν™”λž€ λ¬΄μ—‡μΌκΉŒ? ν˜„μž¬ μž”μ•‘μ΄ 10000원이고, 각각 1000원씩 μž…κΈˆν•˜λŠ” ν–‰μœ„λ₯Ό 5000번, 1000원씩 μΆœκΈˆν•˜λŠ” ν–‰μœ„λ₯Ό 5000번 λ°˜λ³΅ν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž. λ™μΌν•œ κΈˆμ•‘μ— λŒ€ν•΄ λ™μΌν•œ 횟수둜 5000λ²ˆμ”© μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έμ—, 우리의 μž”μ•‘μ—λŠ” λ³€ν™”κ°€ μ—†λ‹€κ³  생각할 수 μžˆλ‹€. [synchronized ν‚€μ›Œλ“œ 뢙이기 μ „] public class Main { public stati..

πŸ“–/Effective Java 2023. 3. 26. 21:24