방법론(methodology)

방법론로그/OOAD 2011. 4. 12. 15:17



소프트웨어 방법론의 개발 프로세스이자 일반적인 문제 해결 과정을 알아보자.

아래 내용은 박병준 선생님의 가르침을 바탕으로 정리한 내용들이다!! 감솨합니다 샘!!
이것을 이해하고 자기의 것으로 어떻게 만드느냐는 개인의 몫!

아래 그림은 일반적인 개발 프로세스들과 그 프로세스를 지원하기 위해  작성하는 문서들이다. 
물론 이런 문서들이 항상 고정되어 있는 것은 아니다. 개발하고자는 업무영역에 따라 도움이 된다면 더 많은 문서들을
작성할 수도 있고, 간소화 할수도 있다. 중요한 것은 대상을 얼마나 "다각도에서 이해하는냐" 이지 "무엇을 작성하느냐" 가
아니다.   
프로그램이란 해야할 일을 다른 사람에게 대신하게 하는 것이라는 느낌으로 , 단계별로  "주인과 종"을 예로 들어 설명했다.








1. 문제인식(Problem Recognition)
개발 프로세스의 가장 첫번째 과정이다.  "누가, 무엇을 원하는가" 를 정의하는 단계이다. 
"누구" 는 반드시 한 사람이라고 할 수 없다. 문제에 연관되어 있는 다양한 사람들을 도출하는 하는 것이 첫번째 단계이고, 
이들이 각각 무엇을 원하는지 도출하는 것이 두 번째 단계이다. 






누구를 만족시킬 것인가? 그 누구가들이 바라는 것들은 무엇인가? 를 도출하는 과정 

그렇다면 문제는 어떻게 인식하는가? 앞서 문제는 왜 생기는가? 그것은 사람이기 때문이다. 
사람이기 때문에 필연적으로 문제는 생기기 마련이다. 즉 사람이 모든 문제의 시작점이 되야 한다. 
하지만 누군가는 모든 사람들을 의미하는 것은 아니다. 수많은 사람들의 범주 가운데서, 좁혀지고 좁혀져
특정 집합에 속하는 사람들만이 우리가 만족시켜야 하는 사람군에 속한다. 이 집한군은 여러 군이 존재할 수 있으며
이렇게 이익과 해를 보는 사람들을 Stakeholder (이해당사자)라고 한다. 

ex) twitter를 예로 들어보자. 
사람들은 커뮤니케이션을 할 수 있는 수단을 필요로 했다. 가장먼저 대화를 하기 시작했으며, 공간의 제약을 극복하기위해
편지라는 것이 등장했다. 하지만 더빠른 전달을 위해 전보가 등장했다. 송수신을 더 잘하기 위해 전화가 등장했다.  나아가 
언제 어디서든 가능하게 하기 위해 핸드폰 또는  SMS가 등장하고 결국 twitter 에 이르게 된것이다. 

요약하면 Stakeholder를 도출하고,  그들이 원하는 기능을 도출하는 과정이 문제인식이라 정의할 수 있다.  







2. 정보수집(Requirement Gathering)
기존에 (오프라인에서) 업무가 어떤 절차에 의해 진행되어 왔는지를 파악하는 단계이다.  문제인식에서 도출한 기능별로
실제업무가 어떤 절차로 진행되는지를 시나리오 방식으로 기술하되 잠재적으로 데이터가 될수 있는 항목들을 명시한다. 
절차와 데이터를 함께 고려하면 혼선을 가져올 수 있기 때문에, 절차를 기준으로 먼저 기술하고 난후 데이터를 도출하는 것이
도움이 된다.




 
기존에 행해져 왔던 일의 전체과정을 보는 단계이다.  
즉 절차에 집중하는 단계이며, 데이터 또한 그 절차안에서만 의미를 갖는다. 
(Stakeholder 가 기존에 해당 목적을 달성해왔던 과정을 훑어 보는 과정)

ex) 인사관리시스템을 만들기 위해서는 인사관리 업무가 무엇인자 알아야 하지 않겠는가?





3. 분석(Analysis)
오프라인 업무에 시스템이 적용되기 위한 접합점이다.  정보수집 단계에서 작성한 시나리오를 바탕으로  사용자가
수행할 업무와 시스템이 수행할 업무를 분리하여 기술한다.  사용자의 절차, 시스템의 절차가 분리되어 기술하는 것이
좋으며 그 절차와 더불어 데이터 항목들을 도출해야 한다.  정보수집 단계에서는 없었던 데이터들이 시스템이 적용되면서
추가되거나,  데이터들에 대한  조건(유효성 검사)들이 추가된다. 




 
절차에서 어떤부분을 대신 시스템화 할 수 있는지 고민하는 과정이다. 
어디서부터 어디까지 대신 시킬 것인지에 따라 결과가 달라진다. 
종과의 약속 => 인터페이스
종에게 물어본후 답에 따라 그 일을 다르게 행하게 할 수 있다. => 입력
(Stackholder 에 따라 물어보는 부분이 달라 질 수 있다. )

