1. Adapter 패턴이란


이미 구현되어 있는 코드가 있는데, 둘이 연결 좀 시켜주고 싶을 때가 있죠. 어떤 좋은 메서드가 있는데, 인자로 A라는 형식을 받습니다. 근데, 이미 구현되어 있는 코드에는 B라는 형식으로 구현되어 있습니다. 이럴 때, B를 A의 형식으로 바꿔주면 좋은 메서드를 써먹을 수 있습니다. Adapter 패턴은 어떤 오브젝트를 캐스팅이 불가능한 다른 클래스의 형태로 변환시켜주는 것입니다.


2. 따라하기


// Adapter Class


//test 클래스

 

 //결과 


우리가 최종적으로 쓰고자하는 것은 nextObject() 입니다. 그 녀석은 인자로 Enumeration을 받고 있지요. 

그러나 우리가 가지고 있는 것은 Iterator입니다. IteratorToEnumeration 클래스는 Iterator를 받아서 Enumeration 으로 변경시켜줍니다. 

A to B의 형태를 가지는 Adapter는 A를 멤버변수로 가지고 B를 구현합니다.

즉, IteratorToEnumeration 클래스가 이 역활을 하고 있습니다. IteratorToEnumeration 이클래스가 아답터 클래스 입니다.


3. JAVA API에 있는 Adapter 패턴 을 이용한 클래스들


이클립스나 인텔리 제이에서 저 소스들을 파헤쳐 가면서 어떻게 adapter 패턴들을 사용했는지 한번 살펴보시기 바랍니다.
시간이 될때 저도 저 클래스들이 apater 패턴을 사용하는가를 작성하겠습니다.


블로그 이미지

낭만가을

,

1. iterator 패턴이란


개발을 하면서  array나 List, Set, Map과 같은 interface 들을 많이 사용합니다. 이것들의 특징은 어떤 데이터들의 집합체라는 겁니다. 

원래 집합체란 게 속에 뭐가 들었냐가 중요하죠. 

그래서 집합체들을 다룰 때는 얘들이 가지고 있는 개별 원소에 대해서 이런 저런 작업들을 할 일이 많습니다. 

iterator를 쓰게 되면, 집합체와 개별 원소들간에 분리시켜 생각할 수가 있습니다. 심지어는 그 집합체가 어떤 클래스의 인스턴스인지 조차 신경쓰지 않아도 됩니다.


2. 예제

// iterator 인터페이스를 만든다.
   

// NameRepository 클래스를 iterator 인터페이스를 이용하게 만든다.
   

 // 테스트
   

 //결과
 



3. Iterator관련 interface


iterator  인터페이스를 만드는 대신에 구현되어 있는 java 의 iterable 인터페이스를 사용해도 됩니다.


