πŸ“šOOP의 5원칙과 4가지 νŠΉμ„±

윀건희(Guny)Β·2020λ…„ 9μ›” 24일
11

Java

λͺ©λ‘ 보기
1/1
post-thumbnail

βœ‹OOPλž€?

Object-Oriented Programming 의 μ€„μž„λ§
객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 방식


πŸ€”OOP μ΄μ „μ˜ ν”„λ‘œκ·Έλž˜λ° 방식은?

절차적 ν”„λ‘œκ·Έλž˜λ° 방식

μž…λ ₯을 λ°›μ•„ λͺ…μ‹œλœ μˆœμ„œλŒ€λ‘œλ§Œ μ²˜λ¦¬ν•˜κ³  κ²°κ³Όλ₯Ό λ‚΄λŠ” 방식

ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ° 방식

절차적 ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μ˜ κ°œμ„ λœ ν˜•νƒœ
ν”„λ‘œκ·Έλž¨μ„ ν•¨μˆ˜λ‹¨μœ„λ‘œ λ‚˜λˆ„κ³  ν•¨μˆ˜λΌλ¦¬ ν˜ΈμΆœν•˜λŠ” 방식
큰 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 문제λ₯Ό μž‘μ€ λ‹¨μœ„λ“€λ‘œ λ‚˜λˆ„μ–΄ ν•΄κ²°ν•˜λŠ” 방식
Top-Down 방식이라고도 ν•œλ‹€.

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 방식

ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μ˜ κ°œμ„ λœ ν˜•νƒœ
큰 문제λ₯Ό μž‘κ²Œ μͺΌκ°œλŠ” 것이 μ•„λ‹ˆλΌ, μž‘μ€ λ¬Έμ œλ“€μ„ ν•΄κ²°ν•˜λŠ” 객체λ₯Ό λ§Œλ“ λ‹€.
객체듀을 μ‘°ν•©ν•΄ 큰 문제λ₯Ό ν•΄κ²°ν•˜λŠ” Bottom-Up 방식


πŸ˜‰OOP의 μž₯점과 단점

μž₯점

μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ΄ 높아진닀.
μœ μ§€λ³΄μˆ˜κ°€ 쉽닀.
μ½”λ“œκ°€ 간결해진닀.

단점

처리 μ‹œκ°„μ΄ 비ꡐ적 였래 κ±Έλ¦°λ‹€.
ν”„λ‘œκ·Έλž¨μ„ 섀계할 λ•Œ λ§Žμ€ κ³ λ―Όκ³Ό μ‹œκ°„μ„ νˆ¬μžν•΄μ•Όν•œλ‹€.

πŸ–OOP의 5원칙 (SOLID)

< CLean Code >의 μ €μž, λ‘œλ²„νŠΈ λ§ˆν‹΄μ΄ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 및 μ„€κ³„μ˜ λ‹€μ„― 가지 κΈ°λ³Έ 원칙을 마이클 νŒ¨λ”μŠ€κ°€ SOLIDλΌλŠ” μ•½μ–΄λ‘œ μ†Œκ°œν•œ 것!

S (SRP : Single Responsibility Principle)

ν•œ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€.

O (OCP : Open/Closed Principle)

ν™•μž₯μ—λŠ” μ—΄λ €(Open) μžˆμœΌλ‚˜, λ³€κ²½μ—λŠ” λ‹«ν˜€(Closed)μžˆμ–΄μ•Ό ν•œλ‹€.

L (LSP : Liskov’s Substitution Principle)

ν”„λ‘œκ·Έλž¨μ˜ κ°μ²΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ 정확성을 κΉ¨λœ¨λ¦¬μ§€ μ•ŠμœΌλ©΄μ„œ ν•˜μœ„ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ‘œ λ°”κΏ€ 수 μžˆμ–΄μ•Ό ν•œλ‹€.

I (ISP : Interface Segregation Principle)

νŠΉμ • ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€ μ—¬λŸ¬ κ°œκ°€ λ²”μš© μΈν„°νŽ˜μ΄μŠ€ ν•˜λ‚˜λ³΄λ‹€ λ‚«λ‹€.

D (DIP : Dependency Inversion Principle)

좔상화에 μ˜μ‘΄ν•œλ‹€. ꡬ체화에 μ˜μ‘΄ν•˜λ©΄ μ•ˆλœλ‹€.


🎨OOP의 4가지 νŠΉμ§•

1. μΊ‘μŠν™”

  • μ‹€μ œλ‘œ κ΅¬ν˜„ 뢀뢄을 외뢀에 λ“œλŸ¬λ‚˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” 것
  • λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ₯Ό ν•˜λ‚˜λ‘œ 묢음
  • 데이터λ₯Ό μ™ΈλΆ€μ—μ„œ 직접 μ ‘κ·Όν•˜μ§€ μ•Šκ³  ν•¨μˆ˜λ₯Ό ν†΅ν•΄μ„œλ§Œ μ ‘κ·Ό
  • ex) public, private, protected
    public : 클래슀 μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯
    private : 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯
    protected : 상속받은 μžμ‹ ν΄λž˜μŠ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯

2. 상속

  • μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ 클래슀의 νŠΉμ„±κ³Ό κΈ°λŠ₯을 λ¬Όλ €λ°›λŠ” 것
  • κΈ°λŠ₯의 일뢀뢄을 λ³€κ²½ν•˜λŠ” 경우 μžμ‹ ν΄λž˜μŠ€μ—μ„œ 상속받아 μˆ˜μ • 및 μ‚¬μš©ν•¨
  • 상속은 μΊ‘μŠν™”λ₯Ό μœ μ§€, 클래슀의 μž¬μ‚¬μš©μ΄ μš©μ΄ν•˜λ„λ‘ ν•΄ μ€€λ‹€.

3. 좔상화

  • μΈν„°νŽ˜μ΄μŠ€λ‘œ ν΄λž˜μŠ€λ“€μ˜ 곡톡적인 νŠΉμ„±(λ³€μˆ˜, λ©”μ†Œλ“œ)듀을 λ¬Άμ–΄ ν‘œν˜„ν•˜λŠ” 것

4. λ‹€ν˜•μ„±

  • μ–΄λ–€ λ³€μˆ˜,λ©”μ†Œλ“œκ°€ 상황에 따라 λ‹€λ₯Έ κ²°κ³Όλ₯Ό λ‚΄λŠ” 것
* μ˜€λ²„λ‘œλ”©(Overloading) : ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œ λ©”μ†Œλ“œμ˜ 이름이 κ°™μ§€λ§Œ, νŒŒλΌλ©”ν„°κ°€ λ‹€λ₯Έ 것
* μ˜€λ²„λΌμ΄λ”©(Overriding) : λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œλ₯Ό μžμ‹ 클래슀의 μš©λ„μ— 맞게 μž¬μ •μ˜ν•˜μ—¬ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ λ†’μž„

πŸ›‘DRY 원칙

Don't Repeat Yourself

λ°˜λ³΅ν•˜μ§€ 마라!


profile
개발자

1개의 λŒ“κΈ€

comment-user-thumbnail
2021λ…„ 4μ›” 27일

κ°μ‚¬νžˆ μ½μ—ˆμŠ΅λ‹ˆλ‹€.

λ‹΅κΈ€ 달기