본문 바로가기
개발/소프트웨어 공학

디자인 패턴

by re-hwi 2022. 1. 23.

어제 쉬고 왔더니 확실히 공부가 잘되는것 같다.

 

오랜만에 드라이브도 갔다오고 피시방에서 게임도 했다. 그리고 코노에서 1시간 있었더니 목이 나갔었다. 크크

 

앞으로도 일주일에 한번정도는 쉬면서 분위기도 바꿔보고 여러가지 취미생활도 할 예정이다.

 

오늘 배운건 디자인 패턴이다. 패턴이란 일정하게 반복되는 모양? 이다. 그냥 평소에 알고 있는 그 패턴이 맞으니 따로 구체적인 설명은 하지 않겠다.


무아레 패턴

 

가끔씩 모니터나 버스 시간표를 카메라로 찍으면 이상한 물결무늬가 나와 원하는 화면을 찍지 못할 때가 있다. 그 때 나오는 물결무늬를 무아레 패턴 이라고 한다. 

 

무아레패턴으로 인해 화질이 떨어지거나 원하는 것을 못 찍을 때도 있지만, 아래 그림처럼 그것을 이용하기도 한다. 

무아레패턴을 이용하는 예시

소프트웨어에서의 디자인 패턴

 

특징

① 많은 경험을 통하여 얻을 수 있다.

② 특정한 형식을 갖고 페계적으로 작성되는것이 일반적이다.

③ 각기 다른 추상화 수준이 존재하며 계속적으로 진화한다.

 

장점

① 의사소통에 도움을 준다.

② 개발 비용을 줄일 수 있어서 경제적이다.

③ 높은 완성도의 디자인을 빠른 시간에 만들어 낼 수 있다.

④ 소프트웨어의 재사용을 용이하게 한다.

 

《디자인 패턴》(GoF,1996) 에서 나온 패턴의 기술형식 (p. 367)

 

 

Gof의 디자인 패턴 분류 

- 목적과 범위로 분류

 

디자인 패턴 활용

 

- 앞서 말했듯 패턴은 초보 개발자도 경험 많은 개발자의 경험을 빌려 사용할 수 있는 효율적인 프로그램 공부라 할 수 있다.

 

디자인 패턴중 하나인 Singleton 패턴

- 코드내 어디서든 하나의 인스턴스를 사용할 수 있도록 객체를 생성하는 방법

- 최초 하나의 인스턴트만 생성하고 이후에는 이 인스턴스를 참조

 

Singleton 패턴의 예시

 

다음은 인쇄 관리 프로그램의 개발 요구사항이다.

 

목표 : 인쇄 관리 프로그램 개발 

 

요구사항 : 문서 프로그램이나 이미지 관리 프로그램에서 인쇄를 요청하면 지정된 프린터기로 인쇄 페이지를 전달.

이때 프린터기는 프로그램으로부터 한번에 한 페이지씩 받아 인쇄를 수행

public class PrinterManager {  					// 싱글톤 패턴으로 만들 클래스의 이름 지정 ex)프린터
	
    private static PrinterManager instance;		// private 접근 제한자를 갖는 자기 자신의 타입 static 멤버 변수 선언
    
    private PrinterManager () {					// private 접근제한자를 갖는 기본 생성자를 만들어 외부에서 인스턴트 생성차단
    
    }
    											// 프린터 객체를 반환하는 static getInstatnce()메소드 생성
    public static PrinterManager getInstatnce() {
    	if(instance==null) {					// 프린터 인스턴트가 생성되어 있지 않으면 생성한다
        	instance = new PrinteManager ();	// 프린터 인스턴트 생성
        }
        
        return instance;
    }
}

싱글톤 패턴을 사용하는 이유

- "프린터기는 프로그램으로부터 한번에 한 페이지씩 받아 인쇄를 수행" 이라는 요구를 충족하려면 하나의 인쇄 관리자가 필요하다.


다형성과 동적 바인딩

 

다형성을 이해하기 위해선 객체지향의 특징중 하나인 상속성에 대해 잘 이해하고 있어야한다.

 

상속성 

: 하위 클래스가 상위 클래스의 특징을 물려받는것

ex) 상위클래스 : 자동차, 하위 클래스 : 스포츠카

 

스포츠카는 자동차의 기능을 모두 수행하며 추가로 지붕도 열 수 있다. 이는 하위 클래스인 스포츠카가 상위클래스인 자동차의 특징을 물려받으면서 자신의 특징인 지붕을 여는 기능을 추가한 것이다.

 

다형성 

: 상위 클래스의 오퍼레이션을 하위 클래스에서 다시 정의함

 

- 하나의 이름을 가진 함수가 여러 목적으로 사용될 수 있음

- 상위 클래스를 통해 하위 클래스를 호출 할 수 있음

- 같은 오퍼레이션이 다른 클래스에서 다르게 동작 

 

ex) 상위 클래스 : 자동차, 하위 클래스 : 전기차

 

상위 클래스인 자동차의 특징은 기름을 사용한다는 것이다. 하지만 하위클래스인 전기차는 자동차의 기능을 수행하면서 자동차의 특징중 하나인 기름을 사용한다는 것 대신 전기를 사용한다는 것이다.

 

동적 바인딩

 

: 실행시간에 하위클래스의 객체를 통해 동작이 결정되는 것

반응형

댓글