private class NameIterator implements   Iterable<String> {

위와같은 식으로 구현되어 있는걸 사용해도 되지만 iterator  패턴이 어떤건지 알기 위하여 구현을 임의로 한것입니다.


4. JAVA API에 있는 Iterator


우리가 알고 있는 일반적인 집합체들은 전부 Iterator를 제공합니다. Set, List 등은 Collection 을 상속 받는데, Collection이 Iteratable을 상속 받기 때문입니다.

위에서 청록색 부분을 list.iterator() 라고 쭐여버려도 됩니다. 걍 있는 거 안 쓰고 굳이 구현한 건 예제 파일을 함 보여줄라고 한 겁니다. 사실은 예제 전체가 억지로 만들어낸 겁니다. 일반적인 집합체를 구현해서 쓰는 일은 거의 없고, JDK 안에 들어 있는 애들을 가져다 쓰는데, 걔들은 거의 대부분 Iterator를 제공하거든요.(Map은 한 다리 건너서 제공합니다.) 그래서 Iterator를 직접 구현할 일은 거의 없습니다. 가져다가 쓸 일이 있을 뿐이죠.


이제 Map은 왜 Iterator를 제공하지 않는 지를 살펴보죠. Map은 Set이나 List와는 달리 key-value의 구조입니다. key에 대한 Iterator인지 value에 대한 Iterator인지 구별할 방법이 없죠. 그래서 아예 제공을 안 합니다. 그러나 Map에는 key에 대해서는 Set<K> keySet()이라는 key를 Set으로 가져오기를 지원하고, value에 대해서는 Collection<V> values() 를 제공합니다. 위에서 말씀드렸다시피 Set과 Collection은 둘다 Iterator를 제공합니다.



블로그 이미지

낭만가을

,

1. Factory  패턴 이란


아주 중요한 패턴중에 하나 입니다. Factory 패턴은 creational pattern  에 속하는 패턴입니다.

Factory 패턴은 객체생성로직 없이 객체를 만들어 내는 패턴입니다.. 인터페이스를 통해 만들어진 객체를 참조 하죠.


쉽게 설명해드리겠습니다.  factory 는 한국어로 공장이란 뜻이죠.  즉 객체를 만들어내는 공장 입니다.  

객체 선언은 보통 new 객체() 이런식으로 하죠. factory는 내부에서 그런 일을 해줍니다. 즉 factory를 가져다가 쓰는 부분에서는 new 객체()와 같은 식으로 변수를 선언할 필요가 없습니다. Abstract class나 인터페이스에 대해서 다양한 하위 구현체가 있을 경우에 사용하면 좋습니다. 사용법은 Factory.create(인자는 맘대로) 와 같이 됩니다. 


실무에서 자주 쓰이는 패턴중 하나이니 아래와 같이 천천히 따라해보도록 하죠.


2. 따라하기


// animal 인터페이스를 만듭니다. 기본이 되는 interface 죠. 모든 디자인 패턴은 interface 를 사용한다 해도 과언이 아닙니다.


// Cat 클래스를 만듭니다.


// Cow 클래스를 만듭니다.


// Dog 클래스를 만듭니다.


// animal 을 만들어내는  AnimalFactory 클래스를 만든다. 

//( 이 class 가 핵심 입니다. factory 패턴을 구현한곳이죠. 이해하기 힘드시다면 이 class 만 30번 보시면 이해가 되실겁니다.)


// 자 테스트를 한번 해볼까요.

 

//결과


3. Factory 의 이해 

위의 결과와 같이 Animal interface 를 이용해서 각자 다른 소리를 내는 3개의 클래스를 만들어 봤습니다.

AnimalFactory 클래스에서는 각 동물들의 이름을 받아서 클래스를 만들어 냈습니다. 즉 팩토리 패턴을 구현해 놓은 클래스 입니다.


테스트를 실행하는 main 클래스 안에는 new 라는 구문 자체가 없습니다 팩토리 패턴은. 정확히 어떤 클래스의 인스턴스인지 신경쓰지 않고 구현할 수 있는 장점이 있습니다. 객체 타입이 굉장히 유연해 질 수 있죠.


이것으로 아주 쉽게 배우는 factory 패턴을 마치고자 합니다. 



블로그 이미지

낭만가을

,

1. 정올닷컴 : http://www.jungol.co.kr


우리나라 정보올림피아드 홈페이지이다.

기초부터 고급 수준까지 알고리즘을 직접 짜서 프로그래밍 연습할 수 있도록 도와준다.


중학교 수준이라고 무시하면 큰 코 다친다.

프로그래밍에는 나이가 없는 것 같다.


실력이 부족해서인지 아직도 중학교 문제가 어려울 때가 많다.  (가끔은 초등 문제도...쿨럭)


그래도 재밌는 문제들이 많으니, 혼자 코딩 배우기에 도전중인 사람은 즐겨찾기 해놓길 추천한다.



2. 프로젝트 오일러 : http://euler.synap.co.kr/


이 사이트는 외국 사이트(https://projecteuler.net/)를 번역한 사이트이다.

현재까지 번역된 문제수는 120개이며, 사이냅소프트라는 소프트웨어 개발회사에서 운영하고 있다.


간단한 문제 같아 보여도 메모리 문제 때문에 고민하게 하는 문제가 많다.

워낙 큰 범위의 계산 문제들이 많아 어떻게 하면 효율성을 극대화시킬 것인지에 대해 고민하게 한다.

많은 개발자들이 코딩 연습용으로 문제풀이를 한 후, 블로그에 답안을 올려놓았다.


풀어보다가 도저히 안된다 싶으면, 구글에서 해당 문제로 검색하면 답안을 쉽게 발견할 수 있다.



3. 백준 온라인 : https://www.acmicpc.net/


'최백준'이라는 분이 운영하는 알고리즘 연습 사이트이다.

대학끼리 경쟁이 붙어서 알고리즘 배틀(?) 형태를 띄는 경우도 종종 보이고,,,

스터디 그룹을 만들 수 있는 메뉴도 있다.


엄청나게 많은 문제들이 있으니, 하나씩 풀어보면 좋을 듯 하다.


내가 잘 못해서 그런 지는 모르겠지만, 

답안을 제출하고 정답인지 오답인지를 판별하는 기준이 이해가 안될 때가 종종 있다.


프로그램을 짜서 돌려보면, 값이 나오는데...

이 사이트에 코드를 제출하면 오답으로 나와서 짜증날 때가 종종 있었다.


그래도 알고리즘 연습하기에는 꽤 좋은 사이트이다.

'프로그래밍 > 알고리즘' 카테고리의 다른 글

시간 복잡도  (0) 2018.04.21
[Codility] CountSemiprimes  (0) 2018.04.21
[Codility] cyclicRotation  (0) 2018.04.15
[Codility] Stone wall  (0) 2018.04.15
[Codility] Binary Gap 알고리즘  (0) 2018.04.14
블로그 이미지

낭만가을

,

1. 자바스크립트 

window.parent.document.getElementById('myframe').width = '500px';

window.parent.document.getElementById('myframe').height = '500px';



2. jQeury

$('#myframe', window.parent.document).width('500px');

$('#myframe', window.parent.document).height('500px');



3. 동작이 안하는경우 

Uncaught TypeError: Cannot set property “height” of undefined

이런 에러가 날 경우는 


iframe 에 hegith 속성이 없기 때문이다.

<iframe hegith='200' ..

이런식으로 height 을 명시해주자!!

style='hegith:200' 이렇게 사용해도 안된다!!!




블로그 이미지

낭만가을

,
처음 부터 끝까지 인내를 가지시고 보면 진짜 인걸 알게 될겁니다.


동영상만 있어서 누군지 찿아보니 

주안장로교회 박영문 장로님 이네요.



블로그 이미지

낭만가을

,

아래 동영상을 보고 따라서 설치하자 






블로그 이미지

낭만가을

,

수많은 디자인 패턴을 다 익히려면 시간이 많이 걸립니다. 혹은 공부한 디자인 패턴을 잊어버리곤 하죠

요점만 딱 암기 하고 있으면 다음에 디자인 패턴을 쓰고 싶을대  그 요점을 기준으로 다시 생각이 나게끔 아래와 같이 정리를 해봤습니다.


 하위클래스에게 위임하기

1. Iterator : 순서대로 지정해서 처리하기

2. Adapter : 바꿔서 재이용하기

3. Template Method : 하위 클래스에서 구체적으로 처리하기

4. Factory Method : 하위 클래스에서 인스턴스 만들기 


 인스턴스 만들기 

5. Singleton : 인스턴스를 한 개만 만들기

6. Prototype : 복사해서 인스턴스 만들기

7. Builder : 복잡한 인스턴스 조립하기

8. Abstract Factory : 관련 부품을 조합해서 제품 만들기

 분리해서 생각하기

9. Bridge : 기능계층과 구현 계층 분리하기

10. Strategy : 알고리즘을 모두 바꾸기

 동일시 하기

11. Composite : 그릇과 내용물을 동일시 하기

12. Decorator : 장식과 내용물을 동일시 하기

 구조를 돌아다니기

13. Visitor : 데이터 구조를 돌아다니면서 처리하기

14. Chain of Responsibility 책임 떠넘기기

 단순화하기

15. Facade : 단순한 창구

16. Mediator : 중개인을 통해서 처리하기

 상태를 관리하기

17. Observer : 상태의 변화를 알려주기

18. Memento : 상태를 저장하기

19. State : 상태를 클래스로 표현하기

 낭비 없애기

 20. Flyweight : 동일한 것을 공유해서 낭비 없애기 

21. Proxy : 필요해지면 만들기

 클래스로 표현하기

22. Comman : 명령을 클래스로 하기

23. Interpreter : 문법규칙을 클래스로 표현하기




블로그 이미지

낭만가을

,
*게임시작*
로딩 후 Play Street Fighter II'CE → PLAY NOW

*조작방법*
이동 : 방향키
펀치 : S, D, F
킥 : X, C, V




'플래시 게임 > 액션' 카테고리의 다른 글

디펜스게임 ㅡ트리니타스-  (0) 2018.06.13
메탈 슬러그  (0) 2017.01.13
닌자 VS 좀비 2  (0) 2017.01.13
블로그 이미지

낭만가을

,

맑은고딕은 마이크로소프트 윈도우즈7 이상의 운영체제에서 기본으로 설치되있는 폰트입니다. 가독성이 매우 뛰어나며 매우 깔끔하고 우수한 디자인을 자랑하는 폰트죠. 티스토리 블로그를 운영하는 분들이 나눔 고딕과 맑은 고딕을 주로 사용하는데 저는 맑은 고딕이 더 맘에들었답니다. 자 그럼 티스토리 블로그에 맑은 고딕 폰트를 기본으로 설정하는 방법을 알아보도록 할께요

 

맑은고딕 폰트 예제

 

 

티스토리 관리자 메뉴 진입

첫번째로 티스토리 관리자 메뉴로 들어갑니다. ( 티스토리에 로그인된 상태면 블로그 화면에서 키보드 'Q'키를 누르면 관리자 모드로 바로갑니다. ) 왼쪽 메뉴에서 HTML/CSS 편집을 선택합니다.

 

 

Ctrl + F : Font

키보드의 Ctrl 키를 누른 상태에서 F를 눌러 웹브라우저의 검색창을 활성화 합니다. 아래의 화면처럼 웹브라우져의 상단에 하나의 바가 더생깁니다. ( 구글 크롬의 경우에는 오른쪽 상단에 작은 검색창이 생깁니다. ) 그리고 찾기 오른쪽 검색칸에 font 라고 입력합니다.

 

 

이제 아래의 화면처럼 skin.html의 오른쪽에 있는 화살표를 한번눌러 창을 작게 만들어줍니다. 우리가 수정해야될 부분은 style.css 부분이기때문에 위의 HTML부분은 작게 줄여서 보기 편하게 해주는거죠. 그리고 css 의 오른쪽 화살표도 한번눌러서 style.css 창을 넓게 확장합니다.  

 

 

Malgun Gothic , 입력

이제 Style.css화면에서 노란색 형광펜으로 칠한듯하게 표시된 font의 부분을 확인해가면서 글꼴 부분에 Malgun Gothic이라고 입력해줍니다. 아래의 화면을 보면 맨위의 바디 폰트 부분에서 Dotum 등의 글씨체가 표시된 바로 앞에 Malgun Gothic 그리고 콤마 , 를 추가로 입력해줍니다.

 

 

다음으로 Ctrl+F를 눌러 불러온 찾기 창을 다시한번 주목하세요 우리가 Font라고 입력한 부분 오른쪽을 보면 '이전', ' 다음' 버튼이 있습니다. 다음 버튼을 눌러서 style.css 부분의  font 나 font-family 부분의 글꼴 리스트 맨앞에 Malgun Gothic을 입력해줍니다.

 

 

 

font로 검색후 Dotum등 폰트이름이 보이면 맨앞에 Malgun Gothic , 입력

 

 

Font 로 검색한 후 아래의 스크린샷처럼 font-family 부분도 변경을 해주셔야합니다. Malgun Gothic , 를 다른글꼴 맨앞부분에 모두 적어주고 '미리보기'를 해보신후 제대로 적용이 안되면 다시한번 font 나 font-family 로 검색하여 모든 글꼴 앞에 Malgun Gothic을 적어주세요

 

 

기본적으로 폰트패밀리 부분을 보면 위 화면의 나눔고딕은 기록되있지 않습니다. 보통 font-family : dotum , sans-serif ; 등의 글꼴로 표시되있답니다. 어째됬건 폰트패밀리나 폰트로 검색하여 돋움이나 기타 글꼴 앞에 Malgun Gothic , 를 넣어주시면 블로그의 글을 맑은 고딕으로 볼 수 있습니다.

 

 

* 이 방법은 시스템에 맑은 고딕이 기본적으로 설치되 있을때 보이는 방식입니다. 윈도우즈7이상의 시스템에서는 기본적으로 설치되는 폰트이기 때문에 잘 표시될꺼에요 혹시 XP를 사용하는 시스템의 경우엔 2013년을 기점으로 MS의 공식지원이 끝난상태의 XP를 윈도우7이나 윈도우8로 업그레이드 할것을 권장합니다. *

 

* 티스토리의 글쓰기 모드에서는 맑은고딕으로 적용된 상태에도 맑은고딕으로 보이지 않습니다. 미리보기를 항상 눌러서 확인하시거나 혹은 비공개로 저장한 후 블로그에서 제대로 나오나 확인한 후 발행을 해주세요



블로그 이미지

낭만가을

,