종에게 대신 시킬 과정을 찾는 단계이며, 전체 절차는 변하지 않는다것에 주의한다. 





4. 아키텍처(Architecture)
종에게 대신 시키기 위해서 주인이 준비물을 지정하는 단계이다. 준비물에 무엇이냐에 따라서  종이 받아들이는 것과 
대신 수행한 일의 결과가 달라질 것이다. 

아키텍처는 Infra 와 Technology로 구성된다. 인프라는  하드웨어적인 준비물을 의미한다.
ex) 대리운전을 호출했다면, 차와 키, 톨비가 인프라

인프라가 있더라도 이를 사용할 수 있는 기술이 있어야 한다.
ex) 대리 운전기사가 차를 운적할 수 있어야 함


 





5. 설계(Design)
종에게 준비물을 사용하게 했을 때의 절차이다. 
전체 절차는 동일하지만, 준비물이 바뀜에 따라 절차가 조금씩 바뀌게 된다. 
=> 모든 생각이 끝나야 하는 단계. 생각을 안해도 되게끔 설계 단계까지 모든 것이 이루어져야 한다. 



 



6. 구현(Implementation)


7. 테스트(Test)
미리 예측한 결과를 확인하는 단계이다.  그렇다면 어느단계에서 예측하는가? => 바로 분석단계!
작은 단위로 하나하나 테스트 하는 것을 단위 테스트(Unit test) 라고 한다. 
전체시스템을 놓고 테스트 하는 것을 통합 (Integretaion test) 라고 한다. 
Close test는 개발사 자체조직 내에서의 테스트 
Open test는 서비스 이전에 일정한 사용자에 의한 테스트 


8. 배포(Deployment)
유기적인 장소에 하드웨어/소프트웨어들을 설치하는 단계


9. 서비스(Service)


10. 유지보수(Maintenance)

 

영어를 빨리 배우는 방법

학습로그/영어 2011. 4. 12. 01:15



관심있게 보고 있는 Effortless English 사이트에 "영어를 빨리 배우는 방법"에 기사글이 올라와 있어 번역해보았다. 
일부 중복된 내용은 번역하지 않았다. 원문은 다음 사이트를 참고하자.   Effortless English


영어를 빨리 배우는 방법은 무엇일까? 2~3달 안에 영어를 아주 빨리 배우는게 가능할까?

그렇다. 하지만 그에 상응하는 강한 시간투자와 노력이 필요하다.

다음과 같은 사항들이 필요하다.


 


1. 몰입 (Obsession)

목적을 달성하기 위해 가장 필요한 것은 강한 열정이다. 하루에 8~14시간동안 영어를

공부하기 위해서는 매시간 마다 스스로 자각해야하며,  흥분되고, 열정적인 상태를 유지해야한다.

빨리 성장하기 위한 열쇠는 감정이다. 영어에 몰입해야하고, 믿을 수 없을 정도로 열정적이어야 한다. 


열정을 만들기 위해서는 영어를 공부해야하는 흥미를 유발하는 이유가 필요하다.

단지 시험을 잘 보기위한 것 또는 단지 새로운 직업을 얻기 위한 것으로는 부족하다.

그렇게 해야하는 확고한 이유가 필요하다. 


유창한 영어 스피커로서 얻게될 믿을 수 없을 만큼의 많은 혜택을 상상해보자. 

지금부터 변화될 5년, 10년, 그리고 20년 후를 상상해보자.

돈이 동기가 된다면, 영어가 얼마나 나를 부유하게 해줄지 상상해보자. 꿈의 집, 꿈의 차, 꿈 같은 삶을 상상해보자.  

반대로 영어를 유창하게 못했을 경우에 발생할 끔찍한 일들을 과장해서 상상해보자. 

잃게 되는 모든 직업들, 결코 만날 수 없게 되버린 사람들, 영어를 못해서 얼마나  많은 기회를 잃게 되는지를 상상해보자. 


더 큰 이유를 만들자. 큰 이유일 수록 더 큰 열정을 가져온다. 그리고 더 큰 성공을 가져온다.

감정이 열쇠이다. 감정을 더 강하게 하자. 영어에 몰입하자. 




2. 대량입력 (Massive Input)

영어를 빨리 공부하기 위한 두번째 열쇠는 영어 "입력"에 집중하는 것이다. 문법과 단어를

공부하기 위해 많은 시간을 낭비하자 마라. 말하기 위해 시간을 낭비하지 마라.

