πŸ“˜λ””μžμΈ νŒ¨ν„΄

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

CS곡뢀

λͺ©λ‘ 보기
1/5

라이브러리: κ³΅ν†΅μœΌλ‘œ μ‚¬μš©λ  수 μžˆλŠ” νŠΉμ •ν•œ κΈ°λŠ₯듀을 λͺ¨λ“ˆν™”ν•œ 것을 의미
※폴더λͺ…,파일λͺ… λ“± κ·œμΉ™μ΄ μ—†κ³  ν”„λ ˆμž„μ›Œν¬μ— λΉ„ν•΄ μžμœ λ‘œμ›€
ν”„λ ˆμž„μ›Œν¬: κ³΅ν†΅μœΌλ‘œ μ‚¬μš©λ  수 μ—†λŠ” νŠΉμ •ν•œ κΈ°λŠ₯듀을 λͺ¨λ“ˆν™”ν•œ 것을 의미
※폴더λͺ…,파일λͺ… λ“± κ·œμΉ™μ΄ 있으며, λΌμ΄λΈŒλŸ¬λ¦¬μ— λΉ„ν•΄ μ—„κ²©ν•˜λ‹€.

상속: μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œ 등을 상속받아 μ‚¬μš©, μžμ‹ ν΄λž˜μŠ€μ—μ„œ μΆ”κ°€ 및 ν™•μž₯을 ν•  수 μžˆλŠ” 것을 λ§ν•œλ‹€. μž¬μ‚¬μš©μ„±, 쀑볡성 μ΅œμ†Œν™” 일반 클래슀, 좔상 클래슀 기반으둜 κ΅¬ν˜„
κ΅¬ν˜„: λΆ€λͺ¨ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜μ—¬ κ΅¬ν˜„, 상속과 달리 λ°˜λ“œμ‹œ λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜μ—¬ κ΅¬ν˜„ν•΄μ•Όν•¨
μΈν„°νŽ˜μ΄μŠ€λ₯Ό 기반으둜 κ΅¬ν˜„

πŸ“˜λ””μžμΈ νŒ¨ν„΄

  • ν”„λ‘œκ·Έλž¨μ„ 섀계할 λ•Œ λ°œμƒν–ˆλ˜ λ¬Έμ œμ λ“€μ„ 객체 κ°„μ˜ μƒν˜Έ 관계 등을 μ΄μš©ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆλ„λ‘ ν•˜λ‚˜μ˜ 'κ·œμ•½' ν˜•νƒœλ‘œ λ§Œλ“€μ–΄ 놓은 것을 의미

πŸ“—μ‹±κΈ€ν†€ νŒ¨ν„΄

  • ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ— ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ κ°€μ§€λŠ” νŒ¨ν„΄. 보톡 λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° λͺ¨λ“ˆμ— 많이 μ‚¬μš©ν•œλ‹€.
  • λ‹€λ₯Έ λͺ¨λ“ˆλ“€μ΄ μΈμŠ€ν„΄μŠ€λ₯Ό κ³΅μœ ν•˜λ©° μ‚¬μš©ν•¨μœΌλ‘œ, μΈμŠ€ν„΄μŠ€ 생성 λΉ„μš©μ„ 쀄일 수 μžˆμ§€λ§Œ, μ˜μ‘΄μ„±μ΄ λ†’μ•„ μ§€λŠ” 단점이 μžˆλ‹€.

- πŸ“„μžλ°”μ—μ„œμ˜ 싱글톀 νŒ¨ν„΄

public class Singleton {
    private static class singleInstanceHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance(){
        return singleInstanceHolder.INSTANCE;
    }
}
public class HelloWorld {
        public static void main(String[] args){
            Singleton a = Singleton.getInstance();
            Singleton b = Singleton.getInstance();
            System.out.println(a.hashCode());
            System.out.println(b.hashCode());
            if(a==b){
                System.out.println(true);
            }
        }
}

