• 독서
[클린소프트웨어#2] 익스트림프로그래밍(XP)에 대해서
# 시작하며 앞선 게시글에서 애자일이 무엇인지에 대해서 정리했었다. 애자일은 방법론 중 하나이다. 애자일을 적용한 방법 중 익스트림프로그래밍(XP)라 불리우는 방법이 있다. 이를 통해서 애자일의 가치와 원칙들이 어떻게 적용되는지 구체적인 사례를 통해서 살펴보도록 하자. # 고객은 누구인가? 애자일방법론에 대해서 배우며 고객이라는 단어가 많이 등장했다. 고객에 요구사항에 맞게.. 고객의 변경되는 요구사항... 등등 고객은 우리를 힘들게 했다. 고객은 우리에게 소프트웨어 프로젝트를 맡긴 의뢰인인 것일까? 정답은 맞긴 맞는데 그뿐만은 아니다라는 것이다. XP팀에서 고객은 기능요소를 정의하고 우선순위를 매기는 개인또는 그룹이다. 즉, 사내에서 같이 일하는 업무 분석가나 마케팅 전무가 그룹이 될 수 도있고, 사용..
[클린소프트웨어#1] 애자일(Agile) 방법론과 4가지 가치와 12개의 원칙
# 시작하기 전 근래 디자인패턴이라는 것에 관심이 많았고, 학부에서 소프트웨어 디자인패턴이라는 수업을 수강중에 있다. 해당 수업에서는 "클린 소프트웨어"라는 책과 "GOF 디자인패턴" 이라는 책을 교과서로하여 수업을 진행 중이다. 클린 소프트웨어에서는 중간절까지 배우며 애자일과 SOLID원칙에 대해서 공부하고, GoF에서는 실제 디자인 패턴들에 대해서 공부한다. 시험기간이 다가 오고, 시험 문제가 다 서술형이라는 것을 감안했을 때 책을 요약해보고 정리하는 시간이 시험공부에 대해서도 꽤 도움이 될 것이라 생각함과 동시에 아카이브화 하여 나중에 필요하면 다시금 돌아 볼 수 있도록 해당 블로그에 정리해보려고 한다. 이게 수업하면서 1회독했을때와 지금 다시 읽으니까 한층 이해가 쉽고 안보이던게 보여서 좋다. #..
[디자인패턴] 중재자 패턴(Mediator Pattern)
# 설명 중재자 패턴(Mediator Pattern)은 N:M의 관계로 객체들의 소통이 이루어 지고 있는 복잡한 관계를 해결할 수 있다. N:M의 관계를 1:N의 관계로 바꾸어 준다. 만일 위 그림에서 관제탑이 없다면 각 비행기들은 서로 소통을 해야하지만, 관제탑(중재자)가 이러한 소통의 창구 역할을 해준다. 파사드 패턴, 옵저버 패턴과 유사함을 느낄 수 있다. 옵저버 패턴은 1:N의 관계였다. 즉, 신문사에서 새로운 기사가 나온다면 구독한 고객들에게 알림을 보내줬다. 그러나 구독자들은 신문사에게 알림을 보내지 않았다. 중재자 패턴은 각자가 알림을 보내기도 하고 받기도 한다고 생각하면 된다. UI프로그래밍에서 많이 쓰인다. 각 Widget간의 연관관계가 많다. 예를들어 아이디를 입력하지 않았다면 로그인 ..
[디자인패턴] 퍼사드 패턴(Facade Pattern)
# 설명 Facade의 뜻은 건물의 정면이라는 뜻이다. 왜 퍼사드 패턴은 퍼사드라는 이유를 붙였을까? 클라이언트가 어떠한 System을 이용하기 위해서는 여러 SubSystem이 유기적으로 연결된 내부를 알아야한다고 생각해보자. 자동차 시동을 걸기 위해서 자동차의 엔진의 작동방식, 미션의 작동방식 등등을 알아야한다면 자동차를 탈 수 있는 사람은 누가 있을까? 우리는 단순하게 버튼을 눌러 시동을 걸기만 하면 된다. Facade패턴은 이런 키와 같은 역할을 하게 해준다. 서브시스템을 합성하여 사용하는 다수 객체 집합에 대해서 Facade에서 구현하고 Client는 인터페이스를 제공받아 사용하기만 하면 되는 것이다. 즉, Facade의 어원을 다시 생각해보면 우리는 건물의 정면만을 보는 것이다. 건물안은 뭐가..
[디자인 패턴] 메멘토 패턴(Memento Pattern)
# 설명 메멘토(Memento)는 기억의 증표라는 뜻을가지고 있다. 즉 메멘토 패턴을 이용해서 한순간의 기억을 저장(snapshot)했다가 복구(restore)할 수 있다. 복사한 인스턴스를 바꿔주는 것이 아닌, 인스턴스의 상태를 메멘토(Memento)로써 기억하게 한다. 인스턴스를 복원하려면 내부 정보에 자유롭게 접근해야하지만, 그렇게 되면 캡슐화의 원칙이 깨질 위험이 있다. 오직 메멘토로 하여금 이러한 복원작업을 할 수 있게 보증해야한다. Originator : 우리가 사용하고 있는 현재 상태의 객체이다. save와 restore와 같은 기능을 Memento를 통해서 수행하며 state의 상태가 이에 따라서 바뀐다. Originator의 state의 은닉을 유지하고, 상태를 저장 복구 할 수 있다. ..
[디자인 패턴] 옵저버 패턴(Observer Pattern)
# 설명 객체 사이에 일대다의 의존관계가 존재하고, 어떤 객체의 상태가 변하면 그 객체에 의존성을 가진 다른 객체들은 변화됨을 받고 갱신 할 수 있도록 함 하나의 객체에 연동되는 여러 객체 집합이 있을때 변화에 대한 일관성은 유지하고, 객체간의 결합도는 낮게하기 위한 패턴 data view관계에서 많이 사용됨 ## 안드로이드에서 사용된 옵저버 패턴 안드로이드를 개발하다보면, 여러 View들이 한 DATA를 바라보고 있는 경우가 있다. DATA가 바뀌는 경우는 여러가지가 존재한다고 가정해보자. 그렇다면 DATA를 바꿔주는 여러가지의 방법(함수)마다 View들을 update시키는 코드를 작성한다고 생각해보자. 10개의 View가 존재하고 10개의 데이터를 변경시키는 코드가 있다면 DATA가 변경되는 시점마다..