1) 책임 주도 설계를 향해 객체가 수행해야할 책임은 무엇인가로 시작해서 객체가 수행하는데 필요한 데이터는 무엇인가로 설계하자. 책임 중심의 설계가 될 수 있다. 협력의 문맥 아래서 책임을 결정하자. 책임이 어색하더라도 협력에 적합하면 해당 책임은 좋은 것이다. 메시지를 먼저 선택하고나서 메시지를 처리할 객체를 선택하여 적합한 객체를 사용 할 수 있게 노력하자. 2) 책임 할당을 위한 GRASP 패턴 설계를 시작하기전 도메인에 대한 개략적인 모습을 그려보는것이 유용하다. 필자도 머리속으로 정리하기가 어려울 때는 PPT를 사용하든 다른 툴을 사용하든 데이터의 흐름을 그려보는데, 그리다보면 고쳐야될 점도 보이고, 파악하기도 쉽다는게 좋다. (물론, 틀렸을때 다시 그리기도 조금 벅차지만 말이다.) 올바른 도메..
1) 데이터 중심의 영화 예매 시스템 객체의 상태 변경은 인터페이스 변경이 일어나며, 의존하는 모든 객체에 영향이 끼친다. 이전 기억을 떠올려 보니 객체의 상태변경시 마다 바꾸어야 될 코드가 많았던게 기억이난다. 데이터 중심의 영화예매 시스템은 '할인정책', '할인조건' 이 모두 Movie객체에서 처리한다. Enum Type으로 정책구분을 하는데, 내가 짜왔던 코드와 많이 비슷해서 흠짓했다. 후에는 회사 팀원분들의 조언으로 Enum Type으로 맞는 인터페이스의 구현체를 호출하는 방법도 많이 해보았는데, 확실히 가독성이 뛰어났다. 객체의 상태를 호출해와서 해당 상태로 또다른 상태를 호출하는 이런방식의 코드도 많이 닮아있다. 즉, 캡슐화 & 추상화가 되어있지 않은 코드가 생겼다. 2) 설계 트레이드오프 캡..
1) 협력 객체지향 원칙을 따르는 애플리케이션의 제어 흐름은 어떤 하나의 객체에 의해 통제되지 않고 다양한 객체들 사이에 균형 있게 분배되는 것이 일반적이다. 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력 이라고 한다. 객체는 메시지 전송을 통해 객체사이의 협력을 커뮤니케이션을 한다. 예를들어 Screening ------- calcuateMovieFee(Screening) ---> Movie Screening 객체가 Movie에게 calculateMovieFee 메시지를 전송함 으로써 Movie에게 요금 계산을 요청한다. 이는 Movie가 요금 계산을 하는데 필요한 정책, 요금등을 잘 알고 있기때문에 처리를 위임한 것이다. 이렇게 자신이 할 수 없는 일을 다른 객체에게 위임하면 ..
1) 영화 예매 시스템 일반적인 영화 예매시스템을 따르며, 할인조건, 할인정책 구분하여 설계한다. 2) 객체 지향 프로그래밍을 향해 협력, 객체, 클래스 생각의 전환이 필요하다. 객체지향 언어에 익숙하면 설계를 시작할때 어떤클래스가 필요하지? 어떤 메서드가 필요하지? 어떤 필드가 필요하지? 가 먼저 떠오르게된다. 객체에 초점을 맞추자 첫째, 클래스가 아닌 어떤 객체들이 필요한지 고민해라. 클래스는 공통적인 상태와 행동을 공유하는 객체들을 추상화한 것이다. 둘째, 객체를 독립적인 존재가아니라 기능을 구현하기 위한 공동체의 일원이라 보자. 서로 다른 객체에게 도움을 주거나, 의존하면서 살아가는 협력적인 존재다. 도메인의 구조를 따르는 프로그램 구조 알고가기. 문제를 해결하기위해 사용자가 프로그램을 사용하는 ..
1) 티켓 판매 애플리케이션 구현하기 (코드 작성 그대로) 초대장 public class Invitation { private LocalDateTime when; //초대일자 } 티켓 public class Ticket { private Long fee; //티켓 금액 public Long getFee() { return fee; } } 가방 public class Bag { private Long amount; //보유현금 private Invitation invitation; //초대장 private Ticket ticket; //티켓 public Bag(Long amount) { new Bag(amount, null); } public Bag(Long amount, Invitation invitat..
GIF 파일을 업로드하여 사용자가 사용하기 쉽게 전달 해보자 필자가 윈도우여서 윈도우 위주로만 작성하였으니 이해바랍니다. [1] 동영상 촬영 및 GIF 만들기 ScreenToGif - Record your screen, edit and save as a gif, video or other formats 에서 프로그램을 다운로드 받자. 요런 화면이 뜨는데 준비가 되면 녹화를 시작하고 완료하면 촬영이 종료 된다. 이러한 화면이 나오게 되는데, 여기서 원하는 장면만 두고 장면을 최대한 삭제한다. (용량) 이후 편집 메뉴에서 지연시간을 설정한다. 필자는 모든 장면을 일괄적으로 800ms로 설정하니 적당한 시간에 볼만한 속도가 나왔다. 위와 같은 화면이 만들어졌다. 이제 저장된 파일을 업로드 해보자 [2] GIF..
[1] 프로젝트 서명 만들기 인텔리 제이에서 친절하게 다 써져있지만, Plugin Signing | IntelliJ Platform Plugin SDK (jetbrains.com) 혹시나 Window에서 헤멜 수 있으므로 작성한다. 먼저, OpenSSL(TLS, SSL 프로토콜 오픈소스)을 받아야한다. 아니면 다른 방법이 있다면 찾아봐도된다. 필자는 잘 모르므로 가이드를 따라했다. http://slproweb.com/products/Win32OpenSSL.html 에서 최신버전의 Msi 혹은 Exe 파일을 설치하면 된다. 설치를 하고 나면 윈도우 검색에 해당 프롬프트가 생성되는데, 이곳에서만 openSSL 명령어가 가능하니 주의하자. (혹은 환경변수로 등록하는 방법도 있다.) OpenSSL 윈도우 설치 ..
[1] update method orveride 기능을 구현하기 전에 먼저 해당 액션이 사용가능한 곳에서만 보일 수 있게 하여야 하는데, 이는 update메서드를 통해서 적용시킬 수 있다. 인텔리 제이가 제공하는 샘플코드는 다음과 같으며 intellij-sdk-code-samples/PopupDialogAction.java at main · JetBrains/intellij-sdk-code-samples (github.com) @Override public void update(@NotNull AnActionEvent e) { final PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE); final Editor editor = e.getData(CommonDa..