728x90
λ°˜μ‘ν˜•

Java 6

[MSA κ΅¬μΆ•ν•˜κΈ°] 1. λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μƒμ„±ν•˜κΈ°

πŸ”Š μš°λ¦¬λŠ” Spring Cloudλ₯Ό ν™œμš©ν•˜μ—¬ MSAλ₯Ό κ΅¬μΆ•ν•œλ‹€. πŸ”Š μ΄λ²ˆμ—λŠ”, λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό 생성할 것이닀. λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” user, beverage, community 3개의 μ„œλΉ„μŠ€λ‘œ κ΅¬μ„±ν•œλ‹€. user-service beverage-service community-service ⭐ μ›Ή ν”„λ‘œμ νŠΈλ₯Ό 생성할 λ•Œ ν•„μš”ν•œ μ˜μ‘΄μ„±μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž. 1. Lombok lombok 은 Java 라이브러리 쀑 ν•˜λ‚˜λ‘œ Java 개발 μ‹œμ— 반볡적으둜 κ΅¬ν˜„λ˜λŠ” getter, setter, toString 등을 μžλ™μœΌλ‘œ 생성해 μ£Όμ–΄ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ μœ μ§€ν•˜κ³  생산성을 λ†’μ—¬μ£ΌλŠ” λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ‹€. μ–΄λ…Έν…Œμ΄μ…˜μ„ 기반으둜 λ™μž‘ν•˜λ©°, ν΄λž˜μŠ€μ— μ–΄λ…Έν…Œμ΄μ…˜μ„ μΆ”κ°€ν•˜μ—¬ 컴파일 κ³Όμ •μ—μ„œ μ‹€μ œ κΈ°λŠ₯이 μƒμ„±λ˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€. 즉, μ†ŒμŠ€μ½”..

[μ•Œκ³ λ¦¬μ¦˜] 크루슀칼 μ•Œκ³ λ¦¬μ¦˜ (Kruskal Algorithm)

μ‹ μž₯ 트리 (Spanning Tree) κ·Έλž˜ν”„μ—μ„œ λͺ¨λ“  λ…Έλ“œλ₯Ό ν¬ν•¨ν•˜λ©΄μ„œ 사이클이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” λΆ€λΆ„ κ·Έλž˜ν”„λ₯Ό μ˜λ―Έν•œλ‹€. λͺ¨λ“  λ…Έλ“œκ°€ ν¬ν•¨λ˜μ–΄ μ„œλ‘œ μ—°κ²°λ˜λ©΄μ„œ 사이클이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 쑰건은 트리의 쑰건이기도 ν•˜λ‹€. μ‹ μž₯ 트리 μ‚¬μš© λͺ©μ  λͺ¨λ“  λ…Έλ“œκ°€ μ—°κ²°λ˜μ–΄ μžˆμ§€λ§Œ 일뢀 간선을 μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€λŠ” μ μ—μ„œ μ‹€μ œ 문제 μƒν™©μ—μ„œ 효과적으둜 μ‚¬μš©λ  수 μžˆλ‹€. μ΅œμ†Œ μ‹ μž₯ 트리 (MST, Minimum Spanning Tree) μ΅œμ†Œν•œμ˜ λΉ„μš©μœΌλ‘œ κ΅¬μ„±λ˜λŠ” μ‹ μž₯ 트리λ₯Ό μ°Ύμ•„μ•Ό ν•  λ•Œ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒμš”? 예λ₯Ό λ“€μ–΄ N개의 λ„μ‹œκ°€ μ‘΄μž¬ν•˜λŠ” μƒν™©μ—μ„œ 두 λ„μ‹œ 사이에 λ„λ‘œλ₯Ό 놓아 전체 λ„μ‹œκ°€ μ„œλ‘œ 연결될 수 있게 λ„λ‘œλ₯Ό μ„€μΉ˜ν•˜λŠ” 경우λ₯Ό 생각해 λ΄…μ‹œλ‹€. 두 λ„μ‹œ A, Bλ₯Ό μ„ νƒν–ˆμ„ λ•Œ Aμ—μ„œ B둜 μ΄λ™ν•˜λŠ” κ²½λ‘œκ°€ λ°˜λ“œ..

Algorithm 2023.12.14

[μ•Œκ³ λ¦¬μ¦˜] μ„œλ‘œμ†Œ 집합 (Disjoint Sets) - 사이클 νŒλ³„

