πŸ“˜ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„

이상민·2023λ…„ 7μ›” 7일
0

CS곡뢀

λͺ©λ‘ 보기
2/5

πŸ“˜ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„

  • ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ ν”„λ‘œκ·Έλž˜λ°μ˜ 관점을 κ°–κ²Œ ν•΄μ£ΌλŠ” 역할을 ν•˜λŠ” 개발 방법둠이닀.
    크게 1.μ„ μ–Έν˜• - ν•¨μˆ˜ν˜•, 2.λͺ…λ Ήν˜• - 객체지ν–₯ν˜•, μ ˆμ°¨μ§€ν–₯ν˜• 으둜 λ‚˜λ‰œλ‹€.

πŸ“—μ„ μ–Έν˜•κ³Ό ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°

  • "ν”„λ‘œκ·Έλž¨μ€ ν•¨μˆ˜λ‘œ 이루어진 것이닀."λΌλŠ” λͺ…μ œκ°€ λ‹΄κ²¨μžˆλŠ” νŒ¨λŸ¬λ‹€μž„.
  • μž‘μ€ '순수 ν•¨μˆ˜'듀을 λΈ”λ‘μ²˜λŸΌ μŒ“μ•„ λ‘œμ§μ„ κ΅¬ν˜„ν•˜κ³ , 'κ³ μ°¨ ν•¨μˆ˜'λ₯Ό 톡해 μž¬μ‚¬μš©μ„±μ„ 높인 νŒ¨λŸ¬λ‹€μž„μ΄λ‹€.

μˆœμˆ˜ν•¨μˆ˜: 좜λ ₯이 μž…λ ₯μ—λ§Œ μ˜μ‘΄ν•˜λŠ” 것을 의미. λ‹€λ₯Έ μ „μ—­λ³€μˆ˜λ“±μ΄ 좜λ ₯에 영ν–₯을 μ£Όλ©΄ 순수 ν•¨μˆ˜κ°€ μ•„λ‹ˆλ‹€.
κ³ μ°¨ν•¨μˆ˜: ν•¨μˆ˜κ°€ ν•¨μˆ˜λ₯Ό κ°’μ²˜λŸΌ λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„ λ‘œμ§μ„ 생성할 수 μžˆλŠ” 것을 λ§ν•œλ‹€.

일급객체: κ³ μ°¨ν•¨μˆ˜λ₯Ό μ“°κΈ° μœ„ν•΄μ„œλŠ” ν•΄λ‹Ή μ–Έμ–΄κ°€ 일급 κ°μ²΄λΌλŠ” νŠΉμ§•μ„ κ°€μ Έμ•Ό ν•œλ‹€.

  • λ³€μˆ˜λ‚˜ λ©”μ„œλ“œμ— ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•  수 μžˆλ‹€.
  • ν•¨μˆ˜ μ•ˆμ— ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ 담을 수 μžˆλ‹€.
  • ν•¨μˆ˜κ°€ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•  수 μžˆλ‹€.

πŸ“—κ°μ²΄μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • κ°μ²΄λ“€μ˜ μ§‘ν•©μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ˜ μƒν˜Έμž‘μš©μ„ ν‘œν˜„, 데이터λ₯Ό 객체둜 μ·¨κΈ‰ν•˜μ—¬ 객체 내뢀에 μ„ μ–Έλœ λ©”μ„œλ“œ ν™œμš©.

좔상화

  • λ³΅μž‘ν•œ μ‹œμŠ€ν…œμœΌλ‘œλΆ€ν„° 핡심적인 κ°œλ… λ˜λŠ” κΈ°λŠ₯을 κ°„μΆ”λ €λ‚΄λŠ”κ²ƒ.

μΊ‘μŠν™”

  • 객체의 속성과 λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜λ‘œ λ¬Άκ³  일뢀λ₯Ό 외뢀에 감좔어 은닉.

상속성

  • μƒμœ„ 클래슀의 νŠΉμ„±μ„ ν•˜μœ„ ν΄λž˜μŠ€κ°€ 이어받아 μž¬μ‚¬μš©.

λ‹€ν˜•μ„±

  • ν•˜λ‚˜μ˜ λ©”μ„œλ“œλ‚˜ ν΄λž˜μŠ€κ°€ λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ λ™μž‘ν•˜λŠ” 것을 말함
    ex) μ˜€λ²„λ‘œλ”©, μ˜€λ²„λΌμ΄λ”©

