Java
-
Static Factory Method instead ConstructorJava/Effective Java 2021. 2. 9. 22:55
클라이언트가 클래스의 인스턴스를 얻는 방법으로 대표적인 public 생성자가 있다. 다른 방법으로는 정적 팩토리 메소드가 있다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 왜 정적 팩토리 메소드인가? 첫째. 이름을 가질 수 있다. 다음 중 "값이 소수인 BigInteger 를 반환한다" 라는 의미를 표현하는 것은? 1. BigInteger(int, int, Random); 2. BigInteger.probablePrime(); 시그니처를 표시하기 좋은 2번이 장점이 크다. 이름을 명시할 수 있기에 장점이다. 둘째. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 반복되는 요청에 같은 객체를..
-
BuilderJava/디자인패턴 2021. 1. 5. 00:01
복잡한 인스턴스 조립하기 본 글은 'java 언어로 배우는 디자인 패턴 입문' 을 바탕으로 기재한 내용입니다. 빌딩, 구조를 가지고 있는 커다란 것을 건축하거나 구축하는 것을 build 라고 한다. 빌딩을 세울 때 우선 지반을 다지고, 골격을 세우고, 아래서 부터 위로 조금씩 만들어 단계를 밟아가며 건축을 하듯이 구조를 가진 인스턴스를 쌇아 올리는 패턴을 Builder 패턴 이라고 한다. 예제 프로그램 '문서'를 작성하는 프로그램 이름 해설 Builder 문서를 구성하기 위한 메소드를 결정하는 추상 클래스 Director 한 개의 문서를 만드는 클래스 TextBuilder 일반 텍스트(보통의 문자열)를 이용해서 문서를 만드는 클래스 HTMLBuilder HTML 파일을 이용해서 문서를 만드는 클래스 Ma..
-
PrototypeJava/디자인패턴 2021. 1. 1. 13:48
복사해서 인스턴스 만들기 본 글은 'java 언어로 배우는 디자인 패턴 입문' 을 바탕으로 기재한 내용입니다. new Something() Somthing의 인스턴스를 작성할 때는 new 연산자를 사용하여 클래스 이름을 지정해서 인스턴스를 생성한다. 돌려말하면 new 로 인스턴스를 만들 때는 반드시 클래스 이름을 지정해야한다는 것이다. 그러나 클래스 이름을 지정하지 않고 인스턴스를 생성할 때도 있다. 상황1 : 종류가 너무 많아 클래스로 정리되지 않는경우 - 취급하는 object의 종류가 너무 많아 각각 별도의 클래스로 만들어 다수의 소스파일을 작성해야하는 경우 상황2 : 클래스로부터 인스턴스 생성이 복잡하거나 어려운 경우 - 예를 들어 그래픽 에디터에서 사용자가 마우스조작으로 만든 도형을 나타내는 인스..
-
SingletonJava/디자인패턴 2020. 12. 31. 01:01
인스턴스를 한 개만 만들기 본 글은 'java 언어로 배우는 디자인 패턴 입문' 을 바탕으로 기재한 내용입니다. 프로그램을 실행할 때 보통은 많은 인스턴스가 실행이된다. 예를 들어 문자열을 표시해야 할 때 사용하는 java.lang.String 클래스는 문자열 1개에 대해서 1개가 생성이 되기 때문에 문자열이 1천개 등장하는 프로그램이라면 1천개의 인스턴스가 만들어진다. 하지만 클래스의 인스턴스가 단 하나만 필요한 경우도 있다. 시스템 안에서 밖에 존재하지 않는 것을 프로그래밍 하고 싶을때이다. 예를들어. 컴퓨터 자체를 표현한 클래스, 현재 시스템 설정을 표현한 클래스, 윈도우 시스템을 표현한 클래스 등등 이 있을 것이다. 물론 프로그래머가 주의 하여 new Class() 로 1회 실행하여 1개의 인스턴..
-
Factory MethodJava/디자인패턴 2020. 12. 27. 23:59
하위 클래스에서 인스턴스 작성하기 본 글은 'java 언어로 배우는 디자인 패턴 입문' 을 바탕으로 기재한 내용입니다. factory, 공장. 인스턴스를 생성하는 공장을 Template Method 패턴으로 구성한 것이 Factory Method 패턴이다. Factory Method 패턴에서는 인스턴스를 만드는 방법을 상위 클래스 측에서 결정하지만 구체적인 클래스 이름까지는 결정하지 않으며 구체적인 내용은 하퀴 클래스 측에서 수행한다. 인스턴스 생성을 위한 골격(framework)과 실제의 인스턴스 생성의 클래스를 분리해서 생각할 수 있다. 예제 프로그램 패키지 이름 해설 framework Product 추상 메소드 use만 정의되어 있는 추상 클래스 Factory 메소드 create을 구현하고 있는 추..
-
Template MethodJava/디자인패턴 2020. 12. 22. 23:49
하위 클래스에서 구체적으로 처리하기 본 글은 'java 언어로 배우는 디자인 패턴 입문' 을 바탕으로 기재한 내용입니다. 템플릿이란 특정한 모양을 만들어진 틀을 말한다. 학교 다닐때 사용하던 플라스틱 자에 뚫려있는 특정 모양에 따른 구멍에 연필, 펜 등 을 사용하여 그리곤 했다. 템플릿의 구멍을 보면 어떤 모양인지는 알지만 실제로 어떤 모양이 될지는 필기구에 의해서 결정된다. 어떤 필기구를 사용하던 구멍의 형태는 동일하지만 말이다. Template Method 패턴은 이러한 템플릿의 기능을 가진 패턴이다. 상위 클래스쪽에 템플릿에 해당하는 메소드가 정의되어 있고, 그 메소드 안에 추상 메소드가 사용되고 있다. 추상 메소드를 실제로 구현하는 것은 하위 클래스이다. 하위 클래스에서 서로 다른 구현을 실행할 ..
-
AdapterJava/디자인패턴 2020. 12. 21. 23:57
바꿔서 재이용하기 본 글은 java 언어로 배우는 디자인 패턴 입문 교적을 바탕으로 기재한 내용입니다. 한번은 도쿄에 놀러간 적이 있었다. 숙소에서 집에서 쓰던 충전기 이외에 필요한 110V용 플러그 어댑터를 몇개씩 챙겨간 기억이 있다. (확실히 필요했다.) 충전 단자 (110V) ---- 플러그 어댑터 ------ 핸드폰 충전기(220V) 프로그램에서도 이미 제공되어 잇는 것을 그대로 사용할 수 없을 때, 필요한 형태로 교환하고 사용하는 일이 자주 있다. '이미 제공되어 있는 것' 과 '필요한 것' 사이의 차이를 없애주는 디자인 패턴이 Adapter 패턴이다. Adapter 패턴은 Wrapper 패턴이라고 불리기도 한다 wrapper(감싸는 것) Adapter패턴은 다음과 같이 두 가지 종류가 있다. ..
-
IteratorJava/디자인패턴 2020. 12. 20. 23:59
순서대로 지정해서 처리하기 본 글은 java 언어로 배우는 디자인 패턴 입문 교적을 바탕으로 기재한 내용입니다. 반복문 for문을 살펴볼까? for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } for 문에서 변수 i를 0으로 초기화 하여 arr 배열의 요소를 차례대로 처리해가며 배열arr 요소 전체를 검색하게 된다. 여기서 사용되고 있는 변수 i 의 기능을 추상화 해서 일반화 한것을 디자인 패턴에서는 Iterator 패턴 이라고 한다. 다시 말해 Iterator 패턴이란, 무엇인가 많이 모여있는 것들을 순서대로 지정하면서 전체를 검색하는 처리를 실행하기 위한 것이다. - iterator : 무엇인가 '반복한다' 라는 의미, 반복자 라..