μ„œλ‘œμ†Œ 집합을 ν™œμš©ν•œ 사이클 νŒλ³„ μ„œλ‘œμ†Œ 집합은 무방ν–₯ κ·Έλž˜ν”„ λ‚΄μ—μ„œμ˜ 사이클을 νŒλ³„ν•  λ•Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 참고둜 λ°©ν–₯ κ·Έλž˜ν”„μ—μ„œμ˜ 사이클 μ—¬λΆ€λŠ” DFSλ₯Ό μ΄μš©ν•˜μ—¬ νŒλ³„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 1. 사이클 νŒλ³„ μ•Œκ³ λ¦¬μ¦˜ 각 간선을 ν•˜λ‚˜μ”© ν™•μΈν•˜λ©° 두 λ…Έλ“œμ˜ 루트 λ…Έλ“œλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 루트 λ…Έλ“œκ°€ μ„œλ‘œ λ‹€λ₯΄λ‹€λ©΄ 두 λ…Έλ“œμ— λŒ€ν•˜μ—¬ 합집합(Union) 연산을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. 루트 λ…Έλ“œκ°€ μ„œλ‘œ κ°™λ‹€λ©΄ 사이클(Cycle)이 λ°œμƒν•œ κ²ƒμž…λ‹ˆλ‹€. κ·Έλž˜ν”„μ— ν¬ν•¨λ˜μ–΄ μžˆλŠ” λͺ¨λ“  간선에 λŒ€ν•˜μ—¬ 1번 과정을 λ°˜λ³΅ν•©λ‹ˆλ‹€. 2. λ™μž‘ κ³Όμ • μ‚΄νŽ΄λ³΄κΈ° 3. μ„œλ‘œμ†Œ 집합을 ν™œμš©ν•œ 사이클 νŒλ³„ (μ½”λ“œ) 1) μ„œλ‘œμ†Œ 집합을 ν™œμš©ν•œ 사이클 νŒλ³„ (Python) # νŠΉμ • μ›μ†Œκ°€ μ†ν•œ 집합을 μ°ΎκΈ° def find_parent(parent, x): #..

Algorithm 2023.12.10

[μ•Œκ³ λ¦¬μ¦˜] μ„œλ‘œμ†Œ 집합 (Disjoint Sets) - 자료ꡬ쑰

κ·Έλž˜ν”„ κ·Έλž˜ν”„(Graph)λž€ λ…Έλ“œμ™€ λ…Έλ“œ 사이에 μ—°κ²°λœ κ°„μ„ μ˜ 정보λ₯Ό 가지고 μžˆλŠ” 자료ꡬ쑰λ₯Ό μ˜λ―Έν•œλ‹€. μ„œλ‘œμ†Œ 집합 μ„œλ‘œμ†Œ 집합(Disjoint Sets)μ΄λž€ 곡톡 μ›μ†Œκ°€ μ—†λŠ” 두 집합을 μ˜λ―Έν•œλ‹€. μ„œλ‘œμ†Œ 집합 자료ꡬ쑰 μ„œλ‘œμ†Œ λΆ€λΆ„ μ§‘ν•©λ“€λ‘œ λ‚˜λˆ„μ–΄μ§„ μ›μ†Œλ“€μ˜ 데이터λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μžλ£Œκ΅¬μ‘°μ΄λ‹€. μ„œλ‘œμ†Œ 집합 μžλ£Œκ΅¬μ‘°λŠ” 두 μ’…λ₯˜μ˜ 연산을 μ§€μ›ν•œλ‹€. 합집합(Union): 두 개의 μ›μ†Œκ°€ ν¬ν•¨λœ 집합을 ν•˜λ‚˜μ˜ μ§‘ν•©μœΌλ‘œ ν•©μΉ˜λŠ” 연산이닀. μ°ΎκΈ°(Find): νŠΉμ •ν•œ μ›μ†Œκ°€ μ†ν•œ 집합이 μ–΄λ–€ 집합인지 μ•Œλ €μ£ΌλŠ” 연산이닀. μ„œλ‘œμ†Œ 집합 μžλ£Œκ΅¬μ‘°λŠ” ν•©μΉ˜κΈ° μ°ΎκΈ°(Union Find) 자료ꡬ쑰라고 λΆˆλ¦¬κΈ°λ„ ν•œλ‹€. 1. μ—¬λŸ¬ 개의 ν•©μΉ˜κΈ° 연산이 μ£Όμ–΄μ‘Œμ„ λ•Œ μ„œλ‘œμ†Œ 집합 자료ꡬ쑰의 λ™μž‘ κ³Όμ • 합집합(Union) 연산을 ν™•μΈν•˜μ—¬,..

Algorithm 2023.12.09

[μžλ°”] μΆ”μƒν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 차이