- 단점

  • TDD(Test Driven Development)μ‹œ 걸림돌이 λœλ‹€.
    TDDμˆ˜ν–‰μ‹œ λ‹¨μœ„ν…ŒμŠ€νŠΈλ₯Ό μ£Όλ‘œν•˜λŠ”λ° λ‹¨μœ„ν…ŒμŠ€νŠΈλŠ” ν…ŒμŠ€νŠΈκ°€ μ„œλ‘œ 독립적이어야 ν•˜λ©°, ν…ŒμŠ€νŠΈλ₯Ό μ–΄λ–€ μˆœμ„œλ‘œλ“  μ‹€ν–‰ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
    ν•˜μ§€λ§Œ 싱글톀 νŒ¨ν„΄μ€ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄λ₯Ό 기반으둜 κ΅¬ν˜„ν•˜λŠ” νŒ¨ν„΄μ΄λ―€λ‘œ 독립적인 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€κΈ°κ°€ μ–΄λ ΅λ‹€.

- βœ…μ˜μ‘΄μ„± μ£Όμž…

  • 싱글톀 νŒ¨ν„΄μ€ λͺ¨λ“ˆκ°„ 결합을 κ°•ν•˜κ²Œ λ§Œλ“œλŠ” 단점이 μžˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ˜μ‘΄μ„± μ£Όμž…(DI,Dependency Injection)을 톡해 결합을 쑰금 더 λŠμŠ¨ν•˜κ²Œ λ§Œλ“ λ‹€.

  • μ˜μ‘΄μ„±: 쒅속성이라고도 ν•˜λ©° Aκ°€ B에 μ˜μ‘΄μ„±μ΄ μžˆλ‹€λŠ” 것은 B의 λ³€κ²½ 사항에 λŒ€ν•΄ A λ˜ν•œ λ³€ν•΄μ•Ό λœλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

  • 메인 λͺ¨λ“ˆμ΄ '직접' λ‹€λ₯Έ ν•˜μœ„ λͺ¨λ“ˆμ— λŒ€ν•œ μ˜μ‘΄μ„±μ„ μ£ΌλŠ”κ²ƒ λŒ€μ‹  쀑간에 μ˜μ‘΄μ„± μ£Όμž…μž(dependency injector)κ°€ 이뢀뢄을 κ°€λ‘œμ±„ 메인 λͺ¨λ“ˆμ΄ 'κ°„μ ‘'적으둜 μ˜μ‘΄μ„±μ„ μ£Όμž…ν•˜λŠ” 방식이닀. λ‹€λ₯Έ μš©μ–΄λ‘œ 'λ””μ»€ν”Œλ§μ΄ λœλ‹€' 라고도 ν•œλ‹€.

  • μ˜μ‘΄μ„± μ£Όμž…μ˜ μž₯점
    λͺ¨λ“ˆλ“€μ„ μ‰½κ²Œ κ΅μ²΄ν•˜μ—¬ ν…ŒμŠ€νŒ…, λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ 용이.
    κ΅¬ν˜„μ‹œ, 좔상화 λ ˆμ΄μ–΄λ₯Ό λ„£κ³  κ΅¬ν˜„μ²΄λ₯Ό λ„£κΈ° λ•Œλ¬Έμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‰½κ²Œ μΆ”λ‘ ν•  수 있으며, λͺ¨λ“ˆκ°„ 관계듀이 쑰금 더 λͺ…ν™•ν•΄μ§„λ‹€.

  • μ˜μ‘΄μ„± μ£Όμž…μ˜ 원칙
    μƒμœ„ λͺ¨λ“ˆμ€ ν•˜μœ„ λͺ¨λ“ˆμ—μ„œ 어떀것도 κ°€μ Έμ˜€μ§€ μ•Šμ•„μ•Όν•œλ‹€.
    λ‘˜ λ‹€ 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€.
    μΆ”μƒν™”λŠ” μ„ΈλΆ€ 사항에 μ˜μ‘΄ν•˜μ§€ λ§μ•„μ•Όν•œλ‹€.

