일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Funtional programming
- 함수형
- 코딩
- ELECTRON
- 프로그래밍
- angular
- react.js
- Ramda.js
- 리액트
- 개발
- vue.js
- React
- 자바스크립트
- Front-End
- VUE
- JavaScript
- graphql
- VanillaJS
- Programming
- code-first
- It
- ECMAScript6
- Design Pattern
- apollo client
- Node.js
- goorm.io
- 프론트엔드
- 디자인패턴
- context api
- schema-first
목록design patterns (14)
공부하는 블로그
파사드 패턴 파사드의 뜻은, 건물 출입구의 정면 외벽을 나타내는 말이다. 건축에서 파사드의 궁극적인 목표는 '소통'이라고 한다. 소통이라는 목표와 걸맞게 파사드 소프트웨어 디자인 패턴 역시 소통하는 역할을 한다. 로직을 단순하게 잡는다면 단순하고, 복잡하다면 복잡하게 만들 수 있는 게 파사드 패턴이라고 설명들을 하는 것 같다. 파사드 패턴을 사용한 대표적인 예로는 SLF4J가 있다고 한다. (Simple Logging Facade for Java) 예제를 찾아보았는데 홈시어터 예제가 있었다. 영화를 보려고 하면, 스피커의 음량을 높이고, 팝콘을 튀기고, TV를 켜고, DVD 플레이어가 재생되고를 한번에 할 수 있다는 식의 예제가 있어서 처음에는 파사드 패턴을 공부하면서는 IoT 스마트 스피커 같은건가? ..
#12 디자인 원리 내 나름대로 잘 짠 코드가 아닌 디자인 원리가 적용된 코드. 이는 유지 보수가 용이하고, 유연하고, 확장성이 좋다. OCP, 개방 폐쇄 원칙 (기존 코드가) 수정에는 닫혀있고, 확장에는 열려 있는 코드. 스타크래프트로 생각해보자면, 클래스가 있는데, 시민 자체는 변경하지 않고, 다른 유닛으로 확장하는 것으로 생각할 수 있겠지? class 테란시민 extends 마린 {} 등의 코드로 확장할 수 있겠다. 앞서서 살펴본 악기 상점 프로그램을 기억해보자. InstrumentSpec 클래스는 기저 추상 클래스였고, 이를 확장해서 GuitarSpec, MandolinSpec 등이 matches() 메서드에 구현을 했다. InstrumentSpec은 수정에는 닫혀있고, 확장에는 열려있다고 생각할..
#11 - 아키텍쳐 우리는 큰 문제를 작은 기능들의 조각으로 나누었고, 작은 조각에 대해서는 해결 방법을 알고 있다. 그러나 유스케이스 다이어그램과 특징 리스트, 그 외에도 고려해야 할 사항이 많다. 처음에 우리는 무엇을 해야할까? 당연하게도 요번 챕터 주제와 같이 아키텍쳐가 필요하다. 아키텍쳐는 시스템의 분할, 나뉜 부분들 사이의 연결과 상호 작용 메커니즘, 그리고 시스템의 디자인에 사용된 원리와 결정 사항들을 담고 있는 시스템의 구조를 말한다. 아키텍쳐는 디자인의 구조이고, 프로그램의 가장 중요한 부분들과 그들 사이의 관계를 명확히 보여주며, 뒤죽박죽 복잡한 내용을 잘 정리된 프로그램으로 바꾸는데 도움을 준다. 우리가 1장에서 말했던 를 여기서도 적용 가능하다. 기능 첫째 단계는 이다. 특징 리스트를..
본 블로깅은 Head first OOAD: 세상을 설계하는 객체지향 방법론 (한빛미디어) 책을 Typescript 문법으로 전환하며 공부하는 글입니다. 글을 읽기 전에, 광고 배너 한번씩만 클릭 부탁드립니다. 블로그 운영에 큰 보탬이 됩니다 :) 그동안 소프트웨어 디자인을 함께 공부했지만, 사실 실제 프로젝트는 5~10개 정도의 클래스로는 어림도 없다. 거대한 프로그램을 만드려면 어떻게 해야할까? 작은 문제를 풀어가는 방식과 마찬가지로, 큰 문제도 해결할 수 있다. 우리는 앞서 좋은 프로그램을 만드는 3단계를 배웠다. 이는 규모가 작건 적건 동일하게 적용된다. 나의 SW가 고객이 원하는 기능을 하게 하라 객체지향의 기본 원리를 적용해 SW를 유연하게 하라 유지보수와 재사용이 쉬운 디자인을 위해 노력하라 ..
#9 좋은 디자인 = 유연한 소프트웨어 : 변하지 않는 것은 없다 (2) 본 블로깅은 Head first OOAD: 세상을 설계하는 객체지향 방법론 (한빛미디어) 책을 Typescript 문법으로 전환하며 공부하는 글입니다. 글을 읽기 전에, 광고 배너 한번씩만 클릭 부탁드립니다. 블로그 운영에 큰 보탬이 됩니다 :) 프로그램을 변경할 때마다 모든 코드의 부분을 뜯어고치는 일은 굉장히 짜증나고 성가신 일이다. 나는 제왕적 사고방식에 찌들어 있던 사람이다보니, 이런 일이 빈번했다. 그러던 중 소프트웨어를 유연하고 튼튼하게 만들 방법은 없을까? 하는 생각이 든다. 객체지향이 어떻게 프로그램을 유연하게 만들까? 어떻게 높은 응집도가 결합도에 도움이 되는지도 이 글을 통해서 공부해본다. 악기 검색 프로그램을 돌..
#8 좋은 디자인 = 유연한 소프트웨어 : 변하지 않는 것은 없다 본 블로깅은 Head first OOAD: 세상을 설계하는 객체지향 방법론 (한빛미디어) 책을 Typescript 문법으로 전환하며 공부하는 글입니다. 글을 읽기 전에, 광고 배너 한번씩만 클릭 부탁드립니다. 블로그 운영에 큰 보탬이 됩니다 :) 우리가 #1~#4에 걸쳐서 보았던 기타 상점 프로그램으로 다시 돌아가본다. 고갱님의 기타 상점 사업이 번창해서 이제는 "현악기" 상점으로 진화를 하게 된다. 축하한다. 🎉 만돌린이라는 악기를 취급할 예정이라고 하는데, 현재 프로그램에서 고갱님이 만돌린을 취급할 수 있게 만드려면 어떻게 해야할까? 아래는 클래스 다이어그램이 있다. 이제 만돌린을 검색할 수 있게 변경해보자. 여기서 Instrument..
#7 - 분석: 내가 만든 소프트웨어를 실제 세상으로(2) 본 블로깅은 Head first OOAD: 세상을 설계하는 객체지향 방법론 (한빛미디어) 책을 Typescript 문법으로 전환하며 공부하는 글입니다. 글을 읽기 전에, 광고 배너 한번씩만 클릭 부탁드립니다. 블로그 운영에 큰 보탬이 됩니다 :) 코드와 메소드 분석 주 경로 주인 강아지가 밖에 나가려고 짖는다. 강아지 소리 인식기가 강아지 소리를 "듣는다" - BarkRecognizer.recognize, Bark 주인 강아지가 짖으면 강아지 소리 인식기가 여는 요청을 강아지 문에 보낸다. - BarkRecognizer.recognize, open(), allowedBarks 강아지 문이 열린다. - DogDoor, open() 주인 강아지가 밖..
#7 - 분석: 내가 만든 소프트웨어를 실제 세상으로 본 블로깅은 Head first OOAD: 세상을 설계하는 객체지향 방법론 (한빛미디어) 책을 Typescript 문법으로 전환하며 공부하는 글입니다. 글을 읽기 전에, 광고 배너 한번씩만 클릭 부탁드립니다. 블로그 운영에 큰 보탬이 됩니다 :) 소프트웨어가 출시되고 사용자들이 사용하기 시작하면 많은 불만이 나오기 시작한다. 지난 시간 개발한 강아지 음성 인식 기능에 대한 컴플레인으로 "옆집 개가 짖어도 문이 열린다" 라는 피드백이 들어올 수 있다. 여기서 현실 세계와 프로그래머가 꿈꾸는 완벽한 세계 사이의 간극이 벌어진다. 가령 내가 개발한 프로그램의 경우에도 알림톡 기능과 사용자용 예약 앱을 만들면서 "알림톡 하단 버튼에 예약 상세정보 페이지 링크..
Head first OOAD를 타입스크립트로 읽기 #6 - 요구사항 변경본 블로깅은 Head first OOAD: 세상을 설계하는 객체지향 방법론 (한빛미디어) 책을 Typescript 문법으로 전환하며 공부하는 글입니다.글을 읽기 전에, 광고 배너 한번씩만 클릭 부탁드립니다. 블로그 운영에 큰 보탬이 됩니다 :)만든 프로그램이 잘 동작하지만, 고갱님들은 잘 동작하는 것에만 만족하지는 않는다. 기능을 만들어주면 추가적으로 더 원하는 것이 생긴다.개발자들이 고갱님의 전화를 받으면 보통은 '문 닫히는 속도가 느린가?', '리모콘 버튼이 이상한가?' 등의 걱정을 먼저 하지만, 그런 것이 아니다. 고객들은 우리가 상상하는 것 이상으로 게으르다. 고객은 개가 나가고 싶다고 짖는 소리에 신경써야 하는 것도 귀찮아하..
Head first OOAD를 타입스크립트로 읽기 #5 - 요구사항 분석본 블로깅은 Head first OOAD: 세상을 설계하는 객체지향 방법론 (한빛미디어) 책을 Typescript 문법으로 전환하며 공부하는 글입니다.글을 읽기 전에, 광고 배너 한번씩만 클릭 부탁드립니다. 블로그 운영에 큰 보탬이 됩니다 :)새로운 프로그램을 만든다고갱님: 강아지가 밖에 나가고 싶을때마다 밤낮으로 우리를 귀찮게 한다. 그래서 강아지가 드나들 수 있는 문을 버튼 하나로 동작할 수 있게 하고 싶다.기본 코드 작성// DogDoor.ts class DogDoor { private _open: boolean; public DogDoor() { this._open = false; } public open(): void..