re-hwi 2022. 1. 23. 18:19

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

 

오랜만에 드라이브도 갔다오고 피시방에서 게임도 했다. 그리고 코노에서 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) 상위 클래스 : 자동차, 하위 클래스 : 전기차

 

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

 

동적 바인딩

 

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

반응형