πŸ“— νŒ©ν† λ¦¬ νŒ¨ν„΄

  • 상속관계에 두 ν΄λž˜μŠ€μ—μ„œ, μƒμœ„ ν΄λž˜μŠ€κ°€ μ€‘μš”ν•œ λΌˆλŒ€λ₯Ό κ²°μ •ν•˜κ³ ,
    ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ 객체 생성에 κ΄€ν•œ ꡬ체적인 λ‚΄μš©μ„ κ²°μ •ν•˜λŠ” νŒ¨ν„΄.
  • μƒμœ„, ν•˜μœ„ 클래슀 λΆ„λ¦¬λ‘œ λŠμŠ¨ν•œ 결합을 κ°€μ§€λ©°, μƒμœ„ ν΄λž˜μŠ€μ—μ„œλŠ” μΈμŠ€ν„΄μŠ€ 생성 방식에 λŒ€ν•΄ μ•Œ ν•„μš”κ°€ 없기에 λ§Žμ€ μœ μ—°μ„±μ„ κ°–κ²Œ λœλ‹€.
    ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œλŠ” 객체 둜직이 λ”°λ‘œ λ–Όμ–΄μ Έ μžˆκΈ°μ— μ½”λ“œ λ¦¬νŒ©ν„°λ§μ‹œ ν•œκ³³λ§Œ κ³ μΉ  수 있게 λ˜μ–΄ μœ μ§€ λ³΄μˆ˜μ„±μ΄ μ¦κ°€λœλ‹€.

πŸ“— μ „λž΅ νŒ¨ν„΄

  • 객체의 ν–‰μœ„λ₯Ό λ°”κΎΈκ³  싢은 경우 '직접' μˆ˜μ •ν•˜μ§€ μ•Šκ³  μ „λž΅μ΄λΌκ³  λΆ€λ₯΄λŠ” 'μΊ‘μŠν™”ν•œ μ•Œκ³ λ¦¬μ¦˜'을 μ»¨ν…μŠ€νŠΈμ•ˆμ—μ„œ λ°”κΏ”μ£Όλ©°, μƒν˜Έ ꡐ체가 κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” νŒ¨ν„΄μ΄λ‹€.
    ex) κ²°μ œλ°©λ²•μ„ μΉ΄μΉ΄μ˜€μΉ΄λ“œλ‘œ ν•˜κ±°λ‚˜, λ£¨λ‚˜μΉ΄λ“œλ‘œ ν•˜κ±°λ‚˜ 두 κ°€μ§€λ₯Ό μƒν˜Έ ꡐ체 κ°€λŠ₯ν•˜λ„λ‘ λ§Œλ“ λ‹€.

- passport의 μ „λž΅ νŒ¨ν„΄

  • μ „λž΅νŒ¨ν„΄μ„ ν™œμš©ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λ‘œλŠ” passportκ°€ μžˆλ‹€.
    Node.jsμ—μ„œ 인증 λͺ¨λ“ˆ κ΅¬ν˜„μ‹œ μ‚¬μš©ν•˜λŠ” 미듀웨어 라이브러리둜, 둜컬 아이디, νŒ¨μŠ€μ›Œλ“œλ₯Ό 톡해 μΈμ¦ν•˜κ±°λ‚˜, 페이슀뢁, 넀이버등 λ‹€λ₯Έ μ„œλΉ„μŠ€ 기반 인증을 μ§€μ›ν•œλ‹€.

