Development
-
[수정중] 헤드퍼스트 디자인 패턴 [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) 클래..
-
[수정중] 헤드퍼스트 디자인 패턴 [2]Development/디자인 패턴 2018. 1. 2. 01:04
헤드퍼스트 디자인 패턴[2] 옵저버 패턴 기상 스테이션에서 값을 가져와서 화면에 뿌려주는 객체, 중계자 객체를 만들어야함. 현재상태: 온도, 습도, 기압을 화면에서 바로볼 수 있게... WeatherData 클래스에는 세가지 측정값(온도, 습도, 기압)을 갖고오는 getter가 있다.새 값을 갖고오면 measurementChanged() 가 호출됨.디스플레이 3개 구현해야함. 1번: 기상통계, 2번: 현재상태, 3번: 기상예보**확장성을 고려한 구현을 해야함!** -> 신문구독 메커니즘으로부터 아이디어를 캐치! 출판사를 Subject, 구독자를 Observer라고 부른다고 했을 때...subject 객체가 데이터를 관리... subject의 데이터가 달라지면 observer에게 해당 소식을 전달.obse..
-
[수정중] 헤드퍼스트 디자인 패턴 [1]Development/디자인 패턴 2018. 1. 2. 01:04
헤드퍼스트 디자인 패턴[1] 디자인패턴 소개. 수업시간에 맨날 배웠다. 변화에 잘 적응해야된다고. 그런 코드를 짜는 방법론 중에 하나가 바로 디자인패턴 숙지다. 상속 좋지. 그런데 상속만으로는 해결되지 못하는 문제들이 있다. 원치않는 것도 상속된다. 오리 클래스를 예로들면... 상속의 주체가되는 부모클래스를 바꾸면 원치않는 변경이 일어날 수 있다! 모든 상속받은 오리들의 행동을 알 수가 없다 인터페이스도 좋다. 서브클래스에서 구현하도록 하면 되니까. 근데 만능인가? 기능이 추가/삭제되면 일일이 가서 삭제해야된다. -> 코드에 미치는 영향을 최소화해야함!-> 이때 쓰일 수 있는 방법: 바뀌는 부분은 따로 뽑아서 캡슐화한다. ----------------------------------------------..