옵저버 패턴 (Observer Pattern) 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다. 옵저버 패턴을 구현하는 방법에는 여러가지가 있지만 대부분 상태를 저장하고있는 주제 인터페이스를 구현한 하나의 주제객체와 주제객체에 의존하고있는 옵저버 인터페이스를 구현한 여러개의 옵저버객체 가 있는 디자인을 바탕으로 한다. 데이터 전달방식은 2가지가 있다. 주제객체에서 옵저버로 데이터를 보내는 방식 (푸시 방식) 옵저버에서 주제객체의 데이터를 가져가는 방식 (풀 방식) 옵저버 패턴 클래스 다이어그램 디자인 원칙. 서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다. (..
PyQt5 기초 (Basics) 먼저 간단한 프로그램을 만들어 보겠습니다. 몇 줄의 코드를 따라 작성해보면서 GUI 프로그램의 여러가지 기초를 이해할 수 있습니다. 창 띄우기 위 그림과 같은 작은 창을 하나 띄워 보겠습니다. 창의 오른쪽 위 (Windows) 또는 왼쪽 위 (macOS)에 기본적으로 제공되는 버튼들로 창의 크기를 최대화, 최소화하거나 종료할 수 있습니다. 또한 마우스를 가지고 창을 이동하거나 창의 크기를 조절할 수 있습니다. 이러한 기능은 사실 많은 코드를 필요로 하지만 대부분의 어플리케이션에서 자주 사용되는 기능이기 때문에 이미 누군가가 코드로 만들어 놓았습니다. 예제 ## Ex 3-1. 창 띄우기. import sys from PyQt5.QtWidgets import QApplicat..
Managed code로 작성된 .NET 계열의 언어들이 OS에 맞게 실행됩니다. Common Language Runtime(CLR) : 공용 언어 런타임 일종의 가상머신입니다. Unmanaged code(C, C++ 등)들은 컴파일 시 해당 OS에 맞게 실행파일을 만들어 버립니다. 그러나 Managedcode들은 공용언어기반(CLI)로 작성되어 IL 계열의 공통중간언어(IL) 형태로 컴파일 되어 CLR에 의해 OS에 맞게 네이티브 코드(Native code)로 변환되어 프로그램이 실행됩니다. Managed code vs Native code Native code는 때로 Unmanaged code라고 불립니다. 그러니까 관리되는 코드와 관리되지 않는 코드라고 해야겠네요. 하지만 'Managed code는..
Goal JVM의 특징에 대해 이해할 수 있다. JVM의 구조에 대해 이해할 수 있다. JVM의 메모리 구조를 알 수 있다. Introduction JVM 은 Java Virtual Machine 으로 Java를 OS에 독립적으로 실행될 수 있게 하는 주체입니다. 이번 자료에서는 JVM의 특징과 구조에 대해서 파악할 것입니다. What is JVM JVM 의 특징 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환 스택 기반의 가상머신 메모리 관리와 GC를 수행 JVM 의 구성 Class Loader .java 파일은 컴파일 되어 .class 의 바이트 코드로 전환됩니다. 이러한 바이트 코드는 JVM의 Class Loader로 진입하게 됩니다. 그 후, 링크를 통해 배치하는 작업을 수행합니다. ..
스트래티지 패턴(Strategy Pattern) 알고리즘군을 정의하고 각각캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지패턴을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할수 있다. 오리 어플리케이션 게임을 운영하는 회사를 다니면서 오리게임을 만든다고 가정했을때. 표준적인 객체지향 기법을 사용하여 Duck 이라는 슈퍼클래스를 만든다음 그 클래스를 확장하여 다른 종류의 오리를 만든다. 추상클래스인 Duck 클래스를 ReadHeadDuck 클래스와 MallardDuck 클래스가 상속을 받아 추상메소드인 display()를 각각 구현한다. 문제의 시작1 원래는 그럴 계획이 없었는데.. 오리들이 물에 떠있는 기능 이외에 날아다녀야하는 요구사항이 생겼다. 간단하네.. ? 이제 모..
1. 애플리케이션에서 달라지는 부분을 찾아 내고, 달라지지 않는 부분으로부터 분리시킨다. 첫번째 원칙은 스트래티지 패턴에 해당하는 장에서 등장했다. 새로운 요구사항이 추가로 들어왔다. 혹은 기존 화면의 요구사항이 변경됬다. 이럴때 우리는 클래스의 메소드나 생성자를 고치고 추가하는 작업을 한다. 그 다음에 해당 클래스를 사용하는 모든 코드를 고친다. 생각만해도 끔찍하다. 나중을 위해... 코드에 바뀌는 부분이 있다면, 그 행동을 기존 코드에서 분리시켜야한다. * 바뀌는 부분을 따로 뽑아서 캡슐화한다. * 이를 지키면 나중에 바뀌지 않는 부분에 영향을 미치지 않을 채로 그 부분만 고치거나 확장할 수 있다. Ex) class A { public methodA() { 바뀌지 않는 부분 바뀌는부분 -> 이 부분을..
JAR, WAR, EAR 정의 ※ J2EE 애플리케이션에서 모듈은 기능에 따라 EAR, JAR 및 WAR로 패키지됩니다. JAR (Java Archive) 엔터프라이즈 Java Bean (클래스 파일) 및 EJB 배치 디스크립터를 포함하는 EJB 모듈은 .jar 확장을 갖는 JAR 파일로 압축됩니다. WAR (Web Application Archive) 서블릿 클래스 파일, JSP 파일, 지원 파일, GIF 및 HTML 파일을 포함하는 웹 모듈은 확장자가 .war (웹 아카이브) 인 JAR 파일로 패키지됩니다. EAR (Enterprise Archive) 위의 모든 파일 (.jar 및 .war)은 확장자가 .ear (enterprise archive) 인 JAR 파일로 패키지되어 Application S..
- Coupling의 정의 coupling이란 서로 상호작용하는 시스템들간의 의존성을 의미한다. 의존성은 실질적 의존성과 인위적 의존성으로 나뉠 수 있다. 실질적 의존성은 한 시스템이 소비하는 다른 시스템의 기능이나 서비스 집합을 의미한다 인위적 의존성은 한 시스템이 다른 시스템이 제공하는 기능이나 서비스를 소비하기 위해 필요한 여러 요소들의 집합을 의미한다. 전형적으로 인위적 의존성은 언어적인 의존성, 플랫폼 의존성, API 의존성등이 있다. 인위적 의존성은 언제나 존재하지만 그 비용은 충분히 감소될 수 있다. Loose Coupling은 이러한 인위적 의존성을 최소한으로 줄이는 구조를 의미한다. 긴밀한 결합(Tight Coupling) 강하게 결합된 객체(Tightly Coupled Object)는 ..
Goal Garbage Collection의 역할에 대해 설명할 수 있다. Garbage Collection의 메모리 해제 과정을 3단계로 설명할 수 있다. Generational Gabage Collection에 대해 설명할 수 있다. Generational Garbage Collection 과정에 대해 설명할 수 있다. Minor GC와 Major GC의 차이점에 대해 설명할 수 있다. Abstract C/C++ 프로그래밍을 할 때 메모리 누수(Memory Leak)를 막기 위해 객체를 생성한 후 사용자하지 않는 객체의 메모리를 프로그래머가 직접 해제 해주어야 했습니다. 하지만, JAVA에서는 JVM(Java Virtual Machine)이 구성된 JRE(Java Runtime Environment)..
Goal JAVA의 동작 원리에 대해 설명할 수 있다. JVM의 역할에 대해 설명할 수 있다. JIT 컴파일러에 대해 설명할 수 있다. Introduction 자바는 OS에 독립적인 특징을 가지고 있는데, 그것이 가능한 이유는 JVM(Java Vitual Machine) 상에서 실행되기 때문입니다. JVM에 대해 간략하게 설명하자면, 자바 소스코드 컴파일 후 생성된 파일이 해석(Interpret)과 Link없이 바로 JVM에 적재되고, OS로 부터 메모리를 할당받아 GC(Garbage Collection)를 통해 스스로 메모리 관리를 한다는 특징이 있습니다. 이제 본격적으로 JAVA의 동작원리에 대해 학습해보겠습니다. Process 우선 위의 그림을 토대로 간략하게 동작원리에 대해 짚고 넘어가보겠습니다...
- Total
- Today
- Yesterday