디자인패턴
-
[Design Pattern] 프록시(Proxy) 패턴 (feat. 즉시로딩 vs 지연로딩)디자인패턴 2022. 2. 16. 17:41
개발 도중 이미지의 로딩 시점과 캐시에 대해 고민해야할 때가 있습니다. 과거 채팅이 가능한 안드로이드 앱 개발중 시작화면에서 친구목록을 보여줘야할 때가 있었든데 처음에는 서버에서 친구들 사진을 가져왔고 친구가 많아짐에 따라 병목을 경험한 적이 있었습니다. 이런 상황에서 유용한 프록시 패턴과 함께 즉시로딩과 지연로딩의 장단점에 대해서 까지 덧붙여 알아보겠습니다. 1. 프록시 패턴 프록시(Proxy) 란 사전적으로 "대신" 이라는 의미를 담고 있습니다. 한마디로 어떤 리소스를 직접 접근하지 않고 중간에 프록시 객체가 대신 응답해주는 방식입니다. 이렇게 하면 기본적인 정보를 전달 받고 실질적(무거운) 정보가 반드시 필요한 순간 까지 그 로딩을 미룰 수 있습니다. 2. 즉시로딩 VS 지연로딩 첫번째 코드는 프록..
-
[Design Pattern] 빌더 패턴디자인패턴 2021. 12. 19. 17:31
1. 빌더패턴 란? 빌더 패턴은 객체 생성과정을 그 개체의 클래스로부터 분리시키는 하나의 방법이다. 객체의 부분부분을 만들어 나가다가 준비되면 객체를 생성해나가는 방식이다. 2. 빌더 패턴의 장점(= 생성자의 문제 해결) 생성자가 여러개의 인자를 받을 때 그 순서의 오류는 막지 못한다.(type이 같다면 막을 수 가 없음) 필요 없는 인자에 대해서 null 값을 넘겨 주거나 여러개의 생성자를 만들어야한다. 유지보수에 유리하다 기존의 코드에 생성자 인자 값을 추가해야할때 기존의 코드를 고치지 않고 builder 에 메서드를 추가하여 제작할 수 있다.(Open - Close 원칙 준수) 2-1. 빌더 패턴의 단점 빌더패턴으로 인핸 생성에 있어 자유도가 생겼습니다. 실질적으로는 반드시 넣어서 제작해야하는 파라..
-
[Design Pattern] 싱글턴 (feat. static)디자인패턴 2021. 12. 14. 15:27
디자인 패턴중 싱글턴에 대해 정리해보려고 합니다. 추가적으로 Singleton 과 Static 클래스의 차이에 대해서도 정리해보았습니다. 1. 싱글턴이란 어떤 클래스에서 만들수 있는 인스턴스 수를 하나로 제한하는 패턴 이 객체에 전역적인 접근이 가능해야함 2. 싱글턴 예시 생성자를 private 으로 막는다. 해당 클래스에서 static , 자신의 자료형 변수로 객체를 들고있는다. 'instace' 객체를 어디서든 가져올 수 있도록 public 으로 getter를 만든다. public class GameManager { private static GameManager instance; private GameManager() { } public static GameManager getGameManager(..
-
[Design Pattern] 래퍼 패턴디자인패턴 2021. 11. 22. 12:05
1. 래퍼 패턴 이란? 어떤 클래스의 메서드 시그내처가 맘에 안들때 다른 것 으로 바꾸는 방법 새로운 클래스를 만들어 기존 클래스를 감쌈 어댑터 패턴으로도 불림 2. 예제 외부 그래픽 라이브러리인 OpenGL 과 DirectX 의 각각 clearScreen , clear 메서드는 둘다 특정 색으로 화면을 지우는 기능을한다. 기능은 같으나 두 메서드의 시그내처가 다르므로 이를 래퍼 패턴을 적용해서 사용한다면 수정할 때 많은 수고를 덜 수 있다. - OpenGL 을 래핑 public class Graphics { private OpenGL gl; public void clear(float r , float g , float b , float a){ this.gl.clearScreen(a , r , g ,b)..
-
[Design Pattern] 팩토리 매서드 패턴디자인패턴 2021. 11. 19. 19:01
1. 팩토리 패턴이란? : 일반적으로 생성자를 통해서 객체를 만드는 형식에서 벗어나 객체를 만들어 주는 기능을 서브 클래스에 위임하는 패턴입니다. 서브 클래스 및 팩토리 매서드를 객체를 만들어내는 공장으로 이해할 수 있습니다. 2. 장점 생성자에서 오류 상황 감지시 Null 을 반환 할 수 있다. 다형적으로 객체 생성이 가능하다 클라이언트는 본인에게 익숙한 인자를 통해 객체 생성이 가능하다 ex) 객체 생성시 필요한 값 대신 사용자와 친숙한 Enum 값을 넘겨주고 실질적인 객체 생성에 필요한 처리는 내부적으로 실행 3. ExampleCode 진짜 팩토리 매서드 패턴은 아니지만 이해를 돕기 위해 중간 과정쯤 되는 코드이다. 기존에 생성자를 private 으로 설정함으로써 원래 생성자를 비활성화하고 팩토리 ..