μΆ”μƒν΄λž˜μŠ€ 좔상 λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•˜μ—¬ 상속을 ν†΅ν•΄μ„œ μžμ† ν΄λž˜μŠ€μ—μ„œ μ™„μ„±ν•˜λ„λ‘ μœ λ„ν•˜λŠ” ν΄λž˜μŠ€μ΄λ‹€. μ΄λŸ¬ν•œ νŠΉμ„± λ•Œλ¬Έμ— λ―Έμ™„μ„± 섀계도라고 ν‘œν˜„ν•œλ‹€. μΆ”μƒν΄λž˜μŠ€λŠ” 상속을 μœ„ν•œ 클래슀이기 λ•Œλ¬Έμ— λ”°λ‘œ 객체(μΈμŠ€ν„΄μŠ€)λ₯Ό 생성할 수 μ—†λ‹€. 상속을 ν†΅ν•΄μ„œ μžμ†ν΄λž˜μŠ€μ— μ˜ν•΄μ„œλ§Œ 완성될 수 μžˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” 좔상 λ©”μ†Œλ“œλ₯Ό 0개 이상 가지고 μžˆλ‹€λŠ” 것을 μ œμ™Έν•˜κ³ λŠ” 일반 ν΄λž˜μŠ€μ™€ 별 λ‹€λ₯Ό 것이 μ—†λ‹€. class μ•žμ— "abstract" μ˜ˆμ•½μ–΄λ₯Ό λΆ™μ—¬ ν•΄λ‹Ή ν΄λž˜μŠ€κ°€ 좔상 ν΄λž˜μŠ€μž„μ„ λ‚˜νƒ€λ‚Έλ‹€. λ˜ν•œ λ©”μ„œλ“œλ„ "abstract" μ˜ˆμ•½μ–΄λ₯Ό λΆ™μ—¬ 좔상 λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•  수 μžˆλ‹€. abstract class ν΄λž˜μŠ€μ΄λ¦„ { ... public abstract void λ©”μ„œλ“œμ΄λ¦„(); }​ μΆ”μƒν΄λž˜μŠ€μ˜ νŠΉμ§• 좔상 ν΄λž˜μŠ€λŠ” 좔상 λ©”μ„œλ“œλ₯Ό..

Programming/Java 2023.07.13

[μžλ°”] μ˜€λ²„λ‘œλ”©(Overloading)κ³Ό μ˜€λ²„λΌμ΄λ”©(Overriding)의 차이점

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ‹€ν˜•μ„±μ„ μ„€λͺ…ν•  λ•Œ, ν•˜λ‚˜μ˜ 클래슀 내뢀에 같은 μ΄λ¦„μ˜ κΈ°λŠ₯을 μ—¬λŸ¬ 개 μ •μ˜ν•˜κ±°λ‚˜ μƒμœ„ 클래슀의 κΈ°λŠ₯을 ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ λ‹€μ‹œ μ •μ˜ν•˜λŠ” 것, 즉, μ˜€λ²„λΌμ΄λ”©κ³Ό μ˜€λ²„λ‘œλ”©μ— λŒ€ν•΄μ„œ κ°„λž΅ν•˜κ²Œ 짚고 λ„˜μ–΄κ°”μ—ˆλ‹€. μ΄λ²ˆμ—λŠ” μ˜€λ²„λΌμ΄λ”©κ³Ό μ˜€λ²„λ‘œλ”©μ΄ ꡬ체적으둜 μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€. 또, μ–΄λ–€ 차이점을 가지고 μžˆλŠ”μ§€μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž. λ‹€ν˜•μ„± λ‹€ν˜•μ„±μ΄λž€, ν•˜λ‚˜μ˜ λ©”μ†Œλ“œλ‚˜ ν΄λž˜μŠ€κ°€ μžˆμ„ λ•Œ 이것듀이 λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ λ™μž‘ν•˜λŠ” 것을 λ§ν•œλ‹€. μžλ°”μ—μ„œλŠ” 주둜 μ˜€λ²„λ‘œλ”©(Overloading)κ³Ό μ˜€λ²„λΌμ΄λ”©(Overriding)을 ν†΅ν•΄μ„œ λ‹€ν˜•μ„±μ„ μ§€μ›ν•œλ‹€. μ˜€λ²„λ‘œλ”©(Overloading) - ν™•μž₯ ν•˜λ‚˜μ˜ 클래슀 λ‚΄λΆ€μ—μ„œ ν™•μž₯ν•˜λŠ” κ°œλ… μ˜€λ²„λΌμ΄λ”©(Overriding) - μž¬μ •μ˜ λΆ€λͺ¨ 클래슀의 상속을 받은 μžμ‹ 클래..

Programming/Java 2023.07.09
728x90
λ°˜μ‘ν˜•