μ˜€λ²„λ‘œλ”©

  • 같은 이름을 κ°€μ§„ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬ 개 λ‘λŠ” 것을 말함
    λ©”μ„œλ“œμ˜ νƒ€μž…, λ§€κ°œλ³€μˆ˜μ˜ μœ ν˜•, 개수 λ“±μœΌλ‘œ κ΅¬λΆ„ν•œλ‹€.
    β€»μ»΄νŒŒμΌ 쀑 λ°œμƒν•˜λŠ” '정적' λ‹€ν˜•μ„±
public void eat(String a){ }
public void eat(String a,String b){ }

μ˜€λ²„λΌμ΄λ”©

  • 주둜 λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©μ„ λ§ν•˜λ©°, μƒμœ„ν΄λž˜μŠ€μ—μ„œ 상속받은 λ©”μ„œλ“œλ₯Ό ν•˜μœ„ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜λŠ” 것을 의미.
    β€»λŸ°νƒ€μž„μ€‘ λ°œμƒν•˜λŠ” '동적' λ‹€ν˜•μ„±
class Animal {
	public void bark(){
    	System.out.println("mumu! mumu!");
    }
}

class Dog extends Animal {
	@override
    public void bark(){
    	System.out.println("wal! wal!");
    }
}

πŸ“—μ„€κ³„μ›μΉ™ SOLID

단일 μ±…μž„ 원칙(SRP)

  • λͺ¨λ“  ν΄λž˜μŠ€λŠ” 각각 ν•˜λ‚˜μ˜ μ±…μž„ 만 κ°€μ Έμ•Ό ν•˜λŠ” 원칙

개방-폐쇄 원칙(OCP)

  • μœ μ§€ 보수 μ‹œ μ½”λ“œλ₯Ό μ‰½κ²Œ ν™•μž₯ν•  수 μžˆλ„λ‘ ν•˜κ³  μˆ˜μ •μ‹œμ—λŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•˜λŠ” 원칙.
    κΈ°μ‘΄μ½”λ“œλŠ” λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œλ„ ν™•μž₯은 μ‰½κ²Œ ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙(LSP)

  • ν”„λ‘œκ·Έλž¨ κ°μ²΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ 정확성을 κΉ¨λœ¨λ¦¬μ§€ μ•ŠμœΌλ©΄μ„œ ν•˜μœ„ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ‘œ λ°”κΏ€ 수 μžˆμ–΄μ•Ό ν•˜λŠ” 것을 의미.
    λΆ€λͺ¨ 객체에 μžμ‹ 객체λ₯Ό 넣어도 μ‹œμŠ€ν…œμ΄ λ¬Έμ œμ—†μ΄ λŒμ•„κ°€κ²Œ λ§Œλ“œλŠ” 것을 λœ»ν•¨.

μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙(ISP)

  • ν•˜λ‚˜μ˜ 일반적인 μΈν„°νŽ˜μ΄μŠ€λ³΄λ‹€ ꡬ체적인 μ—¬λŸ¬ 개의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•˜λŠ” 원칙을 λœ»ν•¨.

의쑴 μ—­μ „ 원칙(DIP)

  • λ³€ν•˜κΈ° μ‰¬μš΄ 것에 μ˜μ‘΄ν•˜λ˜ 것을 μΆ”μƒν™”λœ μΈν„°νŽ˜μ΄μŠ€λ‚˜ μƒμœ„ν΄λž˜μŠ€λ₯Ό
    두어 변화에 영ν–₯λ°›μ§€ μ•Šκ²Œν•˜λŠ” 원칙을 λœ»ν•¨.
    μƒμœ„ 계측은 ν•˜μœ„ κ³„μΈ΅μ˜ 변화에 λŒ€ν•œ κ΅¬ν˜„μœΌλ‘œλΆ€ν„° 독립해야 ν•œλ‹€.

πŸ“—μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ°

  • 둜직이 μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  연속적인 계산 κ³Όμ •μœΌλ‘œ 이루어져 μžˆλ‹€.
    일이 μ§„ν–‰λ˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•˜μ—¬ μ½”λ“œμ˜ 가독성이 μ’‹μœΌλ©°, 싀행속도가 λΉ λ₯΄λ‹€. 계산이 λ§Žμ€ μž‘μ—…μ— μ“°μž„.

λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ΄λ‚˜ μ„œλΉ„μŠ€μ˜ νŠΉμ§•μ„ κ³ λ €ν•΄ νŒ¨λŸ¬λ‹€μž„μ„ μ •ν•˜κ³ , μ—¬λŸ¬ νŒ¨λŸ¬λ‹€μž„μ„ μ‘°ν•©ν•˜μ—¬ μž₯점만 μ·¨ν•΄ κ°œλ°œν•˜λŠ”κ²ƒμ΄ κ°€μž₯ 쒋은 방법이닀

profile
개린이

0개의 λŒ“κΈ€