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..

Jmeter란 아파치 프로젝트를 통해 제작된 Java응용 프로그램 부하 테스트, 성능측정을 하기 위한 오픈 소스 프로그램이다. 초기에는 웹응용 프로그램을 테스트하기 위해 제작되었으나, 추후 다른 테스트 기능도 제공하게 되었다. Jmeter가 제공하는 테스트들 웹 - HTTP, HTTPS (자바, 노드 JS, PHP, ASP.NET, ...) SOAP / REST 웹 서비스 JDBC를 통한 데이터베이스 FTP, TCP, LDAP JMS를 통한 메시지 지향 미들웨어(MOM) 메일 - SMTP(S), POP3(S) 및 IMAP(S) 기본 명령 또는 셸 스크립트 자바 객체 설치하기 Apache JMeter - Download Apache JMeter Apache JMeter - Download Apache JM..

JAVA 어플리케이션을 사용하다보면 발생할 수 있는 메모리 누수 혹은 Out Of Memory Error 문제, Permanent Full 문제를 분석해야할 때 Heap Dump 분석을 통해 해결점을 찾을 수 있다. Heap : 자바프로그램에서 참조형 데이터 타입을 갖는 객체(인스턴스), 배열, 메타정보 및 Object들에 대한 참조 정보 등이 저장되는 메모리 공간이다. Dump : 기억 장치의 내용을 출력장치로 출력한다는 의미로 쓰인다. 위에 대한 문제는 같은코드를 실행하더라도 모든 환경에서 항상 발생하는 것은 아니고 개발환경에서는 잘 작동되지만 운영환경에서 데이터 & 환경 차이로 인해 발생 할 수 있다. 만약 임의로 해당 Out Of Memory Error에러를 표출하고 싶으면 List list = ..

1. 환경 변수 설정에서 기존에 JAVA_HOME -> jdk1.8.0.271 에서 jdk-11.0.2로 변경 2. path 환경 변수 편집창을 열어서 %JAVA_HOME%\bin 으로 설정 되어있는지 확인, 3. 마찬가지로 path 환경변수에서 C:\Program Files (x86)\Common Files\Java\java_path 가 있는지 확인 후 삭제 또한 해당 폴더에 직접 접근하여 모두 삭제해주어야한다. 4. 결과