✏️ 스터디 모음집/디자인 패턴 스터디
-
디자인 패턴 스터디 기록 (7) - 복합 패턴과 MVC✏️ 스터디 모음집/디자인 패턴 스터디 2022. 12. 12.
복합 패턴의 필요성(feat. 오리 시뮬레이션 게임 만들기) 🐥 작고 귀여운 오리 시뮬레이터 public interface Quackable{ public void quack(); } void simulate(){ Quackable mallardDuck = new MallardDuck(); Quackable duckCall = new DuckCall(); Quackable rubberDuck = new rubberDuck(); simulate(mallardDuck); simulate(duckCall); simulate(rubberDuck); } void simulate(Quackable duck){ duck.quack(); //어떤 오리든 quack()을 호출해서 테스트 가능(다형성) } 📢 거위용 시뮬..
-
클린코드 - 깨끗한 테스트 코드 짜기✏️ 스터디 모음집/디자인 패턴 스터디 2022. 11. 5.
테스트 코드를 작성함에 있어서 F.I.R.S.T 규칙 이란? F : 빠르게 동작하는 테스트 코드 I : 독립적인 기능을 테스트하는 테스트 코드 → 기능(단위테스트라면, 함수)당 assert 하나! R : 반복 가능한 테스트 코드 S : 여기저기 들어다 볼 필요 없이, 테스트 코드 만으로 자가 검증이 끝나는 테스트 코드 T : 실제 코드를 구현 하기 전에 적시에 테스트 코드를 작성하자 BUILD-OPERATE-CHECK 패턴 ? 깨끗한 테스트 코드는 가독성이 제일 중요하다! BUILD : 테스트 자료를 만든다. // 보통 이 단계에서 목업 데이터를 만들거나, 테스트용 데이터 베이스에 데이터를 넣는다. OPERATE : 테스트 자료를 조작한다. // 이 단계에서는 테스트 하고자 하는 시스템의 함수를 호출 C..
-
디자인 패턴 스터디 기록 (6) - 싱글톤 패턴✏️ 스터디 모음집/디자인 패턴 스터디 2022. 11. 2.
싱글톤 패턴 객체의 인스턴스가 오직 1개 “싱글톤 패턴” 컴퓨터 측면에서 더 디테일 하게 말하면, 프로세스가 실행 중에 "오직 하나의 오브젝트만 생성되도록 강제" 하는 디자인 패턴 입니다. 싱글톤 디자인 패턴을 가진 클래스를 사용해서 여러개의 오브젝트를 만들더라도 단 한개만 만들어집니다. 아래의 경우를 살펴볼까요? class Singleton { static instance; // 한번만 메모리 공간을 차지 constructor() { if (!Singleton.instance) { Singleton.instance = this } return Singleton.instance; } } const s1 = new Singleton(); const s2 = new Singleton(); 위 코드에서 s1 ..
-
디자인 패턴 스터디 기록 (5) - 팩토리 패턴, 의존성 역전✏️ 스터디 모음집/디자인 패턴 스터디 2022. 11. 2.
4. 객체지향 팩토리 패턴 이번장에서는 최대한 느슨한 결합으로 객체지향 디자인을 하는게 목표인 장입니다. 4-1. Simple Factory 예제 1) Pizza orderPizza() { Pizza pizza = new Pizza(); /* 이부분 */ *if(type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("greek")) { pizza = new GreekPizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); }* pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pi..
-
디자인 패턴 스터디 기록 (4) - 데코레이터 패턴✏️ 스터디 모음집/디자인 패턴 스터디 2022. 11. 2.
데코레이터 패턴 코드를 직접 수정하지 않고 코드를 확장하는 기법. 주로 특정한 로직에 대한 전처리, 후처리가 계속해서 반복되는 경우 이를 재사용 하는 목적으로 사용된다. 예를 들어 백엔드에서 REST API를 작성하려고 할때, HTTP Method를 엔드포인트 별로 다르게 설정해주고 싶다면, 매번 엔드포인트를 작성 할 때마다 어떠한 HTTP Method로 요청 되었는 지 확인하는 로직이 필요할 것이다. 이런 경우 메소드 데코레이터를 사용하여 전처리 과정을 재사용 할 수 있다. from django.views.decorators.http import require_http_methods @require_http_methods(["GET", "POST"]) # HERE! def my_view(request)..
-
디자인 패턴 스터디 기록 (3) - 객체 간의 강한 결합 VS 느슨한 결합✏️ 스터디 모음집/디자인 패턴 스터디 2022. 10. 27.
강한 결합 VS 느슨한 결합 이것을 이해하기 전에 먼저 객체간의 강한 결합에 속하는 상속(= is-a 관계) 을 보자! public class Lotto { protected List lottoNumbers; public Lotto(List lottoNumbers) { this.lottoNumbers = new ArrayList(lottoNumbers); } public boolean contains(Integer integer) { return this.lottoNumbers.contains(integer); } ... } public class WinningLotto extends Lotto { private final BonusBall bonusBall; public WinningLotto(List..
-
디자인 패턴 스터디 기록 (2) - 옵저버 패턴✏️ 스터디 모음집/디자인 패턴 스터디 2022. 10. 27.
옵저버 패턴이란? 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고, 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의하는 방식 옵저버 패턴의 구조 Subject 객체 Subject가 알고 있는 것(멤버 변수, 프로퍼티) → Observer들이 관심있어하는 타깃 인 상태값을 가지고 있음 → Observer들을 저장 할 컨테이너를 가지고 있음 Subject 하는 일(멤버 함수, 메소드) → Observer를 컨테이너에 추가 → Observer를 컨테이너에 삭제 → 상태값이 바뀌었을때 컨테이너를 순회하며 등록된 옵저버들에게 알리기 → 상태값에 대한 getter와 setter가 있을 수 있다. Observer 객체 Observer가 알고 있는 것(멤버 변수, 프로퍼티) → 없다. O..
-
디자인 패턴 스터디 기록 (1)✏️ 스터디 모음집/디자인 패턴 스터디 2022. 10. 27.
이전에 사내에서 진행 했던 클린코드 스터디에서 처음 접했 던 어댑터 패턴을 실무에도 적용해 보면서 다음에는 디자인 패턴에 대해 더 공부하면 좋겠다는 생각이 들었고 팀원들에게 디자인 패턴 스터디를 제안했다. 스터디는 헤드퍼스트 디자인 패턴 책을 메인으로, 자바스크립트 디자인 패턴책을 부교재로 정해 매주 2개의 패턴을 알아가는 식으로 진행하기로 했다. 스터디를 진행한다는 소식에 다른 팀에서 게임을 개발하시던 개발자 분들도 최근 게임에 적용할 디자인 패턴을 공부 중이셨다고 스터디에 함께 합류 하기로 했다! 🎉 그러면서 아래 사이트를 추천해 주셨다! 역시 사람이 많이 모여야 여러 정보가 쌓이는것 같다. 앞으로의 스터디가 너무 기대 된다. https://www.patterns.dev/