
Factory Method Pattern 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며, 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴. 객체 생성용 인터페이스를 정의하고 해당 인스턴스를 상속한 서브클래스가 어떤 클래스를 인스턴스화(객체 생성) 할 지 결정할 수 있도록 한다. 팩토리 메소드는 객체 생성을 서브 클래스에서 할 수 있도록 미룰 수 있게 한다. Q. 왜 굳이 자식 클래스에서 객체를 생성하도록 미루는 것이고 얻을 수 있는 장점이 뭘까? 실제 객체를 생성하기 위해서 new를 사용한다. new를 호출해서 객체를 생성하게 되는데 생성할 객체가 다양하고 추가/삭제 등 변경이 잦다면 어떻게 될까? A. 클라이언트 단의 잦은 코드 수정이 불가피하게 되고 이는 객체지..

Decorator Pattern 객체에 추가적인 요건을 동적으로 추가해주는 패턴으로, 서브 클래스를 만들지 않고 기능을 유연하게 확장할 수 있게 한다. 데코레이터 패턴에서의 상속은 공통적인 타입으로 추상화하기 위한 용도가 주 목적이다. 데코레이터는 인터페이스/추상 클래스로서 역활을 하고 이를 상속받은 클래스들은 컴포넌트를 꾸미기 위한 구현을 갖게 된다. 컴포넌트는 바로 사용되거나 데코레이터레가 붙어서 사용될 수 있다. 예시 데코레이터 패턴을 일상생활의 예시로 커피를 들 수 있다. 커피를 생각해보면 에스프레소, 콜드블루는 컴포넌트가 될 수 있고 얼음, 시나몬 가루, 우유, 두유, 샷, 자바칩 등은 모두 데코레이터 클래스를 상속받은 데코를 위한 클래스가 될 수 있다. 이때, 최상위 추상 클래스/인터페이스를 ..

