λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“šμ½μ€ μ±… 정리/μžλ°” 객체지ν–₯ 원리와 이해

(7)
[μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 지ν–₯의 원리와 이해] 7μž₯ : μŠ€ν”„λ§ μ‚Όκ°ν˜•κ³Ό μ„€μ • 정보 μŠ€ν”„λ§μ„ μ΄ν•΄ν•˜λ €λ©΄ POJOλ₯Ό 기반으둜 μŠ€ν”„λ§ μ‚Όκ°ν˜•μ΄λΌλŠ” 애칭을 가진 IoC/DI, AOP, PSA라고 ν•˜λŠ” μŠ€ν”„λ§μ˜ 3λŒ€ ν”„λ‘œκ·Έλž˜λ° λͺ¨λΈμ— λŒ€ν•΄ 이해가 ν•„μˆ˜λ‹€. μŠ€ν”„λ§ μ‚Όκ°ν˜•μ„ μ΄ν•΄ν•˜λ©΄ κ·Έ μ‘°ν•©μœΌλ‘œ 이루어진 μˆ˜λ§Žμ€ λ³΅μž‘ν•œ λΆ€κ°€ ν”„λ ˆμž„μ›Œν¬λ₯Ό 이해할 수 μžˆλ‹€. μŠ€ν”„λ§ μ‚Όκ°ν˜•μ— λŒ€ν•΄μ„œ ν•œλ²ˆ μ•Œμ•„λ³΄μž. IoC/DI - μ œμ–΄μ˜ μ—­μ „/μ˜μ‘΄μ„± μ£Όμž… ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ˜μ‘΄μ„±μ΄λž€ λ¬΄μ—‡μΌκΉŒ? ex) μš΄μ „μžκ°€ μžλ™μ°¨λ₯Ό μƒμ‚°ν•œλ‹€. -> μžλ™μ°¨κ°€ λ‚΄λΆ€μ μœΌλ‘œ 타이어λ₯Ό μƒμ‚°ν•œλ‹€. (μš΄μ „μž -> μžλ™μ°¨ -> 타이어) 의쑴 -> 전체(μ˜μ‘΄ν•˜λŠ” 객체)κ°€ λΆ€λΆ„(μ˜μ‘΄λ˜λŠ” 객체)에 μ˜μ‘΄ν•œλ‹€. 집합(Aggregation) 관계: 뢀뢄이 전체와 λ‹€λ₯Έ 생λͺ… μ£ΌκΈ°λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€. ꡬ성(Compostion) 관계: 뢀뢄은 전체와 같은 생λͺ… μ£ΌκΈ°λ₯Ό ..
[μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 지ν–₯의 원리와 이해] 6μž₯ : μŠ€ν”„λ§μ΄ μ‚¬λž‘ν•œ λ””μžμΈ νŒ¨ν„΄ '객체지ν–₯의 4λŒ€ νŠΉμ„±'은 객체지ν–₯을 잘 μ‚¬μš©ν•˜κΈ°μœ„ν•œ '도ꡬ'이닀. '객체지ν–₯의 5λŒ€ 원칙'은 μ΄λŸ¬ν•œ 도ꡬλ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜λŠ” μ›μΉ™μœΌλ‘œ λ³Ό 수 μžˆλ‹€. κ·Έλ ‡λ‹€λ©΄ λ””μžμΈνŒ¨ν„΄μ€ 무엇에 λΉ„μœ ν•  수 μžˆμ„κΉŒ? 'λ””μžμΈ νŒ¨ν„΄'은 λ ˆμ‹œν”Όμ— λΉ„μœ ν•  수 μžˆλ‹€. μ‹€μ œ 개발 ν˜„μž₯μ—μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬ 사항을 μ²˜λ¦¬ν•˜λ©΄μ„œ λ§Œλ“€μ–΄μ§„ λ‹€μ–‘ν•œ ν•΄κ²°μ±… 쀑 λ§Žμ€ μ‚¬λžŒλ“€μ΄ μΈμ •ν•œ '베슀트 ν”„λ ‰ν‹°μŠ€'λ₯Ό μ •λ¦¬ν•œ 것이닀. (λ””μžμΈ νŒ¨ν„΄μ€ λ‹Ήμ—°νžˆ 객체 지ν–₯ νŠΉμ„±κ³Ό 섀계 원칙을 기반으둜 ꡬ성) -> μŠ€ν”„λ§ μ—­μ‹œ λ‹€μ–‘ν•œ λ””μžμΈ νŒ¨ν„΄μ„ ν™œμš©ν•˜κ³  μžˆλ‹€! * μŠ€ν”„λ§μ˜ 곡식적 μ •μ˜ : "μžλ°” μ—”ν„°ν”„λΌμ΄μ¦ˆ κ°œλ°œμ„ νŽΈν•˜κ²Œ ν•΄μ£ΌλŠ” μ˜€ν”ˆμ†ŒμŠ€ κ²½λŸ‰κΈ‰ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬" λ””μžμΈ νŒ¨ν„΄μ€ 객체 지ν–₯의 νŠΉμ„± 쀑 '상속', 'μΈν„°νŽ˜μ΄μŠ€', 'ν•©μ„±'을 μ΄μš©ν•œλ‹€. (합성은 객..
[μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 지ν–₯의 원리와 이해] 5μž₯ : 객체 지ν–₯ 섀계 5원칙 객체 지ν–₯ 섀계 5원칙 객체 지ν–₯의 κ°œλ…κ³Ό 4λŒ€ νŠΉμ„± 쒋은 도ꡬ을 μ•Œκ²Œλ¨. 쒋은 도ꡬ가 μžˆμ–΄λ„ μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜λŠ” 방법을 μ•Œμ•„μ•Ό 쒋은 μš”λ¦¬κ°€ λ‚˜μ˜΄. 객체 지ν–₯ 섀계 (Object Oriented Design) 5원칙 SOLID (객체 지ν–₯을 μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜λŠ” 방법) SRP (Single Responsibility Principle) : 단일 μ±…μž„ 원칙 OCP (Open Closed Princinple) : 개방 폐쇄 원칙 LSP (Liskov Substitution Principle) : λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 ISP (Interface Segregation Principle) : μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙 DIP (Dependency Inversion Principle) : 의쑴 μ—­μ „ 원칙 μ‘μ§‘λ„λŠ” 높이고 결합도..
[μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 지ν–₯의 원리와 이해] 4μž₯ : μžλ°”κ°€ ν™•μž₯ν•œ 객체 지ν–₯ abstract ν‚€μ›Œλ“œ - 좔상 λ©”μ„œλ“œμ™€ 좔상 클래슀 좔상 λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜λΌλ„ 가지고 μžˆλŠ” 클래슀λ₯Ό 좔상 클래슀라고 λΆ€λ₯Έλ‹€. λ„λŒ€μ²΄ μ™œ λͺΈμ²΄κ°€ 없이 μ„ μ–Έλ§Œ μžˆλŠ” λ©”μ„œλ“œκ°€ ν•„μš”ν• κΉŒ?? **문제점** 1. 동물 ν΄λž˜μŠ€λŠ” μ–΄λ–»κ²Œ μšΈμ–΄μ•Ό ν•˜λŠ”μ§€ λͺ¨λ₯Έλ‹€. (μš°λŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  수 μ—†λ‹€.. -> μ •μ˜ν•˜λ”λΌλ„ μΈμŠ€ν„΄μŠ€λ‘œ 생성해선 μ•ˆλœλ‹€.) 2. 그런데 동물 μ°Έμ‘° λ³€μˆ˜λ₯Ό 톡해 λͺ¨λ“  동물을 μšΈκ²Œν•˜κ³  μ‹Άλ‹€. (ν•˜μœ„ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ“œ ν•  μƒμœ„ λ©”μ„œλ“œκ°€ ν•„μš”ν•¨...) **ν•΄κ²° 방법** 좔상 ν΄λž˜μŠ€μ™€ 좔상 λ©”μ„œλ“œ μ‚¬μš©ν•˜λ©΄ 1번의 문제λ₯Ό ν•΄κ²°κ°€λŠ₯ν•˜λ‹€. μš°λŠ” λ©”μ„œλ“œλŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—κ²Œ κ΅¬ν˜„μ„ 맑길 수 있고 μΆ”μƒν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€κ°€ 될 수 μ—†λ‹€. (문제점 λͺ¨λ‘ ν•΄κ²°!!) 2번 λ¬Έμ œλ„ 좔상 λ©”μ„œλ“œλ‘œ ν•˜μœ„ν΄λž˜μŠ€μ—κ²Œ λ©”μ„œλ“œμ˜ κ΅¬ν˜„μ„ κ°•μ œν• ..
[μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체지ν–₯의 원리와 이해] 3μž₯ : μžλ°”μ™€ 객체 지ν–₯ 객체지ν–₯은 인간 지ν–₯이닀 객체 지ν–₯의 큰 κ·Έλ¦Ό μ„Έμƒμ˜ λͺ¨λ“  것은 "객체"λ‹€. 각각의 κ³ μœ ν•˜λ‹€. 사물은 속성을 κ°–λŠ”λ‹€. 사물은 ν–‰μœ„λ₯Ό ν•œλ‹€. 우리 인간은 사물을 "λΆ„λ₯˜"λ₯Ό 톡해 μ΄ν•΄ν•˜κ³  μΈμ§€ν•œλ‹€. μ‚¬λžŒμ€ λ‚˜μ΄, λͺΈλ¬΄κ²Œλ₯Ό 가지며 "λ¨Ήκ±°λ‚˜, μžκ±°λ‚˜, μš°λŠ” 등에 행동"을 ν•˜λŠ” 물체λ₯Ό λœ»ν•œλ‹€. (κ°œλ…μ— λ”°λ₯Έ λΆ„λ₯˜) μš°λ¦¬κ°€ μ‹€μ œ 사물을 μΈμ§€ν•˜κ³  μ‚¬κ³ ν•˜λŠ” λ°©μ‹λŒ€λ‘œ 객체 λ‹¨μœ„μ˜ ν”„λ‘œκ·Έλž˜λ°μ΄ 객체 지ν–₯μ—μ„œ κ°€λŠ₯ν•˜λ‹€. 객체 지ν–₯의 4λŒ€ νŠΉμ„± - μΊ‘! 상좔닀 μΊ‘μŠν™” : 정보은닉 상속 : μž¬μ‚¬μš© 좔상화 : λͺ¨λΈλ§ λ‹€ν˜•μ„± : μ‚¬μš©νŽΈμ˜ 클래슀 vs. 객체 = λΆ•μ–΄λΉ΅ν‹€ vs. λΆ•μ–΄λΉ΅ ??? λΆ•μ–΄λΉ΅ν‹€ λΆ•μ–΄λΉ΅ = new λΆ•μ–΄λΉ΅ν‹€(); //??? 뢕어빡틀을 μƒˆλ‘œμš΄ λ§Œλ“ λ‹€κ³  "λΆ•μ–΄λΉ΅"이 될순 μ—†λ‹€ -> 뢕어빡틀은 κ·Έμ € 뢕어빡을 λ§Œλ“œλŠ” 팩..
[μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체지ν–₯의 원리와 이해] 2μž₯ : μžλ°”μ™€ 절차적/ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ° μžλ°” ν”„λ‘œκ·Έλž˜λ° 개발과 ꡬ동 μžλ°”λŠ” μžλ°” κ°œλ°œλ„κ΅¬μΈ JDKλ₯Ό μ΄μš©ν•΄ 개발되고 개발된 ν”„λ‘œκ·Έλž¨μ€ JRE에 μ˜ν•΄ μ»΄ν“¨ν„°μ˜ JVM μƒμ—μ„œ κ΅¬λ™λœλ‹€. - JDKλŠ” 컴파일러 포함 - JREλŠ” μžλ°” μ‹€ν–‰κΈ° 포함 - JVM은 μžλ°” 가상 기계 μžλ°” κ°œλ°œμžλŠ” 본인이 μ‚¬μš© 쀑인 ν”Œλž«νΌμ— μ„€μΉ˜λœ JVM용으둜 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜κ³  λ°°ν¬ν•˜λ©΄ 각 ν”Œλž«νΌμ— λ§žλŠ” JVM이 μ•Œμ•„μ„œ ν”„λ‘œκ·Έλž¨μ„ 아무 λ¬Έμ œμ—†μ΄ κ΅¬λ™μ‹œμΌœμ€€λ‹€. -> μ΄λŸ¬ν•œ μžλ°”μ˜ νŠΉμ„±μ„ "Write Once Run Anywhere" 라고 ν•œλ‹€. 객체 지ν–₯ ν”„λ‘œκ·Έλž¨μ˜ λ©”λͺ¨λ¦¬ μ‚¬μš© 방식 ν”„λ‘œκ·Έλž¨ 싀행에 λ”°λ₯Έ T λ©”λͺ¨λ¦¬ ꡬ쑰 λ³€ν™” Tλ©”λͺ¨λ¦¬ κ΅¬μ‘°λŠ” μŠ€νƒœν‹± μ˜μ—­, μŠ€νƒ μ˜μ—­, νž™ μ˜μ—­μœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€. μ‹€ν–‰ μ½”λ“œ public class Start { public static void..
[μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체지ν–₯의 원리와 이해] 1μž₯ : μ‚¬λžŒμ„ μ‚¬λž‘ν•œ 기술 μŠ€ν”„λ§μ€ 객체지ν–₯의 기반 μœ„μ—μ„œ λ§Œλ“€μ–΄μ‘Œλ‹€. λ”°λΌμ„œ, 객체지ν–₯에 λŒ€ν•œ μ΄ν•΄λŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•œ ν•„μˆ˜ 쑰건이닀. μŠ€ν”„λ§μ€ 객체지ν–₯의 기반 μœ„μ— μ„œμžˆλ‹€. OOP - μžλ°”, C++, C# [κ°œλ…, μ œν’ˆ] ???? - μŠ€ν”„λ§ ⇒ ????μ—λŠ” 무엇이 λ“€μ–΄κ°ˆκΉŒ? μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ κ°œλ… λ°©λŒ€ν•œ μ œν’ˆ 글쓴이가 μƒκ°ν•˜λŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ κ°œλ…μ€ → OOP ν”„λ ˆμž„μ›Œν¬ λ”°λΌμ„œ, μŠ€ν”„λ§μ„ μ•Œλ €λ©΄ 객체지ν–₯을 μ΄ν•΄ν•΄μ•Όλ§Œ ν•œλ‹€. 또, ν”„λ ˆμž„μ›Œν¬κ°€ 무엇인지 이해해야 ν•œλ‹€. μŠ€ν”„λ§μ΄ μ–΄λ €μš΄ 이유? OOPλ₯Ό 잘 λͺ¨λ₯΄κ±°λ‚˜ μ˜€ν•΄ν•˜κ³  μžˆλŠ” 경우 μŠ€ν”„λ§ μ‚Όκ°ν˜• : IoC/DI, AOP, PSA (μŠ€ν”„λ§μ„ μ§€λ°°ν•˜λŠ” 3μš”μ†Œ) μŠ€ν”„λ§ μ‚Όκ°ν˜•μ€ POJO에 3가지 μœ ν˜•μ˜ 진동을 쀌으둜써 κ±°λŒ€ν•œ ν”„λ ˆμž„μ›Œν¬λ₯Ό 완성함! → 7μž₯ ν•™μŠ΅ μŠ€ν”„..

λ°˜μ‘ν˜•