전체 글
-
[수정중] 헤드퍼스트 디자인 패턴 [9]Development/디자인 패턴 2018. 1. 9. 19:05
헤드퍼스트 디자인 패턴[9] 이터레이터 & 컴포지트 패턴 책의 예제로 이해하자. 아침메뉴 식당과 팬케이크 식당이 합쳐졌다! 식당메뉴 표시와 메뉴 구현이 원래 두개였고, 각각의 요리요소를 저장하는 컬렉션도 다르다. 이걸 한번에 하려면?-> 바뀌는 부분을 캡슐화하라!-> 객체 컬렉션의 형식이 다르기 때문에 반복작업을 하는 방법이 달라지는 부분이다. 소스로 이해하는게 더 빠를 듯 싶다! 373페이지의 클래스 다이어그램으로부터 이해! java.util.Iterator를 사용 createIterator가 정의된 인터페이스 Menu를 새로 불러옴. -> 구상 Iterator 클래스를 만들어서 리턴할 책임을 넘김 PancakeHouseMenuIterator는 그냥 ArrayList의 Iterator를 형태에 맞게 오..
-
[수정중] 헤드퍼스트 디자인 패턴 [8]Development/디자인 패턴 2018. 1. 2. 16:21
헤드퍼스트 디자인 패턴[8] 템플릿 메소드 패턴 공통점을 뽑아내서 코딩해보자! 커피와 홍차를 만드는 클래스가 있다고 가정하자. 이 둘의 만드는 법은 각각 다음과 같다. 그리고 이 둘의 공통점을 찾아보자. 커피 만드는 레시피 물을 끓인다 끓는 물에 커피를 우려낸다 커피를 컵에 따른다 설탕과 우유를 추가한다 홍차 만드는 레시피 물을 끓인다 끓는 물에 차를 우려낸다 차를 컵에 따른다 레몬을 추가한다 prepareRecipe까지 추상화할 수 있다! prepareRecipe 같은 것이 템플릿 메소드! 우려낸다 / 첨가물을 추가한다는 하나로 합칠 수 있는 기능이다. 이런것들은 서브클래스에 의존한다. 물끓이고 음료를 컵에 붓는건 걍 여기서 구현한다. 템플릿 메소드에서는 알고리즘의 각 단계들을 정의하며, 그 중 한개 ..
-
[수정중] [001] JavaFX란?Development/JavaFX 8 2018. 1. 2. 01:21
자바fx는... 자바를 만든 썬 마이크로시스템즈에서 개발하고 배포한 소프트웨어 플랫폼이다. GUI 라이브러리로 스윙을 대체하기 위해 만들었다. 자세한 사항은 위키페디아나 해외 웹을 보시길 바란다. 추후 설명은 단순한 자바fx 기반 프로그램을 통해 어떤 구조로 짰는지, 어떻게 구성되는지에 간략히 설명하고자 한다. 이 후 글에서 만드는 프로그램은 다음과 같은 간단한 구조를 가지고 있다. 이 앱은 아울러 JavaFX 8에서 수행된다. 상세한 설정은 글 아래의 링크를 참조하기 바란다. 해당 링크에서 e(fx)clipse와 SceneBuilder를 설치한다면 이해하기 더욱 수월할 것이다. /*ATM * 화면 1 * 1.계좌등록 , 2. 로그인, 3. 종료 * 계좌등록 화면은 예금주/계좌번호/비밀번호/초기번호를 입..
-
[수정중] 헤드퍼스트 디자인 패턴 [7]Development/디자인 패턴 2018. 1. 2. 01:07
헤드퍼스트 디자인 패턴[7] 어댑터 패턴 & 퍼사드 패턴 어댑터: 한 인터페이스를 다른 인터페이스로 변환시켜주는 역할을 수행. 객체지향에서도 비슷하게 받아들이면 된다. 다시말해 클라이언트로부터 요청을 받아서 새로운 업체에서 제공하는 클래스(서드파티 클래스)에서 받아들일 수 있는 형태의 요청으로 변환시켜주는 중개인 역할을 수행한다. 1장에서의 duck 인터페이스를 통해 다시 봅시다. 클라이언트: 타깃 인터페이스에 맞게 구현되어있음. 즉, 어댑터와 호환됨.어댑터: 타깃 인터페이스를 구현하며, adaptee 인스턴스가 있다.adaptee: ducks에서는 Turkey가 adaptee 인터페이스. (adaptee: 어댑터를 중간에 두고 클라이언트와 정 반대의 위치에 있는 것. adapter에게서 adapt받는 ..
-
[수정중] 헤드퍼스트 디자인 패턴 [6]Development/디자인 패턴 2018. 1. 2. 01:06
헤드퍼스트 디자인 패턴[6] 커맨드 패턴 특정 객체에 대한 특정 작업 요청을 캡슐화함.커맨드 객체를 만들어서 특정 객체에 대한 특정 작업요청을 캡슐화 시켜줌.예를들어 거실 전등(객체)의 불좀 켜라(작업요청)을 캡슐화. 사용자는 그냥 버튼누름만 했는데 내부에서 저게 자동으로 되게... 7가지 슬롯에 제품을 연결하고 on/off 버튼으로 조작. 마지막 동작을 되돌리는 undo 버튼도 있고... 그 전에 앞서 커맨드 패턴을 이해해보자. 식당의 고객, 점원, 주문과 주방장 사이의 관계로부터 파악하자. 주문하는 방법에 대해 써보자면... 고객이 점원에게 주문을한다. 점원은 주문을 받아서 주방에 주문을 전달한다. 주방장이 주문대로 음식을 준비한다. -> createOrder() ... 주문이 들어옴. 이는 Orde..
-
[수정중] 헤드퍼스트 디자인 패턴 [5]Development/디자인 패턴 2018. 1. 2. 01:06
헤드퍼스트 디자인 패턴[5] 싱글턴 패턴 인스턴스가 단 하나! 뿐인 객체를 의미한다. 생성자가 private. 하지만 해당 객체에 대한 getter가 public static이기 때문에 필요에 따라 누구나 가리킬 수 있게 된다. 이것이 바로 싱글턴 패턴! 싱글턴 패턴: 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴. concurrency가 필요하다면 상황이 좀 문제임. 멀티 스레딩을 처리할 수 있어야되는데 그게 안되면 큰일임.. getInstance()에 synchronized 키워드를 붙임(대신 상당히 느려짐!) 인스턴스를 그냥 처음부터 생성해버림 private static Singleton uniqueInstance = new Singleton..
-
[수정중] 헤드퍼스트 디자인 패턴 [4]Development/디자인 패턴 2018. 1. 2. 01:05
헤드퍼스트 디자인 패턴[4] 팩토리 패턴 preface: new 키워드에 대하여.. new는 구상객체를 뜻한다. 구상 클래스의 인스턴스를 만드는 것.인터페이스를 써서 코드를 유연하게 만들 수 있다 하더라도 인스턴스를 만드는건 피할 수 없다. 인스턴스 형식은 실행시의 조건에 따라 결정된다. 즉 수정할 때 이런 코드르 보고 추가/제거 해야된다는 것 -> 관리가 힘듦 -> 오류가 많이 터짐. 근데 new를 안쓰면 객체를 못만든다. 고로 new의 특성중 조심해야하는 것이 있다는 말이 된다.따라서 '확장에 대해서는 열려있되, 변화에 대해서는 닫혀있는 코드(OCP based code)'를 짜야한다 이말. => 추상화! 바뀌는 부분을 찾아서 캡슐화하면 될것이다! 너는 이제 피자가게를 운영하고있다고 치자. 피자 주문을..
-
[수정중] 헤드퍼스트 디자인 패턴 [3]Development/디자인 패턴 2018. 1. 2. 01:05
헤드퍼스트 디자인 패턴[3] 데코레이터 패턴 Starbuzz에서 커피 추가할 때 옵션이 있다.커피도, 옵션도 많아지면 그에 관련한 클래스가 쓸데없이 늘어난다. 그래서 1차적으로, 인스턴스 변수와 super 클래스 활용으로 좀 바꿔보니 확 줄긴했다! 그런데 이거의 문제는? 가격계산 코드가 바뀌면 또 개조해야함. 메뉴가 사라지고 추가돼도 또 개조해야됨 커스텀 옵션이 사실상 불가. 결국 문제가 있다! 문제는 이따가 다시말해야겠다. ------------------------------------------------------------------------------------------------------------------| 디자인 원칙 - 5 : OCP(Open-Closed Principle) 클래..