* 옵저버 패턴 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의 * Java 내장 옵저버 패턴 작동 방식 Observer 객체 : java.util.Observer 구현 Subject 객체 : java.util.Obervable 상속 * java.util.Observable 단점 . 클래스이기 때문에 상속해서 사용해야한다. 그래서 재사용성에 제약. . 인터페이스가 없기 때문에 Observer API와 잘 맞는 클래스를 직접 구현 불가. . Observable 클래스의 핵심 메소를 외부에서 호출 불가. 서브클래스를 인스턴스 변수로 사용 불가. -> 직접 API 구현해서 사용 * 디자인 원칙 1. 애플리케이션에서 달라지는 부분을..

소프트웨어 개발에 있어서 바뀌지 않는 것 : 변화 나중에 어떻게 바뀔 것인지 생각해라 디자인패턴 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책 훌륭한 객체지향 디자인 품질을 갖추고 있는 시스템을 개발하는 방법을 제공 구상 (Concreate) 클래스란? 추상 (Abstract) 클래스와 대조적으로 모든 메서드를 구현한 클래스 구성(Composition) : A has B (캡슐화, 느슨한 결합) 상속(Inheritance) : A is B 전략 패턴 알고리즘을 캡슐화하고 이를 교환하여 사용하는 패턴 전략 패턴은 코드의 유연성과 재사용성을 높여주며, 알고리즘의 변경이나 추가에 용이 비슷한 작업을 수행하지만 다양한 알고리즘을 적용해야 하는 경우에 전략 패턴을 사용하여 코드를 구현 C..
- 데이터가 많아지면 HashMap보다 binarySearch 가 더 빠르게 동작 O(logN) - HashMap은 보통 O(1)이지만 데이터가 많아져서 index가 같으면 LinkedList 사용으로 O(N) Java 8부터 Red-Black-Tree 사용하여 O(logN) index에 entity가 8개 이상일 때 LinkedList > Tree 변경 - 배열은 Arrays.binarySearch - List, Set은 Collections.binarySearch https://d2.naver.com/helloworld/831311
Arrays.sort(double[]), Arrays.sort(int[]), Arrays.sort(char[]), Arrays.sort(long[]), Arrays.sort(float[]), Arrays.sort(byte[]) : DualPivotQuicksort (JDK 7) Collections.sort(List), Collection.sort(List, Comparator), Arrays.sort(Object[]) : Collections.sort는 Arrays.sort를 호출하여 Arrays.legacyMergeSort, ComparableTimSort 사용 시간 복잡도 Timsort Introsort Merge sort Quicksort Insertion sort Selection sort Sm..
* Enumeration : Iterator의 구버전 * ListIterator : Iterator의 접근성을 향상시킨 것. 단방향 → 양방향 - Collection 클래스에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것. 다형성 - Collection 클래스의 iterator()를 호출해서 Iterator를 구현한 객체를 얻어 사용. - Collection Framework 중 List, Set 인터페이스에서 사용 가능. - Iterator 객체를 생성하여 사용하기 때문에 느림. - remove() 메소드는 next() 메소드 호출 후에 사용 가능. List list = new LinkedList(); Iterator it = list.iterator(); while(it.hasNext()){ S..
String - immutable(불변적), thread-safe(여러 스레드가 동시에 접근해도 값이 변하지 않기 때문에 문제가 없다.) - String 객체를 생성하여 메모리 공간은 변하지 않는다. (Heap 영역에 할당) - +, concat 연산 시 새로운 String 객체를 생성하여 문자열을 복사하고 새로운 객체를 가리킨다. (오버헤드 발생) - 기존 String 객체는 특정 시점에 Garbage Collector 에 의해 반환 - String 클래스는 문자열 연산이 적고 조회가 많을 때 멀티쓰레드 환경에서 사용하면 좋음. StringBuilder - mutable(가변적) - 클래스를 한번 생성하고 연산 시 버퍼크기를 변경하여 문자열을 변겅 - 동기화를 지원하지 않아서 멀티스레드 환경에 취약 -..
□ EJB (Enterprise JavaBeans) 엔터프라이즈 자바빈즈(Enterprise JavaBeans; EJB)는 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다. 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. EJB 사양은 Java EE의 자바 API 중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할을 한다. Multi-tier의 분산형 객체지향 JAVA 어플리케이션을 개발하고 보급하기 위한 컴포넌트 아키텍쳐로서 Sun 사에서 개발했고, EJB는 확장성 있는 어플리케이션 서버 컴포넌트들을 지원하는 여러 서비스들을 제공함으로써 비즈니스 어플리케이션들을 컴포넌트 단위로 쉽게 작성 할 수 있도록 합니다. EJ..