본문 바로가기

면접을 위한 CS 전공지식 노트/1장 디자인 패턴과 프로그래밍 패러다임5

MVP 패턴 MVP 패턴MVC 패턴으로부터 파생되었으며 MVC에서 컨트롤러가 프레젠터로 교체된 패턴모델 (Model), 뷰(View), 프레젠터(Presenter)로 구성모델 Model**데이터(데이터베이스, 상수, 변수)**와 비즈니스 로직(처리 역할) 담당Presenter가 요청한 데이터를 제공하거나 업데이트데이터베이스에서 정보를 가져오거나 저장뷰 View사용자 인터페이스 담당ex) 버튼 클릭, 텍스트 입력 등프레젠터 Presenterview와 Model 사이에 중재자 역할사용자와 인터페이스의 이벤트를 감지하고, 비즈니스 로직 수행Model과 상호작용하여 데이터를 가져오거나 업데이트하고, view에 데이터를 업데이트 하는 역할view와 1 대 관계◽ MVC 패턴과의 차이점MVC 패턴과 다르게 UI(View)와 로.. 2024. 9. 10.
MVC 패턴 MVC 패턴은 모델(Model), 뷰(View), 컨트롤러(Controller)로 이루어진 디자인 패턴 애플리케이션 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다. [장점]각 구성 요소의 역할이 명확하게 분리되어 있어, 코드 가독성과 유지 관리 용이함구성 요소 간 낮은 결합도로 인해 코드 재사용성이 높아짐개별 구성 요소를 독립적으로 개발, 수정 및 테스트 가능하여 확장성 용이[단점]서비스가 커질수록 컨트롤러의 코드가 증가컨트롤러 중복 로직 발생할 수 있음모델(Model)핵심적인 데이터(데이터베이스, 상수, 변수)와 비즈니스 로직을 담당⇒ 데이터 저장소와 상호 작용, 데이터 처리 및 유효성 검사 등 작업 수행ex) 사각형 모양 박스 안에 글자가 들어 .. 2024. 9. 6.
옵저버패턴 옵저버 패턴은 옵저버(=관찰자)들이 관찰하고 있는 대상자의 상태가 변화가 있을 때마다 대상자는 직접 혹은 간접적으로 각 관찰자들에게 변화를 통지하고, 관찰자들은 알림을 받아 조치를 취하는 행동 패턴 ⇒ Publisher/Subscriber(발행/구독) 모델1:M 의존성을 갖는다.주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다.ex) 유튜브 구독유튜버 = 발행자 = 대상자구독자 = 관찰자유튜버가 영상을 올리거나 글이 올라오면 구독자들에게 영상이 업로드 되거나 글이 올라왔다는 알림이 온다. 유튜브 채널을 구독하지 않은 사람들에게는 알림이 가지 않는다.옵저버 패턴 흐름Subject(관찰 대상자)와 여러개의 Observer(관찰자)가 일 대 다 관계로 구성되어 있음관찰 대상인 Subject 상태가 변경되.. 2024. 9. 6.
MVVM 패턴 MVVM 패턴소프트웨어 디자인 패던, UI 개발에 사용. 뷰(View)와 모델(Model) 사이의 강한 결합을 줄이기 위해 도입Model : 애플리케이션의 데이터와 비즈니스 로직을 관리View : 사용자 인터페이스 요소ViewModel : View와 Model 사이에서 데이터를 중계하고, 데이터 바인딩을 통해 View에 데이터를 전달MVC와 MVVM의 차이점사용자 입력 처리:MVC: 사용자 입력을 Controller가 직접 처리MVVM: 사용자 입력은 ViewModel이 처리합니다.데이터 바인딩:MVC : 데이터 바인딩이 자동 X, Controller를 통해 수동으로 처리MVVM : 데이터 바인딩이 자동, View와 ViewModel 간의 데이터 동기화가 프레임워크에 의해 자동으로 처리예시 코드# Mod.. 2024. 9. 5.
전략 패턴 전략 패턴객체의 행위를 클래스를 통해 캡슐화하여 동적으로 행위를 변경할 수 있게 해주는 패턴 장점:코드의 유연성 : 서로 다른 알고리즘을 쉽게 교체할 수 있으므로, 코드의 유연성 높아짐재사용성 : 특정 행동(전략)을 별도의 클래스로 분리함으로써 여러 객체에서 재사용런타임에서 전략 선택 : 인터페이스를 통해 다양한 알고리즘(전략)을 구현 가능, 이를 런타임에 선택하거나 교체단점:클래스 수 증가 : 클래스로 분리하여 클래스의 수 증가함. 이로인해 코드 복잡해짐클라이언트 코드의 복잡성 : 객체 생성 및 관리 로직 추가됨의존성 증가 : 잘못 설계 시 유지보수 어려움예시 코드# 전략class MusicStrategy: def recommend_song(self): pass# 발라드class Ba.. 2024. 9. 5.