본 강좌에서는 클로저에 대해 알아보도록 하겠습니다. 클로저란 내부 함수와 내부 함수에 영향을 미치는 주변환경을 모두 포함한 객체로정의할 수 있습니다. 또한 클로저는 func와 함수이름이 생략된 경량의 함수객체로 클로저 표현을 통해 문장릉 짧고 간단하게 만들 수 있습니다.
Youtube
- https://youtu.be/0bIRlDCH8kU
본 강좌에서는 클로저에 대해 알아보도록 하겠습니다. 클로저란 내부 함수와 내부 함수에 영향을 미치는 주변환경을 모두 포함한 객체로정의할 수 있습니다. 또한 클로저는 func와 함수이름이 생략된 경량의 함수객체로 클로저 표현을 통해 문장릉 짧고 간단하게 만들 수 있습니다.
Youtube
- https://youtu.be/0bIRlDCH8kU
핵심 프로세스(Key Process) 모델링은 Business Model Game에서 다루는 component 중 하나로, 사업모델에 참여하는 이해관계자를 규정하고, 그들 간에 발생하는 정보의 흐름및 구조 등을 규정하는 도식화된 프로세스 구조도입니다. 제시되는 가이드라인에 따라 여러분의 사업모델의 흐름도를 만들어 보세요. outside pitch와 사업계획서 작성시 많은 도움이 될 겁니다.
객체지향에 관련해서, 가볍게 내용을 정리하였습니다.
참고서적 : 스프링 입문을 위한, 자바 객체 지향의 원리와 이해 김종민 지음
객체지향.
말은 참 어려운데. 프로그래밍 하면서 사람이 인식하는 사물 또는 실체를 하나하나 조합해서 프로그래밍 하자는 패러다임입니다.
쉽게, 객체를 가지고 놀자 이겁니다.
객체지향언어에서는
클래스(Class) 객체(Object)가 존재합니다.
클래스는 추상화 및 분류
객체는 실제를 의미합니다.
예) 사람클래스 -> 원빈 객체 / 동물 클래스 -> 고양이 객체
4대 특징
- 캡슐화
- 상속
- 추상화
- 다형성
객체지향 개념을 완벽히 이해하려면. 많이 공부해야 할거같습니다..ㅠㅠ
3. 옵저버 패턴(Observer Pattern)이란?
한 객체(Subject)의 상태가 바뀌면 그 객체에 의존하는 다른 객체들(Observers)
에게 연락이 가고 자동으로 내용이 갱신되는 일대다(one-to-many)방식의 패턴
4. 그림과 같이 어떤 정보가 갱신 되었을 때 Subject에 해당되는 객체가 Observer
들에게 정보를 전달해주고 있다.
그리고 데이터의 주체는 Subject임을 통해서 여러 객체의 데이터에 각각 접근할
때보다 더 깔끔한 객체 프로그래밍을 할 수 있다.
이러한 디자인 패턴을 통해 두 객체 사이에서의 관계를 느슨하게 만들 수 있다.
여기서 느슨함이란 객체간의 상호작용은 이루어지지만 서로에 대해 잘 몰라도
된다는 것을 의미한다. 예를 들어 Subject를 변경해도 Observer엔 영향을 끼치
지 않을 것이고 그 반대의 경우도 동일하다.
5. 예제를 봅시다
옵저버 패턴을 구현하기 위해
Observer에는 여러 가지가 들어갈 수
있는 것을 생각하여 미리 Observer라는
인터페이스를 생성하여 이것을
상속받도록 하였다.
6. Subject는 제 각각의 Observer의
정보를 알 필요가 없다. 그렇기 때문에
Subject는 공통으로 사용 될
인터페이스와 Observer등록,해제
함수만을 가지고 있으면 된다.
8. 옵저버 패턴의 핵심
느슨함
앞에서도 한번 언급했듯이 옵저버 패턴의 특징 중 하나는 ‘느슨함’ 이라는 것이
다. 이를 통해서 얻을 수 있는 장점이 여러 가지가 있다.
1. Observer를 언제든지 새로 추가할 수 있다.
2. 새로운 형식의 Observer가 와도 Subject는 바꾸지 않아도 된다.
3. Subject와 Observer는 각각 독립적으로 재사용이 가능하다.
4. 도중에 Subject나 Observer의 특징이 바뀌더라도 서로에게 영향을 끼치지 않
는 것이다.
10. 비지터 패턴(Visiter Pattern)이란?
기존의 OOP(객체 지향 프로그래밍)에서는 객체가 자신의 오퍼레이션을 가지고
있던 반면에 ‘비지터 패턴’ 에서는 객체의 구조와 기능을 분리 시키는 패턴이다.
객체의 구조는 변하지 않으나 기능만을 따로 추가하거나 확장시켜야 할 때 주로
사용되는 패턴이다.
이러한 특징으로 인해 다소 NON-OOP적인 특성을 가진다. 하지만 이 패턴을 통
해 OOP는 오히려 더 유연해진다.
11. 도대체 이걸 언제 사용한다는 건가?
객체의 구조는 이미 다 짜여져 있는데 그 객체에 들어있는 오퍼레이션에 대해 정
확하겐 알고 있지 않기 때문에, 적용되어야 하는 오퍼레이션이 정해져 있지 않
으므로 그 객체에 오퍼레이션을 둘 수 없다는 것이다.
바로 이러한 상황에서 적용시켜야 할 오퍼레이션을 가지고 있는 것이 Visitor 그
리고 기존의 선언되어있던 객체를 Element라고 한다.
Element에 적용되어야 할 메소드가 Visitor에게 정의되어 있을 것이니 Element
가 Visitor에 정의되어있는 메소드를 사용할 때 Element에게 Visitor를 넘겨주면
되는 것이다. 비지터 패턴
12. 예제를 봅시다
기존의 객체로 Element에 해당되는 Color
추상 클래스를 선언한다.
Element에 해당되는 부분으로 Visitor메소
드를 호출 할 때 Visitor를 받기 위한 함수로
accep함수를 만들었다.
13. CountVisitor 클래스를
통해 Element가 accep
했을 때 각 visit함수가
몇 번 호출되었는지를
센다.
CallVisitor클래스를 통
해 기존의 Element내부
에 있는 다른 객체에서
Visitor를 accept 했을
때 해당 visit을 호출하
여 메소드를 호출하는
구성이다.
15. 비지터 패턴의 핵심
비-객체지향에서 오는 유연함
기존의 객체가 가지고 있어야 할 오퍼레이션을 다른 객체에서 호출한다는 것은
흔히 c++이나 java에서 OOP(객체 지향 프로그래밍)를 경험한 사람들에게는 좀
낯선 유형일 것이다.
비지터 패턴을 통해 기존의 객체에서 추가하고픈 혹은 자주 변경 될듯한 메소드
가 존재할 때 해당 Visitor가 함수를 호출하는 패턴을 사용한다면 Visitor를 변경
해 주는 것으로도 메소드를 확장 혹은 추가하는 것이 가능해진다.