본문 바로가기

전체 글

한달만에 돌아보는 블로깅... 티스토리로 이사한지 오늘로 한달하고 하루가 지났다. 7월 14일에 옮겨왔고, 오늘이 8월 14일이니... 정말이지 시간이 빠른것 같다. 블로그를 이사한 시기와 겹쳐서 신규 개발건 및 안정화 건이 겹치는 바람에 제대로 포스팅이라는 것을 할 수가 없었다. 그래도... 이사한지 한달이 지나서 돌아보니 포스팅한 건이 14건 밖에 안된다는 사실에 심히 맘이 아프다..ㅠ.ㅜ 앞으로는 좀더 분발해서 포스팅 수를 늘려야 겠다. 젊어서 배우지 않으면 늙어서 알 수 없다!!! 배우고 포스팅하면서 하루하루를 알차게 지내자!!! 아자..아자..화이팅~!!!!! 더보기
옵저버 패턴 오늘 보려고 하는 내용은 옵저버 패턴이다. 옵저버 패턴의 정의는 다음과 같다. 옵저버 패턴(Observer Pattern)에서는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 내용이 갱신되는 일대다(one-to-many) 의존성을 정의합니다. 처음 보는 사람들은 저게 무슨말인지 도통 모를것 같다. 이 글만 읽고도 안다면 능숙한 개발자이거나 개발을 하면 크게 될 사람이라고 생각한다..ㅋㅋㅋ (ㅡㅡ;;) 간단히 풀어서 설명하면, 옵저버 패턴에서는 상태를 저장하고 있는 주제객체와 주제객체가 가지고 있는 상태값에 의존하는 옵저버들이 있다. 1. 주제 객체가 생성되어 서비스를 시작한다. 2. 옵저버 객체가 되기 위해 주제 객체에 옵저버 객체로 등록한다. 3. 옵저버 객체에서 탈.. 더보기
java.util.regex.PatternSyntaxException: Unclosed group near index 1 테스트 서버 가지고 뻘짓을 하던중 다음과 같은 exception이 발생했다. java.util.regex.PatternSyntaxException: Unclosed group near index 1 ( ^ at java.util.regex.Pattern.error(Pattern.java:1541) at java.util.regex.Pattern.accept(Pattern.java:1399) at java.util.regex.Pattern.group0(Pattern.java:2313) at java.util.regex.Pattern.sequence(Pattern.java:1586) at java.util.regex.Pattern.expr(Pattern.java:1558) at java.util.regex... 더보기
70-200 렌즈와 70-300 렌즈의 차이 문득 망원 렌즈를 하나 사고 싶어서 둘러보던중, 시그마 제품 중 70-200 렌즈와 70-300 렌즈가 있다는 것을 알게되었다. 그런데.... 가격을 보니 70-300 렌즈보다 70-200 렌즈가 훨~~ 씬 비싸다는 사실을 발견했다. 아무리 봐도 70-300 렌즈가 더 비쌀거 같은데....아니라니...정말이지 궁금했다. 그래서 이리저리 찾아본 결과, 70-200 렌즈의 경우 조리개가 f2.8로 고정었고 70-300의 경우에는 f4.5-5.6 사이의 가변 조리개 였다. 렌즈이 밝기가 훨씬 밝은데다가 고정 조리개 라는 것이 70-200이 훨씬 비싼 이유였다. 그래서 다시 시작되는 고민.... 일단 망원의 경우 밝아야 할 것 같은데...70-200 을 사려니 돈이 많이 모자라다...ㅠ.ㅜ 결국 구매를 3개월 .. 더보기
[Design Patterns] Strategy Pattern 4 이전 포스팅을 동적으로 나는 행위와 우는 행위를 바꿀수 있도록 수정해 보자. 클래스 다이어 그램은 다음과 같다. 수정해야 할 내용은 다음과 같다. 1. Duck클래스에 2개의 세터메소드를 추가해준다. setFlyBehavior(), setQuackBehavior() 2. 시뮬레이션 프로그램에서 원하는 메소드를 호출한다. 소스가 필요한 사람을위해 소스 추가해 놓는다. * 지금까지 우리가 본 strategy pattern에 대해 정의 하면 다음과 같다. Strategy Pattern에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. Strategy Pattern을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 더보기
[Design Patterns] Strategy Pattern 3 이전 포스팅에서 만든 프로그램의 문제점에 대해 다시 정리해 보자. 자바 인터페이스에는 구현된 코드가 전혀 들어가지 않기때문에 코드 재사용을 할 수가 없다. 즉, 한 행동을 바꿀때마다 그 행동이 정의 되어 있는 모든 서브클래스들을 일일이 수정해줘야 하는데, 이는 새로운 버그를 발생시킬 확률이 높다. 이러한 상황에 어울리는 디자인 원칙은 다음과 같다. "바뀌는 부분을 바뀌지 않는 부분과 분리해서 캡슐화 시킨다. 그렇게 하면 나중에 바뀌지 않는 부분에는 영향을 미치지 않은채로 그 부분만 고치거나 확장할 수 있다." 무슨 뜻인지 이해가 가는지...?? ㅋㅋㅋ 클래스 다이어 그램을 먼저 보면서 이해해 보자. 위에서 말한 디자인 원칙에 따르면, 자주 변하는 부분은 fly()와 quack() 이다. 이 부분들을 Du.. 더보기
[Design Patterns] Strategy Pattern 2 이전 포스팅에서 구현한 프로그램의 문제점에 대해서 생각해 보자 간단한 예를 들어서 문제를 집어보겠다. 오리 시뮬레이션에서 오리가 하늘을 날 수 있도록 하고 싶을때 어떻게 구현해야 할까?? 첫번째로 생각해 볼 수 있는것은 super class인 Duck 클래스에 fly()를 추가해주는 것이다. 누구나 가장 먼저 이 생각을 하지 않을까 싶다. 하지만 이렇게 할 경우, 하늘을 날지 않는 나무 오리라든가 고무 오리마저 하늘을 나는 경우가 발생한다. 나무 오리나 고무 오리가 하늘을 날지 못하게 하려면 별 수 없이 overriding(재정의)를 해야 한다. 거기에다가 나무 오리의 경우는 꽥꽥거리지 못하게 quack()도 overriding해줘야 한다. 이렇게 super class에 의존도가 높아지는 코딩을 한다면 .. 더보기
[Design Patterns] Strategy Pattern 1 포스팅한다는 것이 다른 사람들에게 보여주기 위한 것일수도 있지만, 머 어차피 이 포스팅은 내가 내 만족을 위해서 내 멋대로 적는 것이니 절대로...경어는 안쓴다..ㅡㅡ;; 한동안 머리를 굴리지 않았더만 머리가 녹이 슨 것같다. 그래서 이전에 공부했던 디자인패턴 책을 보면서 포스팅을 시작해 보려 한다. 오늘 포스팅하려는 것은 Head First Design Pattern 의 제일 첫번째 Strategy Pattern에 대해서이다. 본격적으로 스트릿티지 패턴에 들어가기 전에 다음 클래스 다이어 그램을 보자. 위의 다이어 그램은 간단한 오리 시뮬레이션 프로그램이다. 소스 코드는 첨부 파일을 참조해 주길 바란다. 위의 다이어 그램에 대해 간단히 설명하자면 다음과 같다. 우선 오리의 특성(quack, swimmi.. 더보기