많은 시간을 리스닝과 리딩을 위해 투자해라. 이것이 영어를 유창하게 하기 위한 

가장 빠르고 가장 효율적이 방법이다.  iPod 또는 영어 책을 항상 가지고 다녀라. 

특히,  Mini-Story 레슨과 Point of View 레슨, Main Audio 아티클을 많이 들어라. 

이것들은 가장 강력한 교육자료이고, 영어를 빨리 늘도록 도울 것이다. 

어린이들을 위한 영어 소설부터 시작하자.  결코 교과서를 읽기 위해 시간을 낭비하자 마라.




3. 공부의 강도 (Massive Intensity)

2~3 달안에 영어를 유창하게 하고 싶으면, 영어에 대한 공부의 강도를 강화해야한다.

매일 하루에 8~14 동안 듣고, 읽어야 한다. 영어를 끊임없이 듣고, 끊임없이 읽어야한다.

두 활동을 번갈아 가면서 하는게 좋다. 한시간은 듣고 한시간은 영어소설을 읽고…

스피킹에 중점을 둔다면 좀더 많이 들어라. 

이것들이 영어를 빨리 배우기 위한 전부이다.  이렇게 빠른 시간안에 공부하지 않아도 

된다면 하루에 2시간의 리스닝과 리딩으로도 충분하다.


빨리 향상되고 싶다면, 이 계획을 따르라. 




'학습로그 > 영어' 카테고리의 다른 글

[마인드맵] My House  (0) 2012.03.14
[마인드맵] Wedding  (0) 2012.03.06
영어를 빨리 배우는 방법  (0) 2011.04.12
ESL(cafe #274)  (0) 2011.03.02
[EE]Hitch1  (0) 2011.02.19
학습방법  (0) 2011.02.14

Inner Class(내부 클래스)

언어로그/Java 2011. 4. 12. 00:16



 오래전에 Inner Class  개념을 공부하면서  "Thinking In Java 4/e"  을 바탕으로 정리한 내용이다. 

1. 외곽클래스의 멤버메서드(static이 아닌)에서는 내부클래스의 객체를 다른 클래스 객체처럼 참조할 수 있다.

2. 외곽클래스의 static메서드에서는 반드시 '외곽클래스명.' 통해 내부클래스 객체를 참조할 수 있다

3. 내부 클래스 내부에서는 외곽클래스의 멤버를 자유롭게 참조할 수 있는데, 이것은 내부클래스가 자신을 생성한
    외곽클래스 객체의 참조를 은밀히 가지고 있기 때문이다. 내부클래스 객체 내부에서 '외곽클래스명.this'를 사용하여
    접근할 수 있다.

4.  내부클래스 객체 생성시, 특정 외곽클래스 객체와 연결하고자 할때(앞서 외곽클래스 this참조를 은밀히 갖느다고 했다)에는,
    해당 외곽클래스 객체에 대한 참조를 '.new'키워드에 지정해야 한다

5. 지역내부 클래스(local inner class)는 외곽클래스 멤버메서드 내부 또는 코드블록({}로 둘러싸인)에서 정의되고,  
   객체가 생성되는 것이다.  지역내부 클래스를 사용하는 이유는,
   (1) 특정인터페이스를 구현하는 내부 클래스의 객체를 생성후, 그 참조를 반환시거나,
   (2) 클래스의 접근을 일정범위 내로 제한하고자 할때

 6. 내부 클래스 왜 필요할까?
   내부클래스는 다중상속의 문제점을 해결하는 하나의 방안이다. 여러개의 인터페이스를 구현해서, 다중상속을 구현하지만,
    여전히 하나의 추상클래스 밖에 상속하지 못하기 때문에 제한이 있다. 이를 해결하는 것이 내부클래스로, 특정 클래스를
    내부클래스가 상속하게 하여 보다쉽게 다중상속의 기능을 제공하게 된다.

7. 이벤트 중심 시스템(Event Driven System)과 같은 제어 프레임워크의 구현에서, 내부클래스가 많이 사용된다.
   내부클래스를 사용한 제어 프레임워크의 한가지 예제 코드는 다음과 같다.


이벤트 기반 제어프레임워크 소스 예


이벤트를 정의하는 추상클래스 (어떠한 액션을 캡슐화한다)




이벤트를 큐에 쌓고, 순차적으로 실행시키는 컨트롤러 (이벤트들의 행위를 순차적으로 실행한다)




이벤트 추상클래스를 상속하는 구현 이벤트 클래스들 (구체적인 액션 대한 정의)
(불을 켜고, 끄고 벨을 누르고, 프로그램을 종료하는 이벤트들을 내부클래스를 사용해서 정의하였다.)




프로그램을 실행시키는  entry-point  클래스