ํ๋ ์์ํฌ๋ฅผ ์ํ JAVA(2) - Java์ OOP
1. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- JAVA : ๊ฐ์ฒด์งํฅ ์ธ์ด
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ : ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ก ๊ตฌ์ฑํ๋ ๊ฒ
- ํ๋ก๊ทธ๋จ์ด ๊ฑฐ๋ํ ํ๋ฉด์ ๋ฑ์ฅ. ๋ง๋ค ์๋ ์์ง๋ง ๊ด๋ฆฌ๊ฐ ํ๋ค์ด์ง
- ์ด๋ป๊ฒ ํฐ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ฒ์ธ๊ฐ? ⇒ ํด๊ฒฐ์ฑ : ์๊ฒ ๋๋ ์ ๋ง๋ค๊ณ ํฉ์น๊ธฐ
- ํ๋ก๊ทธ๋จ์ ๋์์ ๊ฐ์ฒด๋ค์๊ฒ ๋๋ ์ ์ํ
- ๊ฐ๋ ์ ์ธ ์ฉ์ด → ๊ฐ์ฒด / ๊ธฐ์ ์ ์ธ ์ฉ์ด → class, instance
- ๊ฐ์ฒด๋ ์์ ๊ธฐ๋ฅ์ ์ํ
- ๊ฐ์ฒด์ ๊ฐ์ฒด๋ ์๋ก ํ๋ ฅ
- ⇒ ๊ฐ์ฒด์งํฅ์ ๋ชฉํ : ์ผ์ ์๊ฒ ์ชผ๊ฐ์ ๊ฐ์ฒด์์ ์์ํ๊ณ , ์๋ก ํ๋ ฅํ๊ฒ ๋ง๋๋ ๊ฒ
- ๊ฐ์ฒด๋ฅผ ์๋ก ๊ตฌ๋ถํ ํ์๊ฐ ์๋ค.
- type(ํ)์ผ๋ก ๊ตฌ๋ถ
- String str = “Hellow World”
package com.programmers;
import java.lang.*;
class MyObject extends Object implements Runnable{ // class type ๋ง๋ค๊ธฐ
// ํ๋ ์์
private int a = 0;
// ๋ฉ์๋ ์์ญ
public void run(){
a += 1;
}
}
MyObject obj = new MyObject();
// MyObject ํ์
์ ๋ณ์ obj๋ฅผ ๋ง๋ค๊ณ ํด๋น ๋ณ์์ MyObject์ผ๋ก ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ๋์
2. ๊ฐ์ฒด์งํฅ์ ํน์ฑ
1๏ธโฃ ๊ฐญ์ํ
- ์์ฑ๋๊ฐ ์๋ค : ๊ธฐ๋ฅ์ ์ํํ๋ ๋จ์๋ก์ ์์ ํจ์ ๊ฐ๋๋ค.
- ์ ๋ณด๊ฐ ์๋๋์ด ์๋ค : ๊ฐ์ฒด์ ์ ๋ณด๊ฐ ๋ฐ์ผ๋ก ์ ๋ฌ๋๊ฑฐ๋, ๋ฐ์์ ๊ฐ์ฒด ๋ด์ ์ ๋ณด์ ์ ๊ทผํ์ง ๋ชปํ๋ค.
⇒ ๊ฐ์ฒด๋ ์ค์ค๋ก ๋์ํ ์ ์๋ ํ๊ฒฝ์ ๊ฐ๊ณ ์์ด์ผํ๋ค.
์ธ๋ถ์ ์์กดํ๊ฑฐ๋, ์นจ๋ต์ ์ ํํ์ฌ์ผ ํ๋ค.
- ์ ๊ทผ์ง์ ์
private : ๊ฐ์ฒด ์์
protected : ์์๋ ๊ฐ์ฒด์์๋ ์ ๊ทผ ๊ฐ๋ฅ
(friendly) : ๊ฐ์ ํจํค์ง ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ (ํจํค์ง ๊ฐ์์ฑ)
public : ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅ
2๏ธโฃ ์์
- ์์, ๋ถ๋ชจ, super, [์ถ์]
- ํ์, ์์, (this), [๊ตฌ์ฒด]
์์์ ์ฐ๋ ์ด์ ?
→ ๊ณตํต๋ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ๊ฐ์ฒด์๊ฒ ์ ๋ฌํ๊ณ ์ถ์๋??? NO
→ ์ถ์๊ณผ ๊ตฌ์ฒด ๊ด๊ณ์์ ์ฌ์ฉ๋์ด์ผ ํ๋ค. (์๋ฌผ > ๋๋ฌผ > ํฌ์ ๋ฅ > ์ฌ๋ > ์ฌ์ )
3๏ธโฃ ์ถ์ํ
- ์์ ๊ฐ์ฒด๊ฐ์ ๊ด๊ณ์์ ์์์ ์๋ ๊ฒ์ด ํญ์ ํ์๋ณด๋ค ์ถ์์ ์ด์ผ ํ๋ค.
์ถ์ํ๋ ๊ฐ์ฒด : ์ถ์์ฒด
๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด : ๊ตฌ์์ฒด
// ** ์๋ฏธ์ ์ถ์์ฒด **
class Login{
void login(){}
}
class kakakoLogin extends Login{
void login(){}
}
// ** ์ถ์๊ธฐ๋ฅ์ ๊ฐ์ง ๊ฐ์ฒด **
abstract class Login{
abstract void login();
// abstract ๋ฉ์๋ : ๊ตฌํ์ฒด๋ฅผ ๊ฐ์ง์๊ณ ์ ์๋ง ๊ฐ์ง๋ค.
}
class kakakoLogin extends Login{
@Override void login(){} // ๊ตฌํ์ ์๋ฌด๋ฅผ ๊ฐ์ง๋ค. -> ๋ฐ๋์ override
}
// ** ๊ฐ์ฒด ์์ฒด๊ฐ ์ถ์์ **
interface Login{
void login(){}
}
class kakakoLogin implements Login{
@Override void login(){} // ๊ตฌํ์ ์๋ฌด๋ฅผ ๊ฐ์ง๋ค
}
4๏ธโฃ ๋คํ์ฑ
- ํ(type)์ ์ฌ๋ฌ๊ฐ์ง๋ก ํํํ ์ ์๋ค. (์์ ๊ด๊ณ์ ์์ ๋)
: ๊ฐ์ ๊ฐ์ฒด์ ๋ํด ํํฐ๋ง๋(type์ ๋ง๋) ๊ธฐ๋ฅ๋ง ์ ๊ทผํ ์ ์๋ค. → ๊ฐ์ฒด๊ฐ ์ผ์ ๋ถํ ํด์ ํ๋๋ฐ ์์ ์ฑ์ ํ๋ณด
class KakakoLogin implements Login,Portal{
void kakao(){}
@Override void login(){}
@Override void portal(){}
}
Portal p = new KakaoLogin();
p.portal()
Login l = new KakaoLogin();
l.login()
KakaoLogin l = new KakaoLogin(); // ์ ๋ถ ์ ๊ทผ ๊ฐ๋ฅ?
3. ๊ฐ์ฒด์งํฅ ์ค๊ณ
์ด๋ป๊ฒ ํ๋ฉด ๊ฐ์ฒด์งํฅ์ ์ ํ ์ ์์๊น
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ๊ตฌ๋ถํ๋๊ฐ
- ๊ฐ์ฒด๊ฐ์ ์ฐ๊ด๊ด๊ณ๊ฐ ์ด๋ ํ๊ฐ
1๏ธโฃ ๊ฐ์ฒด์งํฅ์ ์ค๋ช ํ๊ธฐ ์ํ ๋๊ตฌ : UML
- UseCase Diagram
- Sequence Diagram
- Package Diagram
- Class Diagram
Tool
- https://draw.io
- https://staruml.io
- ํ์ํฌ์ธํธ, ๊ทธ๋ฆผํ
2๏ธโฃ ์ค๊ณ : ์ด๋ป๊ฒ ๊ฐ์ฒด๋ฅผ ์ ๋๋๊ณ ์ฐ๊ด์ง์ ์ ์๋๊ฐ
- ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๋ค์ฏ๊ฐ์ง ์์น → SOLID
- S : SRP (๋จ์ผ ์ฑ ์ ์์น): ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ์์ ๋๋ ์ด์ ๋ ํ๋ ๋๋ฌธ์ด์ฌ์ผ ํ๋ค .
- O : OCP : ์์ ์๋ ๋ซํ๊ณ , ํ์ฅ์๋ ์ด์ด๋ผ.
- L : LSP : ์ถ์๊ฐ์ฒด๋ก ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ๊ตฌ์๊ฐ์ฒด๊ฐ ๋ค์ด๊ฐ๋ ์๋ฌด ๋ฌธ์ ์์ด์ผ ํ๋ค.
- I : ISP
- D : DIP
- ์์น์ ๋ฐ๋ผ ์ค๊ณํ ๊ฒฝ์ฐ ๊ณตํต์ ⇒ GoF 23๊ฐ์ง ๋์์ธ ํจํด
'Back-end ๋ฐ๋ธ์ฝ์ค > week 01 - 02 TIL (java, DB)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 221024 - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์๊ฐ (0) | 2022.10.24 |
---|---|
[TIL] 221021 - Java ์ค์ต ํ๋ก์ ํธ : ์ซ์์ผ๊ตฌ ๊ฒ์ (0) | 2022.10.21 |
[TIL] 221020 - Java์ Collection (0) | 2022.10.21 |
[TIL] 221019 - Java์ Interface (0) | 2022.10.19 |
[TIL] 221017 - Java ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ (0) | 2022.10.18 |
๋๊ธ