본문 바로가기

Computer Science

(7)
[디자인 패턴] 옵저버(Observer) 패턴 정의 옵저버 패턴은 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때 마다 메서드 등을 통해 옵저버 목록에 있는 옵저버에게 변화를 알려주는 패턴이다. 객체와 주체가 분리되어 있을 수도 있고, 객체와 주체가 합쳐진 옵저버 패턴이 있을 수도 있다. 여기서 주체란, 객체의 상태 변화를 보고있는 관찰자이며, 옵저버들이란 이 객체의 상태 변화에 전달되는 메서드등을 기반으로 추가적인 변화 사항들이 생기는 객체들을 의미한다. 옵저버 패턴은 주로 이벤트 기반 시스템에 사용하며, MVC 패턴에도 많이 사용된다. 예를 들어, 모델에서 변경사항이 생겨 update() 메서드로 옵저버인 뷰에 알려주고 이를 기반으로 컨트롤러 등이 작동하는 방식이다. 옵저버 패턴의 장점 주체와 관찰자들 사이의 결합도를 낮출 수 있..
[디자인 패턴] 전략(Strategy) 패턴 정의 전략 패턴은, 정책 패턴이라고도 하며 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 캡슐화된 알고리즘을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다. 전략 패턴은 여러 알고리즘이나 행동 중에서 선택해야 할 때 유용하다. 클라이언트 객체는 일련의 전략 객체 중 하나를 선택하고, 선택된 전략 객체는 클라이언트에서 필요한 일을 수행한다. 예를 들어서, 동일한 작업을 수행하고 있는 여러 알고리즘이 있는 경우, 전략 패턴을 사용하여 이러한 알고리즘을 캡슐화하고 클라이언트 코드와 분리할 수 있다. 이렇게 하면 새로운 알고리즘을 추가하거나 기존 알고리즘을 변경할 때 클라이언트 코드를 변경할 필요가 없다. 전략 패턴 예시 자바코드 전략 패턴을 예시로 설명하기 위해, 간단..
[디자인 패턴] Factory 패턴 정의 팩토리 패턴 은, 생성 패턴 중 하나로 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자, 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다. 즉, 객체를 생성하는 인터페이스를 미리 정의하지만, 인스턴스를 만들 클래스의 결정은 서브 클래스 쪽에서 결정하는 패턴이다. 여러개의 서브 클래스를 가진 슈퍼 클래스가 있을때, 들어오는 인자에 따라서 하나의 자식클래스의 인스턴스를 반환해주는 방식이다. 팩토리 패턴은 클래스의 인스턴스를 만드는 시점 자체를 서브 클래스로 미루는 것이다. 팩토리 패턴을 요악해서 말하면, 객체 생성을 대신 수행해주는 공장이라고 표현할 수 있다. 팩토리 패턴 장점 - 상위 클래스..
[디자인 패턴] Singleton 패턴 정의 - 싱글톤 패턴은, 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 보통 데이터베이스 모듈에 많이 사용한다. - 하나의 인스턴스를 만들어 놓고, 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에, 인스턴스를 생성할 때 드는 비용이 줄어드는 장점이 있다. 자바에서의 싱글톤 패턴 자바로는 다음과 같이 중첩 클래스를 이용해서 만드는 것이 가장 대중적인 방법이다. class Singleton { private static class singleInstanceHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return singleInstanceHo..
[Oracle] Materialized View 정리 Materialized View란? 관계형 데이터베이스에서 view를 가상의 테이블이라고 한다. 따라서 인덱스를 잡을 수 없다. MVIEW라고 불리는 물리 뷰(구체화 뷰)의 용도는 그룹함수 min, max, sum, avg 등의 값을 미리 만들어 놓을 때 유용하며, user_segments에서 확인이 가능하다. 구체화 뷰는 기존 뷰와 비슷하지만, 차이가 나는 부분은 실제 데이터를 자신이 가지고 있으며, 원본 테이블에 INSERT, UPDATE, DELETE가 발생하면 새로운 데이터를 구체화된 뷰에 반영한다. REWRITE 힌트 구문에 구체화뷰가 인자로 와도 되고 안 와도 된다. 인자로 뷰 리스트를 주지 않는 경우 적절한 materialized view를 찾고 항상 비용과 관계없이 사용한다. Materia..
Quick DBD 사용후기 얼마전에 졸업프로젝트로 ERD 설계를 할 때, 어떤 툴로 ERD 설계를 할까 고민하다가 다른 제품의 툴을 사용해 작성해본적이 있었다. 완성해보고 보니까 디자인이 별로였고 SQL 쿼리로 관계를 작성하는게 아니라 디자인 툴로 작성하다 보니 쿼리 명령어는 어떻게 쳐야되고, 또 테이블간 관계에 대해 애매모호함이 많았다. 그렇게 아쉬움만 남긴뒤 얼마전 활동하고 있는 동아리(UMC) 3주차 강의에서 QUICK DBD라는 ERD 툴이 있다는 것을 소개하였다. 쿼리로 작성한 코드를 시각적으로 볼 수 있다는 점과 무엇보다 UX가 매우 부드럽고 깔끔하다는 점에서 매료되었다. 그래서 기존 ERD를 QUICK DBD를 사용해 다시 작성해볼 계획이다. QUICK DBD는 디자인이 정말 깔끔하고 예쁘다. FIle -> Color..
[자료구조/JAVA] - 링크드 리스트(Linked list) 링크드 리스트란? 링크드 리스트(linkedlist)는 각각의 데이터가 노드(Node)로 구성되어 연결이 되있는 구조이다. 각각의 노드는 데이터와 함께 다음노드(next)와 이전노드(prev)를 가지고 있다. 노드는 linkedlist에 객체를 추가하거나 삭제하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다. 중간에 데이터를 추가하거나 삭제해도 밀리거나 당겨지는 현상이 없기에 ArrayList에 비해 데이터의 추가나 삭제가 용이하나, 인덱스가 없어 특정 요소에 접근하기 위해서는 순차 탐색이 필요로 해 오래 걸린다는 단점이 있고, 링크 필드로 인한 기억 공간이 많이 필요하다. 탐색/정렬을 많이 하는 경우는 배열을 사용하고 탐색/삭제를 많이 하는 경우에는 링크드 리스트를 사용하는 것이 좋다. Link..