[2024.06.10 TIL] 내일배움캠프 38일차 (Node.js 심화 강의, 객체 지향 프로그래밍)

My_Code·2024년 6월 10일
0

TIL

목록 보기
50/113
post-thumbnail

본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.


💻 TIL(Today I Learned)

📌 Today I Done

✏️ 객체지향

  • 객체지향은 절차를 간소화하는 것이지, 결코 절차를 무시하는 것이 아님

  • 데이터와 이를 처리하기 위한 기능들을 모듈 내부에 체계적으로 작성

  • 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행 순서와 흐름을 짜는 방식

  • 데이터의 무결성을 보장하고 코드의 재사용성이 높음


✏️ 절차지향

  • 절차지향은 전통적인 프로그래밍 방식

  • 데이터와 이를 처리하기 위한 기능들을 별도로 분리해서 작성

  • 프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수를 설계하는 방식

  • 프로젝트의 규모가 커질수록 구성 요소들 간의 결합도가 높아지고 데이터의 무결성을 보장하기 어려움


✏️ 객체지향 프로그래밍(Object-Oriented Programming, OOP)

  • 객체지향 프로그래밍은 데이터와 그 데이터를 처리하는 메서드가 같은 모듈 내부에 배치되는 프로그래밍 방식

  • 코드의 좋은 가독성, 높은 재사용성, 쉬운 유지보수를 위해 사용

  • 객체지향 프로그래밍 방식은 데이터와 기능이 밀접하게 연결되어 있기 때문에, 코드의 구조와 동작을 직관적으로 파악할 수 있음

  • 만약 어떤 문제가 발생하면 빠르게 문제를 인지하고, 어떤 코드에서 오류가 발생했는지 빠르게 찾아보며, 오류를 빠르게 고쳐 개발하는 시간을 최대한으로 줄이는 것을 위해 사용함


✏️ 객체지향 프로그래밍의 핵심 원칙

  • 캡슐화 (Encapsulation)

    • 객체 내부의 세부적인 사항을 감추는 것, 즉 중요한 정보를 외부에 노출시키지 않도록 하는 것
    • 클래스 내부의 변수에 직접 접근하지 못하고 특정 메서드를 통해서 값을 수정하고 가져갈 수 있음
    • 자바스크립트에서는 완벽한 캡슐화를 지원하지 않기 때문에 언더바(_)를 사용해서 일종의 규칙을 만들어 사용함

  • 상속 (Inheritance)

    • 부모 클래스가 가진 특징(데이터, 메서드)을 자식 클래스가 그대로 물려받는 것
    • 이렇게 부모 클래스의 특징을 자식 클래스가 물려받아 코드의 중복을 제거하고 코드의 재사용성을 증대시킴
    • 즉, 부모 클래스의 코드를 수정하면 자식 클래스도 해당 변경 사항을 반영할 수 있음
    • extends를 통해 상속 관계를 표현

  • 추상화 (Abstraction)

    • 공통된 부분을 모아서 상위 개념으로 새롭게 정의하는 것을 의미
    • 이를 통해 전체 시스템의 구조를 명확하게 이해할 수 있음
    • 인터페이스(Interface)를 이용해서 공통적인 부분을 묶음
    • 인터페이스(Interface)는 클래스를 정의할 때, 메서드와 변수만 정의해서 implements를 사용하는 클래스에서 선언된 메서드나 변수의 구현을 강제하여 코드의 일관성을 유지함

  • 다형성 (Polymorphism)

    • 다형성은 클래스가 다양한 형태로 동작하는 것을 의미
    • 즉, 동일한 메서드 명을 사용해도, 클래스마다 그 메서드가 다르게 동작하게 만드는 것
    • 대표적으로 오버로딩, 오버라이딩이 다형성의 예시임
    • 오버로딩 : 새로운 메서드를 정의 (메서드 명은 같지만 매개변수, 동작 모두 다르게 사용)
    • 오버라이딩 : 상속받은 기존의 메서드를 재정의 (메서드 명, 매개변수는 같지만 다른 동작을 함)

✏️ 객체지향 설계 5원칙(SOLID)

  • 단일 책임의 원칙 (Single Responsibility Principle, SRP)

    • 모든 클래스는 각각 하나의 책임만 가져야 한다는 원칙
    • 클래스는 그 책임을 완전히 캠슐화해야 함
    • 사칙연산 함수 계산 클래스가 있다고 할 때, 이 클래스는 오직 사칙연산 기능만을 책임짐
    • 이 클래스를 수정할려면 사칙연산 함수와 관련된 문제여야 함

  • 개방-폐쇄 원칙 (Open-Closed Principle, OCP)

    • 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있다는 원칙
    • 즉, 기존의 코드를 변경하지 않으면서(Closed), 기능을 추가할 수 있어야(Open) 함

  • 리스코프 치환 원칙 (Liskov substitution principle, LSP)

    • 하위 타입의 객체는 상위 타입의 객체에서 가능한 행위를 수행할 수 있어야 한다는 원칙
    • 즉, 상위 타입 객체를 하위 타입 객체로 대체해도 정상적으로 동작해야 함

  • 인터페이스 분리 원칙 (Interface segregation principle, ISP)

    • 클라이언트는 자신이 사용하는 메서드에만 의존해야 한다는 원칙
    • 특정 클라이언트를 위한 여러 개의 인터페이스가 범용으로 사용할 수 있는 인터페이스 한 개보다 나음

  • 의존성 역전 원칙 (Dependency Inversion Principle, DIP)

    • 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다는 원칙
    • 의존 관계를 맺을 때 변화하기 쉬운 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 것
    • 즉, 구체적인 클래스보다는 인터페이스나 추상 클래스와 관계를 맺으라는 것을 의미


📌 Tomorrow's Goal

✏️ Node.js 심화 강의 시청

  • 오늘 끝내지 못한 강의를 시청 후 빨리 끝난다면 개인과제에 들어갈 예정

  • Layered Architecture Pattern은 개인과제를 통해 사용하는 방법을 익힐 예정



📌 Today's Goal I Done

✔️ Node.js 심화 강의 시청

  • 오늘은 객체지향과 Layered Architecture Pattern에 대해 학습함

  • 객체지향과 절차지향의 차이는 면접에서 많이 나올 수 있기에 확실히 구분 지을 수 있어야 함

  • 객체지향의 캡슐화, 추상화, 상속, 다형성은 정확히 말하면 자바스크립트로 모두 구현이 되지 않음

  • 그렇기에 TypeScript를 통해서 객체지향을 구현이 가능함

  • Layered Architecture Pattern는 아직 생소하지만 가독성과 유지보수를 위한 과정이기에 반드시 필요할 것 같음



📌 참고 자료

profile
조금씩 정리하자!!!

0개의 댓글