πŸ“— μ˜΅μ €λ²„ νŒ¨ν„΄

  • 주체(κ΄€μ°°μž)κ°€ μ–΄λ–€ 객체(κ΄€μ°°λŒ€μƒ)의 μƒνƒœ λ³€ν™”λ₯Ό κ΄€μ°°ν•˜λ‹€κ°€ μƒνƒœ λ³€ν™”κ°€ μžˆμ„ λ•Œλ§ˆλ‹€ λ©”μ„œλ“œ 등을 톡해 μ˜΅μ €λ²„ λͺ©λ‘μ— μžˆλŠ” μ˜΅μ €λ²„λ“€(객체의 μƒνƒœλ³€ν™”μ— 따라 'μΆ”κ°€ λ³€ν™” 사항'이 μƒκΈ°λŠ” 객체듀)μ—κ²Œ λ³€ν™”λ₯Ό μ•Œλ €μ£ΌλŠ” λ””μžμΈ νŒ¨ν„΄.

  • 주체, 객체λ₯Ό λ”°λ‘œ 두지 μ•Šκ³  객체λ₯Ό 기반으둜 μ˜΅μ €λ²„ νŒ¨ν„΄μ„ κ΅¬μΆ•ν•˜κΈ°λ„ ν•œλ‹€. ex) νŠΈμœ„ν„°. λ‚΄κ°€ ν¬μŠ€νŒ…μ„ ν•˜λ©΄, νŒ”λ‘œμš°ν•œ μ‚¬λžŒμ—κ²Œ ν¬μŠ€νŒ…μ„ μ•Œλ €μ€€λ‹€.

  • 주둜 이벀트 기반 μ‹œμŠ€ν…œμ— μ‚¬μš©ν•˜λ©°, MVC νŒ¨ν„΄μ—λ„ μ‚¬μš©λœλ‹€.
    model에 변경사항이 생기면, update()λ₯Ό 톡해 뷰에 μ•Œλ €μ£Όκ³ , 컨트둀러 등이 μž‘λ™ν•œλ‹€.

- ν”„λ‘μ‹œ 객체

  • μ–΄λ– ν•œ λŒ€μƒμ˜ 기본적인 λ™μž‘μ˜ μž‘μ—…μ„ μ€‘κ°„μ—μ„œ κ°€λ‘œμ±Œ 수 μžˆλŠ” 객체λ₯Ό λœ»ν•œλ‹€.
  • μ–΄λ–€ 속성 λ³€κ²½μ‹œ ν”„λ‘μ‹œ 객체λ₯Ό 톡해 μ˜΅μ €λ²„ νŒ¨ν„΄μ„ κ΅¬ν˜„ν•œλ‹€.

πŸ“— ν”„λ‘μ‹œ νŒ¨ν„΄

  • λŒ€μƒ 객체에 μ ‘κ·Όν•˜κΈ° μ „ 접근에 λŒ€ν•œ 흐름을 κ°€λ‘œμ±„ λŒ€μƒ 객체 μ•žλ‹¨μ˜ 'μΈν„°νŽ˜μ΄μŠ€ μ—­ν• '을 ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μ΄λ‹€.

  • 이λ₯Ό 톡해 객체의 속성, λ³€ν™˜, λ³΄μ•ˆ, 캐싱, λ‘œκΉ…μ— μ‚¬μš©ν•œλ‹€.

