Computer Science
-
[디자인 패턴] 옵저버 패턴 (Observer Pattern)Computer Science/Design Pattern 2022. 12. 13. 16:51
옵저버 패턴이란? : 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴 - 주체: 객체의 상태 변화를 보고 있는 관찰자 - 옵저버: 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 '추가 변화 사항'이 생기는 객체 - 한 객체의 상태 변화에 따라 다른 객체 상태도 연동되도록 1:N 의존 관계를 구성 - Java는 기본적으로 옵저버 패턴을 적용한 Observer 인터페이스, Observable 클래스를 제공 (Observable은 상속을 해야하기 때문에 다른 상속을 함께 사용할 수 없는 단점 존재) [ 구현 방법 ] interface Subject { public void register(Observer..
-
[디자인 패턴] 전략 패턴 (Strategy Pattern)Computer Science/Design Pattern 2022. 12. 13. 14:09
전략패턴이란? : 실행 중에 알고리즘을 선택할 수 있게 하는 행위(Behavioral) 소프트웨어 디자인 패턴 - 특정한 계열의 알고리즘을 정의하고 각각 캡슐화하며 해당 계열내에서 상호 교체가 가능하게 함 - 어떤 동작을 하는 로직을 정의하고, 이것을 캡슐화하여 관리하는 패턴 (ex. 결제할 때 네이버페이, 카카오페이 등 '전략'만 바꿔서 결제가 가능하게 함) - 독립적으로 알고리즘을 다양하게 변경할 수 있으며 기능 추가, 로직 변경시 유연하게 확장 가능 - 어떤 전략을 사용할지 외부에서 데이터 입력이 필요 - 클래스를 수정하지 않고도 기능을 추가하거나 변경할 수 있음 [ 구현 방법 ] // 결제 전략 인터페이스 interface PaymentStartegy { public void pay(int amo..
-
[디자인 패턴] 팩토리 패턴 (factory pattern)Computer Science/Design Pattern 2022. 12. 13. 00:09
팩토리패턴이란? : 객체 생성 처리를 하위 클래스로 분리해 처리하도록 캡슐화하는 패턴 - 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화 - 상속 관계에 있는 두 클래스에서 상위클래스는 중요한 뼈대를 결정하고 하위클래스는 객체 생성에 관한 구체적인 내용을 결정 - 상위 클래스에서는 인스턴스 생성 방식에 대해 관여하지 않기 때문에 더 많은 유연성을 가짐 - 객체 생성로직이 따로 있기 때문에 코드 리팩토링에 있어서 편의성 증가 [ 구현 방법 ] abstract class Coffee { public abstract int getPrice(); @Override public String toString() { return "This coffee is " + this.getPrice(); } } cla..
-
[디자인 패턴] 싱글톤 패턴(Singleton Pattern)Computer Science/Design Pattern 2022. 12. 12. 23:41
싱글톤패턴이란? : 단 '하나'의 인스턴스만 생성하여 사용하는 디자인패턴 - 애플리케이션에 시작될 때, 클래스가 최초 한 번만 메모리를 할당하고 해당 메모리에 인스턴스를 만들어 지속 사용 - 생성자가 여러번 호출되더라도, 객체는 최초 호출시에만 한 번 생성되며 이후 호출부터는 이미 생성한 객체를 반환 [ 구현 방법 ] public class Singleton { // 1. static 영역에 객체를 1개만 생성 private static final Singleton instance = new Singleton(); // 2. public으로 인스턴스가 필요할 경우 static 메서드를 통해 조회만 가능하도록 허용 public static Singleton getInstance() { return inst..
-
[디자인 패턴 Java] 디자인 패턴이란?Computer Science/Design Pattern 2022. 10. 12. 01:19
디자인 패턴이란? : 프로그램을 설계할 때 발생했던 문제점들을 해결할 수 있도록 하나의 '규약' 형태로 만들어놓은 것 - 재사용성, 호환성, 유지보수성을 예방하기 위해 패턴을 만들어 둔 것으로 특정한 구현이 아닌 아이디어임 디자인 원칙 나쁜 디자인(Design Smell) 1. 경직성 (Rigidity) - 시스템을 변경하기 어려운 디자인. 하나를 변경하기 위해 다른 것들을 변경해야 할 때 경직성이 높다고 함. 2. 취약성 (Fragility) - 특정 부분을 수정하였을 때 관련이 없던 다른 부분에 영향을 줄 때 취약성이 높다고 함. - 수정사항이 관련되지 않은 부분에도 영향을 주므로, 관리하는 비용이 높아지고 시스템의 신뢰성이 낮아짐. 3. 부동성 (Immobility) - 모듈이 쉽게 추출되지 않고 ..
-
[자료구조 Java] 비선형 자료구조 ④ 맵 (Map), 집합 (Set), 해시테이블Computer Science/Data Structure 2022. 10. 5. 19:02
비선형 자료구조란? : 일렬로 나열하지 않고 자료 순서나 관계가 복잡한 구조를 말하며 일반적으로 트리나 그래프를 의미 5. 맵 (Map) : 특정 순서에 따라 키(Key)와 매핑된 값(Value)의 조합으로 형성된 자료 구조 - 리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고, Key 를 통해 Value를 얻을 수 있음 - Key는 중복될 수 없으며, Value는 중복 값을 허용함 - 자바에서 Map은 인터페이스로, 인터페이스를 구현 Map자료형에는 HashMap, LinkedHashMap, TreeMap 등이 있음 5-1. HashMap 주요 메소드 import java.util.HashMap; public class Test { public static void main(String[] ar..
-
[자료구조 Java] 비선형 자료구조 ③ 힙, 우선순위 큐Computer Science/Data Structure 2022. 10. 5. 18:33
비선형 자료구조란? : 일렬로 나열하지 않고 자료 순서나 관계가 복잡한 구조를 말하며 일반적으로 트리나 그래프를 의미 3. 우선순위 큐 : 우선순위 대기열이라고도 하며, 대기열에서 우선순위가 높은 요소가 우선순위가 낮은 요소보다 먼저 제공되는 자료 구조 - 데이터들이 우선순위를 가지고 있고, 우선 순위가 높은 데이터가 먼저 나감 - 우선순위 큐는 배열, 연결리스트, 힙으로 구현 가능하며 힙으로 구형하는 것이 가장 효율적 구현 방법 삽입 삭제 순서 없는 배열 O(1) O(n) 순서 없는 연결 리스트 O(1) O(n) 정렬된 배열 O(n) O(1) 정렬된 연결 리스트 O(n) O(1) 힙 O(log n) O(log n) 3-1. 우선순위 큐의 활용 - 시뮬레이션 시스템 - 네트워크 트래픽 제어 4. 힙 (H..
-
[자료구조 Java] 비선형 자료구조 ② 트리Computer Science/Data Structure 2022. 10. 5. 17:51
비선형 자료구조란? : 일렬로 나열하지 않고 자료 순서나 관계가 복잡한 구조를 말하며 일반적으로 트리나 그래프를 의미 2. 트리 : 계층적 관계를 표현하는 자료구조 2-1. 관련 용어 - Node(노드): 트리를 구성하고 있는 각각의 요소 - Edge(간선): 노드와 노드를 연결하는 선 - Root Node(루트 노드): 트리 구조에서 최상위에 있는 노드 - Terminal Node(=Leaf Node, 단말 노드): 하위에 다른 노드가 연결되어 있지 않은 노드 - Internal Node(내부 노드, 비단말 노드): 단말 노드를 제외한 모든 노드 (루트노드도 포함) - Sibling: 같은 부모를 가지는 노드 - 노드의 크기: 자신을 포함한 모든 자손 노드의 개수 - 노드의 깊이: 루트에서 어떤 노드에..