Observer Pattern 옵저버 패턴은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하고 상태의 변화가 있을 때 마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 패턴이다. 정리하면 변화가 발생될 것이 예상되는 객체에 옵저버를 보내놓고 변화가 일어나면 옵저버들을 통해 알림을 보내는 것이다. 다이어그램 Main.java 코드 public class MainWindow extends FrameWindow implements ActionListener, Subject { // 생략 private static final ArrayList observers = new ArrayList(); private PrimeObservableThread primeThr..

Strategy Pattern _ 전략 패턴 같은 종류의 작업을 하는 알고리즘을 정의하고, 각 알고리즘을 캡슐화 하여 알고리즘들을 서로 바꿔 사용할 수 있도록 한다. strategy 패턴은 알고리즘을 사용하는 클라이언트로 부터 독립적으로 알고리즘을 바꿔서 적용할 수 있게 한다. 클래스 다이어그램 Main.java _ 코드 import java.text.ParseException; import java.text.ParsePosition; import java.util.Arrays; import java.util.Date; import java.text.SimpleDateFormat; public class Main { String[] names = {"CompareModifiedDate", "Compare..
Polymorphism _ 다형성 하나의 객체가 여러개의 타입을 가질 수 있는것을 말한다. 부모 클래스 타입의 참조변수로 여러 자식 클래스 타입의 인스턴스를 참조할 수 있다. 인스턴스를 이용한 상속관계 및 오버라이딩을 사용하여 구현한다. Main.java _ 코드 import Converter.DocxDocConverter; import Converter.OdtDocConverter; import Converter.PdfDocConverter; public class Main { public static void main(String[] args) { WordProcessor wp = new WordProcessor("new doc"); wp.setSpellChecker(new EngSpellChecke..

Allocation of Physical Memory 메모리는 일반적으로 두 영역으로 나뉘어서 사용된다 OS 상주 영역 interrupt vector와 함께 낮은 주소 영역 사용 사용자 프로세스 영역 높은 주소 영역 사용 사용자 프로세스 영역의 할당방법 Contiguous allocation 각각의 프로세스가 메모리의 연속적인 공간에 적재되도록 하는 방법 Fixed partition allocattion Variable partition allocation Noncontiguous allocation 하나의 프로세스가 메모리의 여러 영역에 분산되어 할당하는 방법 현대에 사용하고 있는 방식이다 Paging : 일정한 크기로 물리 메모리 공간을 잘개 쪼갬 Segmentation : 논리적 단위로 물리 메모리..

Logical vs. Physical Address Logical address 프로세스마다 독립적으로 가지는 주소공간. 각 프로세스마다 0번지부터 시작한다. CPU가 보는 주소는 logical address이다. Physical address 메모리에 실제로(물리적 공간) 올라가는 위치 Q. 주소 바인딩이란? A. 주소를 결정하는 것 Symbolic Address -> Logical Address - ... (이때가 언제일까?) ... -> Physical Address symbolic Address란? 함수나 변수값으로 메모리를 사용하는 것을 symbolic address라 한다. 컴파일이 되면 해당 메모리가 프로세스의 논리적 메모리 주소로 변환이 되고, 이를 실제 물리적 메모리 주소로 변환해서 처리..

Window Control TCP는 Reliable한 통신을 위해서 수신측과 네트워크의 상태를 파악해서 전송량을 조절하는 기법이 존재한다. 이를 조절하는 기법을 Window Control이라고 한다. 여기서 수신측의 혼잡도를 확인하고 조절하는 것이 Flow Control, 네트워크의 혼잡도를 유추해서 조절하는 것이 Congestion Control이다. RTT Round Trip Time의 약자로 Data가 수신측에 전송되어 ACK를 수신측에서 받을 때 까지 걸린 총 시간을 지칭한다. 이 시간이 길 수록 데이터 전송량은 줄어드어 전송량과 반비례 관계를 갖는다. Window ACK의 수신 없이도 보낼 수 있는 패킷의 최대 크기를 말한다. Window가 1000이라면 ACK를 수신받은 후 ACK의 수신 없이..

Automatic Repeat reQuest 수신측과 송신측의 데이터 전송과정에서 패킷의 오류나 손실이 발생 시 reliable한 통신을 위해서 해당 패킷을 다시 보내게 된다. 이때 어떻게 해당 패킷을 인지해서 다시 보낼지에 대한 방법이다. Stop-and-Wait, Go-Back-N, Selective-Repeat, 3-duplicate-ACK 방식 등이 존재한다. ARQ가 존재하기 때문에 TCP는 Relialbe한 통신이 될 수 있다. Stop and Wait 하나의 프레임을 보내고 ACK가 올 때까지 기다리는 방식이다. -> 프레임이 손실되거나 손상을 입은 경우 ACK는 오지 않게되고 해당 프레임에 대한 Timer 만료로 인해 재전송이 가게 된다. 제대로 온 프레임에 대해서만 ACK를 보내고 그외에..

데드락 (교착 상태) 자신이 가진 자원은 포기하지 않은채 상대방의 자원을 원하는게 맞물린 상태 Deadlock 일련의 프로세스들이 서로가 가진 자원을 기다리면 block된 상태 Resource 하드웨어, 소프트웨어 등을 포함하는 개념 i/o device, cpu cycle, memory space, semaphore 등 프로세스가 자원을 사용하는 절차 : (1)request → (2)allocate → (3)use → (4)release Deadlock 발생 조건 4가지 Mutual exclusion 매 순간 하나의 프로세스만이 자원을 사용할 수 있다 No Preemption 프로세스는 자원을 스스로 내놓을 뿐, 강제로 빼앗을 수 없는 경우 Hold and wait 자원을 가진 프로세스가 다른 자원을 기..

Producer - Consumer Problem Producer 자원 : 비어있는 버퍼 공유 메모리(버퍼)에 접근하여 Empty-Buffer를 확인한다. 공유메모리에 접근할 때마다 빈 버퍼의 개수는 줄고, 데이터는 추가된다. Consumer 자원 : 채워져있는 버퍼 공유 메모리(버퍼)에 접근하여 Full-Buffer를 확인한다. 공유 메모리에 접근할 때마다 빈 버퍼의 개수는 늘고, 데이터는 줄어든다. 동기화를 위한 Semaphore 변수 Producer & Consumer가 존재하고 있는 상황으로 버퍼로의 동시접근을 막기 위해 Binary Semaphore로 lock / unlock 수행을 해줘야 한다. 즉, 버퍼에 생산자든 소비자든 동시에 하나만 접근해서 조작할 수 있다. 생산자/소비자의 자원 개수 ..

Why TCP? Q. 전송 계층에는 UDP, TCP 두개의 대표적인 프로토콜을 사용하는데 왜 나누고 어떤 경우에 TCP를 사용할까? A. UDP는 빠른 데이터 송/수신을 위해서, TCP는 Reliable한 통신을 하기 위해서 사용한다. Mechanism for Reliable Data Transfer Sequence Number 패킷의 순서를 정렬하기 위한 용도로 사용한다. 송신자에서 수신자로 흘러가는 패킷에 숫자를 매기는 용도이다. CheckSum 전송되는 패킷 데이터 bit의 오류를 검증하기 위해 사용한다. Error Detect 용도, FEC & CRC를 이용해서 에러를 찾고, 메꾸고, 유효성 검사를 한다. Acknowledgement 송신측에서 보낸 패킷을 수신측이 제대로 받은 경우 응답을 위해 ..
- Total
- Today
- Yesterday