- ν”„λ‘μ‹œ μ„œλ²„

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μžμ‹ μ„ 톡해 λ‹€λ₯Έ λ„€νŠΈμ›Œν¬ μ„œλΉ„μŠ€μ— κ°„μ ‘μ μœΌλ‘œ 접속할 수 있게 ν•΄μ£ΌλŠ” μ„œλ²„ ex) Nginx,CloudFlare
  • NginxλŠ” 비동기 이벀트 기반의 ꡬ쑰와 λ‹€μˆ˜μ˜ 연결을 효과적으둜 처리 κ°€λŠ₯ν•œ μ›Ή μ„œλ²„μ΄λ©°, 주둜 Node.jsμ„œλ²„ μ•žλ‹¨μ˜ ν”„λ‘μ‹œ μ„œλ²„λ‘œ ν™œμš©ν•œλ‹€.
    μ•žλ‹¨μ— Nginxλ₯Ό 거치게 ν•˜μ—¬ 읡λͺ…μ˜ μ‚¬μš©μžκ°€ μ§μ ‘μ μœΌλ‘œ μ„œλ²„μ— μ ‘κ·Όν•˜λŠ” 것을 μ°¨λ‹¨ν•˜κ³ , λ³΄μ•ˆμ„ κ°•ν™”ν•  수 μžˆλ‹€.
  • CORS(Cross-Origin Resource Sharing)λŠ” μ„œλ²„κ°€ μ›Ή λΈŒλΌμš°μ €μ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό λ‘œλ“œν•  λ•Œ λ‹€λ₯Έ μ˜€λ¦¬μ§„μ„ 톡해 λ‘œλ“œν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜λŠ” HTTP 헀더 기반 λ©”μ»€λ‹ˆμ¦˜μ΄λ‹€.
    μ˜ˆμ‹œλ‘œ, λ°±μ—”λ“œμ™€ ν”„λŸ°νŠΈμ—”λ“œ μ„œλ²„ 사이에 ν¬νŠΈλ²ˆν˜Έκ°€ 달라 CORSμ—λŸ¬κ°€ 생기면 ν”„λŸ°νŠΈμ—”λ“œ μ„œλ²„ μ•žλ‹¨μ— ν”„λ‘μ‹œ μ„œλ²„λ₯Ό λ‘¬μ„œ ν”„λŸ°νŠΈμ—”λ“œ μ„œλ²„μ—μ„œ μš”μ²­λ˜λŠ” μ˜€λ¦¬μ§„μ„ λ°±μ—”λ“œμ™€ κ°™κ²Œ λ§Œλ“€μ–΄ μ—λŸ¬λ₯Ό ν•΄κ²°ν•œλ‹€.

πŸ“— μ΄ν„°λ ˆμ΄ν„° νŒ¨ν„΄

  • μ΄ν„°λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ μ»¬λ ‰μ…˜μ˜ μš”μ†Œλ“€μ— μ ‘κ·Όν•˜λŠ” λ””μžμΈ νŒ¨ν„΄.
    μˆœνšŒν•˜λŠ” μ—¬λŸ¬κ°€μ§€ μžλ£Œν˜•μ˜ κ΅¬μ‘°μ™€λŠ” 상관없이 μ΄ν„°λ ˆμ΄ν„°λΌλŠ” ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ‘œ μˆœνšŒκ°€ κ°€λŠ₯ν•˜λ‹€.

πŸ“— λ…ΈμΆœλͺ¨λ“ˆ νŒ¨ν„΄

  • μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ₯Ό 톡해 private, public 같은 μ ‘κ·Ό μ œμ–΄μžλ₯Ό λ§Œλ“œλŠ” νŒ¨ν„΄μ„ λ§ν•œλ‹€.

πŸ“— MVC νŒ¨ν„΄

  • λͺ¨λΈ, λ·°, 컨트둀러둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ성 μš”μ†Œλ₯Ό λ‚˜λˆ„μ–΄ μš”μ†Œλ³„λ‘œ μ§‘μ€‘ν•΄μ„œ 개발, μž¬μ‚¬μš©μ„±κ³Ό ν™•μž₯성이 μš©μ΄ν•˜λ‹€λŠ” μž₯점이 μžˆλ‹€.
  • λͺ¨λΈ: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 데이터, μƒμˆ˜, λ³€μˆ˜λ“±μ„ λœ»ν•¨
  • λ·°: μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ μš”μ†Œλ₯Ό λ‚˜νƒ€λƒ„. μ‚¬μš©μžκ°€ λ³Ό 수 μžˆλŠ” 화면을 λœ»ν•¨
  • 컨트둀러: λͺ¨λΈκ³Ό λ·°λ₯Ό μ—°κ²°, μ΄λ²€νŠΈλ“± 메인 λ‘œμ§μ„ λ‹΄λ‹Ή, λͺ¨λΈκ³Ό 뷰의 생λͺ…μ£ΌκΈ° 관리
profile
개린이

0개의 λŒ“κΈ€