ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [면접을 μœ„ν•œ CS 전곡지식 λ…ΈνŠΈ] 1μž₯ λ””μžμΈ νŒ¨ν„΄
    Computer Science 2024. 4. 3. 21:18
    λ°˜μ‘ν˜•

    λ“€μ–΄κ°€κΈ°

     μ΄ 글은 "면접을 μœ„ν•œ CS 전곡지식 λ…ΈνŠΈ" μ„œμ μ„ 톡해 배운 λ‚΄μš© 쀑 1μž₯ λ””μžμΈ νŒ¨ν„΄μ— κ΄€ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.

     

    - λ…ΈμΆœλͺ¨λ“ˆ νŒ¨ν„΄(Revealing Module Pattern)

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

     

    - public
    ν΄λž˜μŠ€μ— μ •μ˜λœ ν•¨μˆ˜μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ©° μžμ‹ ν΄λž˜μŠ€μ™€ μ™ΈλΆ€ ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ λ²”μœ„
    - protected
    ν΄λž˜μŠ€μ— μ •μ˜λœ ν•¨μˆ˜μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ©° μžμ‹ ν΄λž˜μŠ€μ—μ„œμ˜ μ ‘κ·Ό κ°€λŠ₯ν•˜μ§€λ§Œ, μ™ΈλΆ€ ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό λΆˆκ°€λŠ₯ν•œ λ²”μœ„
    - private
    ν΄λž˜μŠ€μ—μ„œ μ •μ˜λœ ν•¨μˆ˜μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯(μžμ‹ ν΄λž˜μŠ€μ™€ μ™ΈλΆ€ ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό λΆˆκ°€λŠ₯ν•œ λ²”μœ„)

     

    - MVC νŒ¨ν„΄

     MVC νŒ¨ν„΄μ€ λͺ¨λΈ(Model), λ·°(View), 컨트둀러(Controller)둜 이루어진 λ””μžμΈ νŒ¨ν„΄μ΄λ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 개발 ν•  λ•Œ ꡬ성 μš”μ†Œλ₯Ό λΆ„λ¦¬ν•΄μ„œ κ°œλ°œν•  수 μžˆλ‹€. λ”°λΌμ„œ μž¬μ‚¬μš©μ„±κ³Ό 확정성이 μš©μ΄ν•˜λ‹€. ν•˜μ§€λ§Œ, λ³΅μž‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  κ²½μš°μ— λͺ¨λΈκ³Ό 뷰의 관계가 λ³΅μž‘ν•΄μ§€λŠ” 단점이 μžˆλ‹€.

     

    컨트둀러 -> 뷰

    뷰 -> 컨트둀러

    컨트둀러 -> λͺ¨λΈ

    λͺ¨λΈ -> 컨트둀러

    μœ„ 처럼 μ†Œν†΅ν•œλ‹€.

     

    - λͺ¨λΈ(Model)
    λͺ¨λΈμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 데이터인 λ°μ΄ν„°λ² μ΄μŠ€, μƒμˆ˜, λ³€μˆ˜ 등을 λ§ν•œλ‹€. 컨트둀러λ₯Ό 톡해 λͺ¨λΈμ„ μƒμ„±ν•˜κ±°λ‚˜ μˆ˜μ •ν•œλ‹€.
    - λ·°(View)
    λ·°λŠ” μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ μš”μ†Œλ₯Ό λ‚˜νƒ€λ‚Έλ‹€. ν•œλ§ˆλ””λ‘œ μ‚¬μš©μžκ°€ λ³Ό 수 μžˆλŠ” 화면을 λ§ν•œλ‹€. 변경이 μΌμ–΄λ‚˜λ©΄ μ»¨νŠΈλ‘€λŸ¬μ— μ „λ‹¬ν•œλ‹€.
    - 컨트둀러(Controller)
     μ»¨νŠΈλ‘€λŸ¬λŠ” ν•˜λ‚˜ μ΄μƒμ˜ λͺ¨λΈκ³Ό ν•˜λ‚˜ μ΄μƒμ˜ λ·°λ₯Ό μž‡λŠ” λ‹€λ¦¬μ˜ 역할을 ν•˜κ³  메인 λ‘œμ§μ„ λ‹΄λ‹Ήν•œλ‹€.

     

    - MVP νŒ¨ν„΄

     MVP νŒ¨ν„΄μ€ MVC νŒ¨ν„΄μœΌλ‘œλΆ€ν„° νŒŒμƒλœ κ²ƒμœΌλ‘œ, μ»¨νŠΈλ‘€λŸ¬κ°€ ν”„λ ˆμ  ν„°(Presenter)둜 ꡐ체된 λ””μžμΈ νŒ¨ν„΄μ΄λ‹€. μ΄λ•Œ, 뷰와 ν”„λ ˆμ  ν„°λŠ” μΌλŒ€μΌ 관계λ₯Ό κ°–κ²Œ λœλ‹€.

     

    ν”„λ ˆμ  ν„° <-> λ·°

    ν”„λ ˆμ  ν„° <-> λͺ¨λΈ

    μœ„ 처럼 μ†Œν†΅ν•œλ‹€.

     

    - MVVM νŒ¨ν„΄

     MVVM νŒ¨ν„΄μ€ MVC νŒ¨ν„΄μœΌλ‘œλΆ€ν„° νŒŒμƒλœ κ²ƒμœΌλ‘œ, μ»¨νŠΈλ‘€λŸ¬κ°€ λ·° λͺ¨λΈ(View Model)둜 바뀐 λ””μžμΈ νŒ¨ν„΄μ΄λ‹€. MVC νŒ¨ν„΄κ³ΌλŠ” λ‹€λ₯΄κ²Œ μ»€λ§¨λ“œ(Command)와 데이터 바인딩(Data Binding)을 가진닀. 뷰와 λ·° λͺ¨λΈ μ‚¬μ΄μ˜ μ–‘λ°©ν–₯ 데이터 바인딩을 μ§€μ›ν•œλ‹€. 이 νŒ¨ν„΄μ„ 가진 λŒ€ν‘œμ μΈ ν”„λ ˆμž„μ›Œν¬λ‘œλŠ” Vue.jsκ°€ μžˆλ‹€.

    - λ·° λͺ¨λΈ(View Model)
    λ·° λͺ¨λΈμ€ λ·°λ₯Ό 더 μΆ”μƒν™”ν•œ 계측이닀.
    - μ»€λ§¨λ“œ(Command)
    μ—¬λŸ¬ 가지 μš”μ†Œμ— λŒ€ν•œ 처리λ₯Ό ν•˜λ‚˜μ˜ μ•‘μ…˜μœΌλ‘œ μ²˜λ¦¬ν•  수 있게 ν•˜λŠ” 기법
    - 데이터 바인딩(Data Binding)
    화면에 λ³΄μ΄λŠ” 데이터와 μ›Ή λΈŒλΌμš°μ €μ˜ λ©”λͺ¨λ¦¬ 데이터λ₯Ό μΌμΉ˜μ‹œν‚€λŠ” 기법이닀. λ·° λͺ¨λΈμ„ λ³€κ²½ν•˜λ©΄ λ·°κ°€ λ³€κ²½λœλ‹€.

     

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

     μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°(Declarative Programming)μ΄λž€ "ν”„λ‘œκ·Έλž¨μ€ ν•¨μˆ˜λ‘œ 이루어진 것이닀."λΌλŠ” λͺ…μ œκ°€ 담겨 μžˆλŠ” νŒ¨λŸ¬λ‹€μž„μ΄λ‹€. 이 ν”„λ‘œκ·Έλž˜λ°μ˜ μΌμ’…μœΌλ‘œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(Functional Programming)이 μžˆλ‹€.

     ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 순수 ν•¨μˆ˜λ“€λ‘œ λ‘œμ§μ„ κ΅¬ν˜„ν•˜κ³  κ³ μ°¨ ν•¨μˆ˜λ₯Ό 톡해 μž¬μ‚¬μš©μ„±μ„ 높인 ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ΄λ‹€. νŠΉμ§•μœΌλ‘œ 컀링, λΆˆλ³€μ„± 등이 μžˆλ‹€.

    - 순수 ν•¨μˆ˜
     μΆœλ ₯이 μž…λ ₯μ—λ§Œ μ˜μ‘΄ν•˜λŠ” 것을 의미
    - κ³ μ°¨ ν•¨μˆ˜
    ν•¨μˆ˜κ°€ ν•¨μˆ˜λ₯Ό κ°’μ²˜λŸΌ λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„ λ‘œμ§μ„ 생성할 수 μžˆλŠ” 것

     

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

    객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object-Oriented Programming)은 데이터λ₯Ό 객체둜 μ·¨κΈ‰ν•˜μ—¬ 객체 내뢀에 μ„ μ–Έλœ λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜λŠ” 방식을 λ§ν•œλ‹€. νŠΉμ§•μœΌλ‘œ 좔상화, μΊ‘μŠν™”, 상속성, λ‹€ν˜•μ„±μ΄ μžˆλ‹€.

    • 좔상화(Abstraction) : λ³΅μž‘ν•œ μ‹œμŠ€ν…œμœΌλ‘œλΆ€ν„° 핡심적인 κΈ°λŠ₯을 κ°„μΆ”λ €λ‚΄λŠ” 것
    • μΊ‘μŠν™”(Encapsulation) : 객체의 속성과 λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜λ‘œ λ¬Άκ³  일뢀λ₯Ό 외뢀에 감좔어 μ€λ‹‰ν•˜λŠ” 것
    • 상속성(Inheritance) : μƒμœ„ 클래슀의 νŠΉμ„±μ„ ν•˜μœ„ ν΄λž˜μŠ€κ°€ μ΄μ–΄λ°›μ•„μ„œ μž¬μ‚¬μš©ν•˜κ±°λ‚˜ μΆ”κ°€, ν™•μž₯ν•˜λŠ” 것
    • λ‹€ν˜•μ„±(Polymorphism) : ν•˜λ‚˜μ˜ λ©”μ„œλ“œλ‚˜ ν΄λž˜μŠ€κ°€ λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ λ™μž‘ν•˜λŠ” 것(ex : μ˜€λ²„λ‘œλ”©, μ˜€λ²„λΌμ΄λ”©)
    - μ˜€λ²„λ‘œλ”© (Overloading)
    같은 이름을 가진 λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬κ°œ λ‘λŠ” 것을 λ§ν•œλ‹€. λ©”μ„œλ“œμ˜ νƒ€μž…, λ§€κ°œλ³€μˆ˜μ˜ μœ ν˜•μ΄λ‚˜ 개수둜 κ΅¬λΆ„ν•œλ‹€.
    public void hello(String s) {
    	System.out.println("Hello " + s);
    }
    
    public void hello(String s1, String s2) {
    	System.out.println("Hello " + s1 + "and " + s2);
    }​

    - μ˜€λ²„λΌμ΄λ”©(Overriding)
    주둜 λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©μ„ λ§ν•œλ‹€. μƒμœ„ ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 λ©”μ„œλ“œλ₯Ό ν•˜μœ„ ν΄λž˜μŠ€κ°€ μž¬μ •μ˜ ν•˜λŠ” 것을 λ§ν•œλ‹€.

    class Animal {
        public void shout() {
            System.out.println("Wal Wal!");
        }
    }
    
    class Cat extends Animal {
    
        @Override
        public void shout() {
            System.out.println("Meow!");
        }
    }

     

     κ°μ²΄μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ 섀계할 λ•ŒλŠ” SOLID 원칙을 μ§€μΌœμ•Ό ν•œλ‹€.

    • 단일 μ±…μž„ 원칙(Single Responsibility Principle) : λͺ¨λ“  ν΄λž˜μŠ€λŠ” 각각 ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄ μ–΄λ–€ ν΄λž˜μŠ€κ°€ A와 κ΄€λ ¨λœ 둜직이라면 이λ₯Ό μˆ˜μ •ν•΄λ„ A와 κ΄€λ ¨λœ μˆ˜μ •μ΄μ—¬μ•Ό ν•œλ‹€.
    • 개방-폐쇄 원칙(Open Closed Principle) : μœ μ§€ 보수 사항이 생긴닀면 μ½”λ“œλ₯Ό μ‰½κ²Œ ν™•μž₯ν•  수 μžˆλ„λ‘ ν•˜κ³ , μˆ˜μ •ν•  λ•ŒλŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•˜λŠ” 원칙이닀. λ‹€μ‹œ λ§ν•΄μ„œ 기쑴의 μ½”λ“œλ₯Ό λ³€κ²½ν•˜λŠ” 것을 지양해야 ν•œλ‹€λŠ” 것이닀.
    • λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙(Liskov Substitution Principle) : ν”„λ‘œκ·Έλž¨μ˜ κ°μ²΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ 정확성을 κΉ¨λœ¨λ¦¬μ§€ μ•ŠμœΌλ©΄μ„œ ν•˜μœ„ νƒ€μž…μ˜ 객체둜 λ°”κΏ€ 수 μžˆμ–΄μ•Ό ν•œλ‹€. μ–΄λ–€ 클래슀λ₯Ό 또 λ‹€λ₯Έ ν΄λž˜μŠ€κ°€ μƒμ†ν•œλ‹€λ©΄ μƒμœ„ 클래슀, ν•˜μœ„ ν΄λž˜μŠ€κ°€ 되게 λœλ‹€. 이 λ•Œ, μƒμœ„ 클래슀 객체에 ν•˜μœ„ 클래슀 객체λ₯Ό 넣어도 λ¬Έμ œκ°€ 없도둝 ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.
    • μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙(Interface Segregation Principle) : ν•˜λ‚˜μ˜ 일반적인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“œλŠ” 것 보닀 ꡬ체적으둜 μ—¬λŸ¬ 개의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•˜λŠ” 원칙이닀.
    • 의쑴 μ—­μ „ 원칙(Dependency Inversion Principle) : μƒμœ„ 계측은 ν•˜μœ„ κ³„μΈ΅μ˜ 변화에 λŒ€ν•œ κ΅¬ν˜„μœΌλ‘œλΆ€ν„° 독립해야 ν•œλ‹€.

     

    - μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ°

     μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ°(Procedural Programming)은 둜직이 μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  연속적인 계산 κ³Όμ •μœΌλ‘œ 이루어진닀. λͺ¨λ“ˆν™”ν•˜κΈ°κ°€ μ–΄λ ΅κ³  μœ μ§€λ³΄μˆ˜μ„±μ΄ λ–¨μ–΄μ§€λŠ” 단점이 μžˆλ‹€.

    λ°˜μ‘ν˜•
Designed by Tistory.