반응형

프로그래밍 기술 604

[소프트웨어 설계 패턴 C#] 13. 프락시 패턴 (Proxy Pattern) - 가상 프락시

13. 프락시 패턴(Proxy Pattern) - 가상 프락시 이번에는 프락시 패턴 중에서 가상 프락시에 대해 살펴보기로 합시다. 가상 프락시는 실제 개체의 특정 행위를 수행하는 비용이 클 경우 사용이 됩니다. 사용자가 가상 프락시 개체를 통해 비용이 많이 드는 작업을 요청을 했을 시에 가상 프락시 개체는 이 작업을 별도의 쓰레드에서 수행하게 명령만 내립니다. 이를 통해 사용자는 비용이 큰 작업을 수행 요청했을 시에 수행이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있게 됩니다. 2016/04/27 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 프락시 패턴(Proxy Pattern) 가상 프락시 - 개요, 시나리오 2016/04/27 - [프로그래밍 기술/Escort..

[소프트웨어 설계 패턴 C#] 12. 프락시 패턴(Proxy Pattern) - 원격지 프락시

12. 프락시 패턴(Proxy Pattern) - 원격지 프락시 프락시 패턴은 사용하는 개체를 통해 실제 개체를 제어하는 패턴입니다. 프락시 패턴은 사용하는 목적과 방법에 따라 원격지 프락시와 가상 프락시, 보호용 프락시, 스마트 참조자로 구분할 수 있습니다. 원격지 프락시는 사용할 실제 개체가 클라이언트와 다른 위치에 있을 때 원격지에 있는 개체처럼 사용할 수 있는 프락시를 말합니다. 가상 프락시는 사용할 실제 개체의 특정 행위가 많은 시간이 들 때 비 동기적으로 수행할 수 있게하여 사용자가 작업이 완료되는 것을 기다리지 않게 해 주는 프락시입니다. 보호용 프락시는 개체의 기능을 권한에 따라 사용하는 수준을 다르게 해 주는 프락시입니다. 스마트 참조자는 여러 곳에서 사용하는 개체가 있다면 실제 개체를 ..

[소프트웨어 설계 패턴 C#] 11. 플라이급 패턴(Flyweight Pattern)

11. 플라이급 패턴(Flyweight Pattern) 프로그램에서 개체가 많아지면 메모리가 많이 차지하게 됩니다. 이럴 때 메모리 효율을 높일 필요성이 있다면 무엇을 해야 할까요? 플라이급 패턴은 이러한 문제를 해결하기 위한 하나의 방법입니다. 플라이급 패턴은 개체의 멤버 필드 중에 각 개체가 반드시 갖고 있어야 할 멤버와 여러 개체가 공유해서 사용할 수 있는 멤버로 분리하는 작업에서부터 출발합니다. 공유해서 사용할 수 있는 멤버가 가질 수 있는 상태의 종류가 개체의 수보다 상대적으로 적다면 플라이급 패턴을 사용하여 메모리 효율을 높일 수 있습니다. 플라이급 패턴에서는 공유해서 사용할 수 있는 상태들을 공유 풀에 형성합니다. 그리고 각 개체는 특정 상태를 참조합니다. 만약, 개체의 수가 상태의 수보다 ..

[안드로이드] 36. Java 개체의 생과 사

개체의 생과 사 C언어나 C++언어에서는 동적으로 메모리를 할당하면 힙에 할당하고 개발자 코드에 의해 해제해야 합니다. 이에 반해 Java 언어에서는 개발자 코드에 의해 개체를 생성하지만 개발자 코드에 의해 개체를 소멸하지 않습니다. 이와 같이 개체의 생성은 개발자 코드에 의해 결정하고 소멸하는 코드를 작성하지 않는 이유는 Java 가상 머신의 관리화 힙(Managed Heap)에 개체를 할당하여 관리하기 때문입니다. Java에서 개체를 생성하면 관리화 힙(Managed Heap)에 할당합니다. 관리화 힙은 Java가상 머신에서 개체를 참조하는 변수의 개수를 카운팅하여 관리합니다. 그리고 가상 머신의 쓰레기 수집기(Gabage Collector)에 의해 관리화 힙의 개체를 참조하는 변수의 카운터가 0이 ..

[안드로이드] 35. Java 중복 정의(Overloading)

중복 정의(Overloading) Java 언어에서는 클래스의 멤버 메서드의 입력 매개 변수 리스트가 충분히 다르면 같은 이름으로 여러 개의 멤버 메서드를 정의할 수 있습니다. 이러한 특징을 메서드 중복 정의(Overloading)이라고 부릅니다. 예를 들어 원을 클래스로 정의합시다. 원 개체를 생성할 때는 반지름을 입력 인자로 생성하게 하고 면적을 구하는 메서드를 제공합시다. 만약 입력 인자를 전달하지 않으면 원의 넓이를 구하고 입력 인자로 각 정보를 전달하면 호의 면적을 구합니다. 이 때 입력 인자를 전달하지 않고 원의 넓이를 구하는 메서드와 각 정보를 전달하여 호의 면적을 구하는 메서드의 이름을 같은 이름으로 정의할 수 있습니다. public double calculateArea(){ return ..

[안드로이드] 34. Java 접근 지정자

접근 지정자 앞에서 OOP에서는 캡슐화 과정에서 멤버의 가시성을 정의하여 접근 수준을 지정할 수 있다고 하였습니다. Java 언어에서는 public, protected, private 키워드를 이용하여 접근 지정할 수 있는데 이와 같은 접근 지정을 왜 해야 하는지 알아봅시다. 멤버의 가시성을 public으로 지정하면 모든 곳에서 접근이 가능합니다. 따라서 형식 개체를 사용하는 곳에서 접근해야 하는 멤버에는 가시성을 public으로 지정합니다. 멤버의 가시성을 protected로 지정하면 클래스 자신의 내부와 파생 클래스에서는 접근할 수 있지만 그 외의 클래스에서는 접근할 수 없습니다. 이에 관한 문법은 상속을 다루면서 소개하기로 할게요. private으로 가시성을 지정하면 클래스 자신 내부에서만 접근할 ..

[안드로이드] 33. Java 클래스 정의하기

클래스 정의하기 Java 언어에서 클래스를 정의할 때 캡슐화 대상은 멤버 필드와 멤버 메서드입니다. 멤버 필드는 개체의 상태를 나타내는 필드로 데이터로 생각할 수 있습니다. 멤버 메서드는 개체의 상태를 제어하는 기능입니다. 그리고 클래스의 멤버에는 접근 지정을 통해 클래스 내부에서만 접근할 수 있는지, 클래스 내부와 파생 클래스에서 접근할 수 있는지, 다른 클래스에서도 접근할 수 있는지를 결정할 수 있습니다. 이를 통해 개체의 정보를 은닉하여 신뢰성을 높일 수 있습니다. 클래스는 클래스 이름과 멤버 필드와 멤버 메서드로 구성합니다. OOP 프로그램을 설계할 때 클래스는 세 개의 칸으로 구분하는 사각형으로 표시하는데 맨 위칸에는 클래스 이름을 표시하고 두 번째 칸에는 멤버 필드, 세 번째 칸에는 멤버 메서..

[안드로이드] 32. Java OOP 개요

OOP 개요 프로그래밍 언어의 종류는 셀 수 없을 정도로 많습니다. 초기의 코볼이나 파스칼, 포트란등의 언어는 기능 중심으로 프로그램을 구성하기 쉬운 구조적 프로그래밍 언어입니다. 그런데 프로그래밍 역사가 발전하면서 사람이 살고 있는 세상과 비슷한 구조로 표현할 수 있는 OOP[1]에 관한 연구를 진행하였습니다. 그리고 Java 언어와 C# 언어 등은 OOP 언어입니다. OOP 언어는 사용자 정의 형식을 만들 때 데이터와 기능을 하나로 캡슐화합니다. 이전 구조적 프로그래밍 언어에서는 사용자 정의 형식에는 데이터만 정의하고 기능은 별도로 정의해야 했습니다. 하지만 OOP 언어에서는 데이터와 기능을 하나로 캡슐화할 수 있습니다. [그림]구조적 프로그래밍 언어 VS OOP 언어 일반적으로 OOP 언어에서 사용..

[안드로이드] 31. Java continue 문

continue 문 continue 문은 반복문 내에 수행할 반복 구문 중에 특정 위치에서 뒤의 구문을 수행하지않고 바로 반복의 후처리 구문 및 조건식으로 분기할 때 사용합니다. 예를 들어 1에서 100사이의 정수 중에 2의 배수나 3의 배수를 제외한 나머지 정수의 합계를 구한다고 가정합시다. 이를 위해서는 루프 카운터 변수 i를 1에서 100까지 1씩 증가하는 반복문에서 i가 2의 배수이거나 3의 배수이면 다음으로 넘어가고 그렇지 않을 때만 sum에 i를 더하면 될 것입니다. 이 때 i가 2의 배수이거나 3의 배수일 때 continue문을 사용하여 문제를 해결할 수 있습니다. private static void exContinue() { int sum = 0; for(int i = 0; i

[안드로이드] 30. Java break 레이블문

break 레이블문 프로그래밍하다 보면 반복문 내부에 반복문을 사용해야 할 때가 있습니다. 만약 내부 반복문에서 break문을 사용하면 내부 반복문만 탈출합니다. 그런데 외부 반복문에 레이블을 지정하고 내부 반복문에서 break 레이블문을 사용하면 외부 반복문을 탈출할 수 있습니다. 먼저 Java 언어에서는 코드 상에 레이블 이름을 지정하고 콜론(:)을 표시하면 레이블을 설정하는 것입니다. 레이블 명: 그리고 break 레이블문은 break 뒤에 레이블 이름을 표시하는 것입니다. break 레이블 명; 예를 들어 구구단의 합을 계산하다 처음으로 1000을 넘는 위치가 어디인지 확인하는 로직을 구현해 봅시다. 이를 위해서는 단을 진행하기 위한 반복문이 외부에 있고 내부에 다시 단*1에서 단*9까지 진행하며..

반응형