소프트웨어 개발 165

Reader 등으로 글자 입력받기

다음과 같은 간단한 코드로 json 을 그냥 쌩으로 읽을 수 있다. 다만 json객체로 바꾸지는 못한다. Reader reader = new BufferedReader(new FileReader("sample.json")); int data = reader.read(); while(data != -1) { char c = (char) data; System.out.println(c); data = reader.read(); } 데코레이터 패턴을 이용했기 때문에 위와같이 reader안에 Reader를 리턴하는 문장으로 만든다. Reader reader = new BufferedReader(new FileReader("sample.json")); InputStream is = new ByteArrayInpu..

일반인을 위한 머신러닝(5) - 파이썬 다뤄보기

본 내용은 http://scikit-learn.org/stable/tutorial/basic/tutorial.html 튜토리얼에 있는 내용을 축약하여 편집한 내용입니다. 지금까지 이론적인것들에 치중되어서 상당히 재미가 없었다. 머신러닝의 인기남 응ㄱ 선생님은 Octave를 쓰기를 권장하시나, 사실 전용툴인 Octave와 범용툴인 Python의 재미차이는 어마어마합니다. 파이썬의 경우 기본적인 윈도우 프로그래밍부터 학술용 프로그램, 웹단 프로그램 등 못하는게 없는데 MATLAB과 같은 전용툴만 쓸 경우 추후에 뭔가 기획하고 확장시킬때 굉장한 제약사항으로 다가오기 마련이기 때문입니다. 일단 무작정 한번 파이썬을 구동하여 설치해보기 시작합니다. 물론 파이썬 설치법을 자세히 써놓으면 방문자수가 많이 늘테지만 귀..

③ 디자인 패턴(Design Pattern) - Flyweight

Flyweight 패턴은, 객체를 어마어마하게 많이 생성해야 할때 메모리가 굉장히 많이 들것을 대비하여, 최대한 공유가능한 부분을 이용해 가볍게 부담을 줄여주는 패턴이다. 일단 UML을 한번 엿보고 계속해보자. 출처 http://wiki.western.edu/mcis/ 웹과 같은 화면상에 여러개 구성요소가 존재할수 있는데, 만약 이미지같은것들이 동일하게 반복되고 있다면 별로 바람직하지 않다. 따라서 재사용할건 재사용하고 만들건 만들어서 좀 효용성이 있게 프로그램을 구성하면 좋다! 일단 인터페이스를 하나 만들자. 도형 인터페이스다.public interface Shape { void draw(); } 이를 상속해서 다음과 같은 사각형 클래스를 만들자. 사각형 클래스는 내부에 color와 length 를 가..

④ 디자인 패턴(Design Pattern) - Composite

Composite 패턴은 마치 나무와 같다. 바로 트리구조라는것. 자꾸 여기저기서 트리구조라고 하기 때문에 더 헷갈리는것 같기도 하다. 그렇지만 뭐 해보겠다. 일단 부품이 있다. Component라고 하자. 그 부품 종류에는 계속 부품을 꽂을 수 있는 Composite, 그리고 더이상 부품을 꽂을 수 없어 끝나는 Leaf 부품이 있다. (트리구조라 보통 이렇게 예를 잡는듯 하다.) 즉, Composite을 이용한다면 계속 부품을 꽂아서 객체를 만들어나갈수 있고, Leaf를 이용한다면 거기는 막다른 부품(?)이다. 일단 다음과 같은 기본 부품을 하나 만들어주자. Componentpublic interface Component { public void operation(); } 이제 이를 상속해서 실제 Le..

Java Documentation - Reader

Java Document에 있는 내용으로 알아서들 번역해서 보라 ReaderAbstract class for reading character streams. The only methods that a subclass must implement are read(char[], int, int) and close(). Most subclasses, however, will override some of the methods defined here in order to provide higher efficiency, additional functionality, or both. BufferedReaderReads text from a character-input stream, buffering character..

⑤ 디자인 패턴(Design Pattern) - Decorator

InputStream 관련한 자바 클래스를 보고있으면 정신이 아득해진다. 무슨 비슷한 이름들이 이렇게 많은지, 그리고 버전업을 하면서 뭐가 추가되었는지 어디서 코드를 복붙하지 않으면 아예 백지에서 생각해서 어? 그게 무슨 클래스였지 생각하기 힘들다. 출처 : https://www.clear.rice.edu/comp212/02-spring/labs/12/ 뭔가 비슷비슷한 이름들이 보기도 힘든 형태로 붙어있다. 자바 I/O 클래스는 데코레이터 디자인 패턴을 가지고 있는데, 이 데코레이터 패턴은 하나하나 장식을 매다는 클래스를 하나하나 만들어놓았기 때문에 위와같이 복잡한 형태의 UML이 그려질수밖에 없다. 초딩때 크리스마스 트리를 만들던 기억이 난다. 지금이야 귀찮지만, 그때는 얼마나 재미있었는지.. 일단 트..

