어제 쉬고 왔더니 확실히 공부가 잘되는것 같다.
오랜만에 드라이브도 갔다오고 피시방에서 게임도 했다. 그리고 코노에서 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) 상위 클래스 : 자동차, 하위 클래스 : 전기차
상위 클래스인 자동차의 특징은 기름을 사용한다는 것이다. 하지만 하위클래스인 전기차는 자동차의 기능을 수행하면서 자동차의 특징중 하나인 기름을 사용한다는 것 대신 전기를 사용한다는 것이다.
동적 바인딩
: 실행시간에 하위클래스의 객체를 통해 동작이 결정되는 것
'개발 > 소프트웨어 공학' 카테고리의 다른 글
프로그래밍과 코드 검사 (1) | 2022.01.24 |
---|---|
사용자 인터페이스 설계와 상세 설계 (0) | 2022.01.24 |
자료 흐름 중심 설계와 데이터베이스 설계 (0) | 2022.01.21 |
소프트웨어 설계 기법 (0) | 2022.01.20 |
유스케이스와 UML (0) | 2022.01.19 |
댓글