[신입 CS 질문] 디자인 패턴/프로그래밍 패러다임

박의진·2023년 7월 12일
0

CS

목록 보기
1/8
post-custom-banner

디자인 패턴

프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것을 의미

싱글톤 패턴

  • 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
  • 하나의 인스턴스를 만들어 놓고 해당 인스턴드를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스 생성 비용이 줄어 듦
  • 단위테스트를 할때 독립적인 인스턴스를 만들기가 어렵다는 단점이 있음
  • 모듈 간 결합을 강하게 만든다는 단점을 의존성 주입으로 극복
  • 데이터베이스 연결 모듈에 많이 사용

의존성

  • 종속성 이라고도 하며 A가 B에 의존성이 있다는 것은 B의 변경사항에 대해 A또한 변해야 된다는 것을 의미

의존성 주입

  • 메인 모듈이 직접 다른 하위 모듈에 대한 의존성을 주기 보다는 중간에 의존성 주입자가 이 부분을 가로채 메인 모듈이 간접적으로 의존성을 주입하는 방식

  • 구현할 때 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어주기 때문에 애플리케이션 의존성 방향이 일관되고, 모듈간 관계들이 명확해짐

의존성 주입 원칙

  • 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 함

의존성 주입 단점

  • 모듈들이 더 분리되므로 클래수 수가 늘어나 복잡성이 증가한다는 단점

모듈

  • 함수나 변수 또는 클래스를 기능단위로 분해해서 재사용 및 공유 가능한 수준으로 만들어진 단위

모듈화

  • 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하도록 하는 소프트웨어 설계 기법

라이브러리

  • 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것을 의미
  • 폴더명, 파일명에 대한 규칙이 없고 프레임워크에 비해 자유로움

프레임워크

  • 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것을 의미
  • 폴더명, 파일명에 대한 규칙이 있으며 라이브러리에 비해 엄격

팩토리 패턴

  • 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화 한 패턴
  • 상속관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위클래스에서 객체 생성에 관한 내용을 결정

옵저버 패턴

  • 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드를 통해서 옵저버 목록에 있는 옵저버들에게 변화를 알리는 패턴
  • MVC 패턴에서 사용 됨

파사드 패턴

  • 하위 시스템을 쉽게 사용할 수 있게 고급 인터페이스를 정의하는 패턴

MVC 패턴

  • 모델, 뷰, 컨트롤러로 이루어진 패턴
  • 모델은 데이터 관리 및 비지니스 로직 처리하는 부분
  • 뷰는 사용자 인터페이스 요소, 사용자가 보는 화면 의미
  • 컨트롤러는 모델과 뷰 사이의 중계 역할을 함

MVP 패턴

  • 컨트롤러가 프레젠터로 교체된 패턴
  • 뷰와 프레젠터는 일대일 관계여서 MVC보다 더 강한 결합을 지닌 패턴

MVVM 패턴

  • 컨트롤러가 뷰 모델로 바뀐 패턴
  • 뷰모델은 뷰를 더 추상화한 계층
  • 뷰와 뷰 모델 사이의 양방향 데이터 바인딩을 지원

프로그래밍 패러다임

선언형과 함수형 프로그래밍

  • 선언형은 무엇을 풀어내는 가에 집중
  • 함수형은 선언형 패러다임의 일종으로 작은 순수 함수들을 블록처럼 쌓아 로직을 구현하고 고차함수를 통해 재사용성을 높인 프로그래밍

순수함수

  • 출력이 입력에만 의존하는 것을 의미

고차함수

  • 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 것을 말함
  • 고차함수를 쓰기 위해서는 해당 언어가 일급 객체라는 특징을 가져야함

객체지향 프로그래밍(OOP)

  • 객체들의 집합으로 프로그램의 상호 작용을 표현
  • 데이터를 객체로 취급하여 객체 내부에 선언된 메소드를 활용하는 방식
  • 설계에 많은 시간이 소요되고 처리 속도가 느림

객체 지향 프로그래밍의 특징

추상화

  • 핵심적인 개념 또는 기능을 간추려 내는 것

캡슐화

  • 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉

다형성

  • 상위 클래스가 동일한 메시지로 하위 클래스들을 서로 다르게 동작시키는 객체 지향 원리
  • 오버로딩
  • 오버라이딩

상속성

  • 상위 클래스의 특성을 하위클래스가 이어받아 재사용하거나 확정하는 것

오버로딩과 오버라이딩

오버로딩

  • 같은 이름을 가진 메서드를 여러개 두는것을 말함.
  • 메서드의 타입, 매개변수의 유형, 개수 등이 달라짐
  • 컴파일 중에 발생하는 정적 다형성

오버라이딩

  • 상위 클래스로부터 상속받은 메서드를 하위클래스에서 재 정의하여 사용하는 것
  • 런타임 중에 발생하는 동적 다형성

OOP의 장점과 단점

장점

  • 코드 재사용 용이
  • 유지보수 용이
  • 생산성 향상

단점

  • 실행속도 저하
  • 설계에 소요가 많음

OOP 5가지 설계 원칙

단일책임원칙

  • 하나의 클래스는 하나의 책임만 가진다.

개방-폐쇠원칙

  • 확장에는 열려있고 변경에는 닫혀있다.

리스코프치환원칙

  • 프로그램의 정확성을 깨드리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함

인터페이스분리원칙

  • 일반적인 인터페이스 보다는 구체적인 여러개의 인터페이스를 만들어야 함

의존 역전 원칙

  • 추상화된 인터페이스나 상위클래스를 두어 변하기 쉬운것의 변화에 영향을 받지 않게 하는 원칙

절차형 프로그래밍

  • 로직이 수행되어야 할 연속적인 계산 과정으로 이루어짐
profile
주니어 개발자의 개발일지
post-custom-banner

0개의 댓글