분류 전체보기 850

⑬ 디자인 패턴(Design Pattern) - Visitor

방문자 패턴은, Composite 패턴과 크게 다르지 않다. 내부적으로 예를들어 정말 쉬운 예로, 파일 탐색기를 구현해볼수 있는데 파일 탐색기는 자꾸 여기저기 돌아댕기면서 필요한 파일을 찾아서 자기 호주머니에 그 파일들이 있는지 잘 적어놨다가 방문이 모두 끝나면 사용자에게 결과를 보여줄수 있다. 이 탐색기는 방문자(Visitor)이다. 그리고 이를 받아들이는 놈들은 어떻게 부르는지는 크게 중요하지는 않지만 여기서는 Host로 칭하자. 이 Host들은 방문자의 방문을 받아들이며 accept(Visitor v) 필요한 처리를 해준다. 일단 추상 클래스로 만들어진 Host를 한번 만들어보자. public abstract class Host{ public abstract String getName(); publ..

⑫ 디자인 패턴(Design Pattern) - Chain of responsibility

Chain of responsibility라는 이름에 답이 있다. 각자의 클래스는 어떤 일을 처리할수 있는데, 가끔씩은 내가 처리할수 없는 일도 있다. 이러한 경우 내 선에서 굳이 처리하지 않아도 되고 판단하에 다음 클래스를 태워서 판단하게 할수 있다. 만약, 은행대기열에서 짝수 대기열만 처리하는 은행원도 있으며 홀수만 처리하는 은행원도 있다고 치자. 대기열을 받기는 받는데, 내가 처리하여야 할 상황이 아니면 다른놈으로 넘겨버려야 한다. 이는 마치 회사 상황과도 같는데, 일단 특정 프로세스에 문의사항이 생긴 직원운 지가 찾아볼 생각은 안하고 대충 담당자일것 같은 사람에게 메일을 보내고 바로 처리해주거나 은근히 다른 담당자를 찾아서 포워딩해주기를 바란다. 이제 토스가 일어나는 순간이다. 문의를 받은 직원은..

⑪ 디자인 패턴(Design Pattern) - command

왜 굳이 메서드를 이용해서 쉽게 쉽게 가지않고, Command라는 인터페이스를 받아서 복잡하게 구성하는가? 클래스로 기능을 설정하면 이력등을 관리하기가 좋고, 나중에 필요한 기능 (ConcreteCommand)를 추가 하기가 쉽다. 단지 Command 만 상속받아서 구현을 하면 되니까. 커맨드 패턴은 기능을 실행하라고 하는 Sender와 요청을 받아들이는 Receiver가 완벽하게 분리되며 요청을 받아들이는 Receiver입장에서는 Sender의 인터페이스 따위는 알 필요가 없는 패턴이다. 위의 UML을 따라서 한번 구현한다. 코드는 시간이 없어서 위키피디아에 있는걸 그대로 따온다. Command 인터페이스는 모든 ConcreteCommand에서 상속을 받아 구현하기때문에 굉장히 간단하게 execute(..

⑨ 디자인 패턴(Design Pattern) - proxy

프록시란 참 여러군데서 많이 쓰인다. 인터넷에서는 우회하는데 쓰이기도 하고, 빠르게 내용을 가져올때 쓰기도 한다. 일단 디자인패턴에서 쓰이는 프록시는 빠르게 내용을 가져오고 정말 중요한게 있으면 본 서버에서 데이터를 가져오는 인터넷에서의 프록시와 개념이 같다. 일단, 어떠한 작업이 있다고 하자. 가벼운일과 무거운일. 가벼운일을 처리하는데는 프록시를 쓰고 무거운일을 처리하는데는 본 기능을 부른다. 이렇게 해서 괜히 헤비한 객체의 생성을 피할수 있다. 마치 회사에서의 사원의 모습같다. 온갖 짬처리를 하다가 제대로 큰건이 있으면 보고를 통해서 과장이 처리하게 되는것이다. 위에서 프록시는 지가 처리할수 있으면 처리하며(짬처리) 진짜 본체는 중요한 일만 골라서 하는 놈이다. 이 포스트에서는 단 세개의 직관적인 p..

HTML5 생소한 태그들 정리

HTML5에는 뭐 쓸데없는 잡다한걸 다 가져다 표준으로 만들어놨는데, 현재로써 이걸 100% 쓰는것은 그다지 안전하지는 않아서 되도록 다른 방법이 없으면 쓰는것이 맞지만.. 어쨌뜬. 구조 - 태그가 별 기능은 없고, 나누는 기능만 한다. 사실, 그다지 이렇게 쓸 필요가 없기도 하다. 그룹 - 위첨자 - 아래첨자 - 변수 - 아랍어는 방향이 반대다. 이걸 표현해주기 위함 - 루비텍스트 폼 - RSA 만 생성됨 테이블 - 종료태그없음

일반인들을 위한 머신러닝 (6) - 신경망 알고리즘

그렇다면, 여러가지 수학식이 있고 충분히 이를 통해 학습된 결과식을 받아볼수 있는데 대체 이 신경망 알고리즘은 무엇인가? 기계학습 + 신경망 이라면 굉장히 있어보인다. 따라서 적어본다.위와같은 분포를 따라 식을 세우고 싶으면, 상당히 복잡할수 있다. 현재는 x1, x2 두 변수에 대해서만 그래프로 나타내고 있는데, 이를 식으로 나타내보면 다음과 같다.$$수식$$혹시 이 두개의 변수를 벗어나 세개..네개..다섯개.. 점점 많아진다면 이제는 삼차원 그래프로도 나타내기도 어렵고 실제로 식으로도 나타내기 힘들다. 대체 나타낼 방도도 없고 파악해봤자 별로 눈에 딱들어오지도 않아서 그다지 무쓸모일 가능성이 크다. 게다가 데이터가 굉장히 커지면 이를 계산하는데도 상당히 많은 컴퓨팅파워가 소모될수 있다. 신경망 알고리..

신경망과 인공지능 (예쁜꼬마선충)

사람들에 많은 노벨상을 안겨준 세상에서 제일 간단한 생물체가 있다. 바로 예쁜꼬마선충이다. 예쁜꼬마선충은 그 단순함에도 불구하고 생물이라는 장점으로 수많은 사람들의 연구대상이 되어왔고, 1900년대부터 참으로 많은 사람에게 그 몸체를 다 잘려와서 구조가 다 드러났다. 이 300여개 되는 신경망을 지도로 그려낸 용자가 있는데, 이로부터 몇십년 후, 나같이 집에서 컴퓨터나 만지고 있는 할일없는 사람들은 이를 레고로봇으로 재현해냈다. 이 레고로봇은 인위적인 알고리즘이 아닌 본인의 선택과 연결상태에 따라 행동을 결정하며, 이는 오리지널 예쁜꼬마선충의 원시적인 몸짓과 크게 다르지 않다. 과연 이 로봇은 생물체인가 아닌가? 사실 머신러닝(패턴인식)쪽의 신경망은 위의 생물체가 신경을 통해 움직이는 일과는 조금 다른 ..

① 디자인 패턴(Design Pattern) - facede

façade패턴. 정말 별게 아니다 위와같이, 복잡하나 연관성있는 메서드들을 다시 하나로 묶어서 제공하는 지극히 평범한 패턴이다. 이것은 특별한 패턴도 아니며, 그저 기능을 모아놓은 역할만 할 뿐이다. 이 포스팅에서 설명조차 하지 않겠다. 그냥 니가 쓰는 잡다한거 다 모아놓은 클래스로써, 나중에 최종으로 보이는 코드는 꽤나 깔끔하다.

쓰레드(Thread) 관련 메서드가 죄다 Deprecated 된이유.

쓰레드를 잠시 멈추거나 재개하고 싶을때, 정말 쉽사리 많이쓰던 메서드는 stop(), suspend(), resume()이다. 다만 이 메서드들은 현재 deprecated되어서 사용이 권장되지 않는다. 쓰레드를 이용한 복잡한 동시성 프로그램을 파악가능하고 완벽하게 만들기에는 거의 불가능에 가깝다는게 여러사람의 말이다. 스칼라에서도 마찬가지 개념이 전반적으로 깔려있지만, 쓰레드의 메서드가 deprecated된 이유는 자명하다. 안전하지 않기 때문이다. 그 전에 쓰레드의 개념에 대해 알 필요가 있다. 쓰레드는 쉬운개념이다. 우리가 동시에 두개의 일을 프로그램에게 시키고 싶을때 쓰레드를 사용한다.웹 프로그램 같은 경우 동시에 여러 사용자가 서버에 접속해서 일을 하게 되는데, 이를 효과적으로 동시에 처리를 해주..