⑥ 디자인 패턴(Design Pattern) - State

State 디자인 패턴도 마찬가지이지만 많은 디자인 패턴들은 나중에 변화가 생겼을때 코딩을 최소로 하고 갈아낄수 있게끔 만드는 것이다. 이로인해 추상화레벨은 올라가며 직관성은 조금 떨어지지고 이해하기가 조금 힘들지만, 한번 이해하고 나면 머리굴릴필요가 없다. 중요한것은 갈아낀다는 것에 중점을 맞추면 된다. 만약 State를 쓰지않고 단순한 상태 플래그를 가져가서 if else구문만을 이용해서 프로그램을 작성한다면, 나중에 프로그램이 수정될 경우 기존의 소스코드를 수정해야하기 때문에 어느정도 위험성이 있는것은 사실이다. 만약에 Context를 이용해서 그 대상이 되는 객체만 바꿔준다면, 기존의 소스코드를 수정할 필요 없이 객체만 바꿔주면 된다. 물론 뒷단의 프로그램에 영향이 있는지 없는지는 재확인해야 하는..

자바 주요 패키지 한글 설명 - 1.6 기준

java.applet 애플릿의 작성, 및 애플릿과 애플릿 문맥과의 통신에 사용하는 클래스의 작성에 필요한 클래스를 제공합니다. java.awt 사용자 인터페이스의 작성 및 그래픽스와 이미지의 페인트용의 모든 클래스를 포함합니다. java.awt.color 칼라 스페이스의 클래스를 제공합니다. java.awt.datatransfer 어플리케이션간 또는 어플리케이션내의 데이터 전송을 위한 인터페이스와 클래스를 제공합니다. java.awt.dnd 드래그&드롭 조작은, 많은 그래피컬 사용자 인터페이스 시스템으로 볼 수 있는 직접적인 조작 제스처(gesture)로, GUI 의 표현 요소에 논리적으로 관련한 2 개의 엔티티간에 정보를 변환하는 기구를 제공합니다. java.awt.event AWT 컴퍼넌트에 의해 트..

⑦ 디자인 패턴(Design Pattern) - Factory

팩토리 디자인 패턴은 자바에서 참 많이 구경할수 있는 대표적인 패턴이다. 팩토리는 내부적으로 상품을 하나 찍어내어 전달해주는 역할을 한다. 보통, new를 통해 인스턴스를 생성하는 경우가 대부분이지만, 팩토리에서는 Factory 혹은 이를 구현한 concrete Factory에서 인스턴스를 넘겨주게 된다. 대표적인 팩토리 패턴을 따르는 애들은 사실 Calendar이다. getInstance()를 통해서 객체를 생성하게 되는데 (보통은 create()메서드로 관습화 되어있는데, 칼렌더에서의 getInstance()는 너무 자주쓰다보니 이게 대체로 싱글톤 패턴에서 쓰이는 메서드인것과 혼동이 올때가 있다.) 이는 계속 칼렌다를 만들어 찍어내서 보내준다. new를 쓰는 방법과 다른점은, 추상클래스나 인터페이스를..

⑧ 디자인 패턴(Design Pattern) - Observer

옵저버는 도대체 어떤놈인가? 옵저버는 어떤 객체를 살펴서 그 소식을 전해주는 일종의 정찰병의 느낌이다. 스타크래프트의 옵저버는 이상한 소리나 내면서 그냥 공중에 안들키게 할일없이 떠있는 놈에 불과하지만, 얘는 쪼금더 뭔가 적극적인 느낌이다. 마치 고양이 목에 방울을 다는것과 같은 효과이다. 여기서 방울은 옵저버이며, 고양이는 관찰이 되는 대상이다. 일단, Observer 인터페이스와 Cat 클래스는 다음과 같다. Cat클래스는 옵저버에 관련된 메서드가 있어야 하는데, 이는 마치 고양이에 방울을 달아주는 역할을 한다. Cat 에는 priavet ArrayList //고양이 방울 리스트 public addObserver(Observer observer) //방울을 다는 메서드 public removeObse..