-
[디자인패턴] 추상 팩토리 패턴 (Abstract-Factory Pattern)IT, 프로그래밍/Design Patterns 2017. 12. 10. 19:51
추상 팩토리 패턴 (Abstract-Factory Pattern) 에서는 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정 하지 않고도 생성할 수 있습니다. 이말은 즉, 우리가 팩토리 메소드 편에 보았던 JPStyleBrownShoes, FRStyleRedShoes .. 이런 식으로 추상클래스에 의존 하는 구상 클래스를 만들지 않고도 생성할 수 있다는 뜻이죠. 디자인 패턴을 사용 하지 않았을때는? 123456789101112131415161718192021222324252627282930313233343536373839404142434445class DependentShoesStore { public Shoes makeShoes(String style, String name) ..
-
[디자인패턴] 팩토리 메소드 패턴 (Factory-Method Pattern)IT, 프로그래밍/Design Patterns 2017. 12. 10. 02:22
팩토리 메서드 패턴(Factory method pattern)은 객체지향 디자인 패턴이다. Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. 팩토리 패턴을 시작하기 전에.. "new" 라는 것은 구상 객체를 뜻합니다. 구상 객체는 구상 클래스의 인스턴스를 만드는 것이고 공통적인 인터페이스가 아닌 특정 구현을 사용하는 것이죠. 이렇게 구상 클래스를 통해서 객체를 구현 하게 되면 나중에 수정해야 할 상황이 닥치면 모든 구상 클래스를 확인해서 바꾸어야 하는 불상사가 생길 수 있습니다. 12345678910..
-
buddy 프로젝트 하면서 느낀 점 정리IT, 프로그래밍/프로그래밍 일기 2017. 12. 1. 01:14
1. UML 다이얼로그 이용한 설계와 논리 검증이 끝나기 전에 코딩 하지 말자. 2. 다이얼로그 관계도를 프로그램이나, 화이트보드 같은데 그려놓고 바뀌는 부분 있으면 바꾸자 3. 시작 전에 API 문서를 한 번 보고 시작하자 4. 구글링과 스택오버플로우에 의존하기 보다 공식 문서를 먼저 보자 5. 2번 이상 복붙 해야 하는 일이 없도록 하자 6. static을 쓸때 왜 써야 하는지 타당한 이유가 없으면 쓰지 말자 7. 안드로이드에서 context를 넘겨주는 싱글톤은 조심하자 8. 변수이름을 엑셀 파일에 정해 놓자 9. 주석 달기를 생활화 하자 제발 10. 의존성 낮추는게 제일 중요!!!! 결국 목표는 나중에 유지 보수가 편하게 설계하는 것. 11. 나 말고 다른 사람이 유지 보수 한다고 생각하고 코드를 짜자
-
Execution failed for task ':app:processDebugGoogleServices' 에러IT, 프로그래밍/Android 에러 2017. 11. 18. 14:50
Error:Execution failed for task ':app:processDebugGoogleServices'. Please fix the version conflict either by updating the version of the google-services plugin ~~ 이런 에러인데, 에러의 원인은 현재 사용중인 구글 서비스들의 버전이 일치하지 않아서 나는 오류인 것 같다. compile 'com.google.firebase:firebase-storage:10.0.1' compile 'com.google.firebase:firebase-auth:10.0.1' 파이어베이스를 사용하기 위해 app.gradle 에 이렇게 정의 해 놓았고 compile 'com.google.android...
-
[Tip] TedBottomPicker 사용 중 문제 발생 해결카테고리 없음 2017. 11. 14. 02:12
즐겨쓰는 Image Picker 라이브러리인 TedBottomPicker를 새로운 프로젝트에 적용 시켰는데, 이런 에러가 뜨면서 진행이 되지 않았다. No virtual method load(Landroid/net/Uri;)Lcom/bumptech/glide/DrawableTypeRequest; in class Lcom/bumptech/glide/RequestManager; or its super classes (declaration of 'com.bumptech.glide.RequestManager' ~~~ 이런 내용의 에러였는데, 구글에 검색해 봐도 나오지 않고, 그나마 있는 사람들도 글라이드 최선 버전으로 업그레이드 해 보라는 말 뿐이었다. 그래서 글라이드를 기존에 사용하던 3.7.0 버전에서 4...
-
[에러] Found conflicting getters for name: isChangingConfigurations 에러IT, 프로그래밍/Firebase 2017. 11. 9. 21:36
파이어베이스로 검색 기능을 구현 중에 이러한 에러가 발생하였다. 이상한게 json 데이터가 정확하게 넘어오는데, 회원 정보를 저장하기 위한 Member VO 형식으로 파싱이 되지 않았다.(Member.class 형식으로 파싱이 되지 않음) 확인해 봐도 특별히 이상한 부분은 보이지 않고, 이것 말고 똑같은 방식으로 값을 불러오는 다른 코드에서는 각각 VO에 정의해 놓은 대로 잘 파싱이 되었다. 이것 저것 다 바꿔보던 중에, 문제점을 찾아 내었는데, 아래와 같다. private HashMap chatroomList; 원래 이렇게 되어야 함 private HashMap chatroomList; 작성되어 있던 모습 필드인 HashMap의 value값으로 들어 가야 할 ChatroomVO 라는 부분이 오타로 Ch..
-
[디자인패턴] 데코레이터 패턴 (Decorator Pattern)IT, 프로그래밍/Design Patterns 2017. 10. 21. 19:22
데코레이터 패턴(Decorator pattern)이란 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 객체에 추가적인 요건을 동적으로 첨가하며, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다. 복잡해 보이는 설명을 예시로 한 번 풀어서 표현해 보겠습니다. (본문에 나오는 예시가 아주 좋아서 그 주제를 가지고 설명하겠습니다.) 이 글을 보고 계시는 대부분의 분들이 카페에 한 번쯤 가보셨다고 생각을 합니다. 카페에 가서 주문을 하는 상황을 한 번 상상해 봅시다. 문을 밀고 들어가서 카운터에서 점원에게 주문을 합니다. "따뜻한 카페라떼 한 잔 주세요!", 옆에서 커피가 나오는 동안 기다리는데, 다른 손님이 들어와서 주문을 합니다. "카라멜 프라푸치노에, 헤이..