클린코드
카테고리 미분류
지은이 로버트 C. 마틴 (케이앤피IT, 2010년)
상세보기


public class SetupTeardownIncluder {

	private PageData pageData;
	private boolean isSuite;
	private WikiPage testPage;
	private StringBuffer	newPageContent;
	private PageCrawler pageCrawler;
	
	public static String render(PageData pageData) throws Exception {
		return render(pageData, false);
	}
	
	public static String render(PageData pageData, boolean isSuite) throws Exception {
		return new SetupTeardownIncluder(pageData).render(isSuite);
	}
	
	private SetupTeardownIncluder(PageData pageData) {
		this.pageData = pageData;
		testPage = pageData.getWikiPage();
		pageCrawler = testPage.getPageCrawler();
		newPageContent = new StringBuffer();
	}
	
	private String render(boolean isSuite) throws Exception {
		this.isSuite = isSuite;
		if (isTestPage())
			includeSetupAndTeardownPages();
		return pageData.getHtml();
	}
	
	private boolean isTestPage() throws Exception {
		return pageData.hasAttribute("Test");
	}
	
	private void includeSetupAndTeardownPages() throws Exception {
		includeSetupPages();
		includePageContent();
		includeTeardownPages();
		updatePageContent();
	}
	
	private void includeSuiteSetupPage() throws Exception {
		include(SuiteResponder.SUITE_SETUP_NAME, "-setup");		
	}
	
	private void includeSetupPage() throws Exception {
		include("Setup", "-setup");		
	}
	
	private void includePageContent() throws Exception {
		newPageContent.append(pageData.getContent());
	}
	
	private void includeTeardownPages() throws Excepton {
		includeTeardownPage();
		if (isSuite)
			includeSuiteTeardownPage();
	}
	
	private void includeTeardownPage() throws Exception {
		include("TearDown", "-teardown");
	}
	
	private void includeSuiteTeardownPage() throws Exception {
		include(SuiteResponder.SUITE_TEARDOWN_NAME, "-teardown");
	}
	
	private void updatePageContent() throws Exception {
		pageData.setContent(newPageContent.toString());
	}
	
	private void include(String pageName, String arg) throws Exception {
		WikiPage inheritedPage = findInheritedPage(pageName);
		if ( inheritedPage != null ) {
			String pagePathName = getPathNameForPage(inheritedPage);
			buildIncludeDirective(pagePathName, arg);
		}
	}
	
	private WikiPage findInheritedPage(String pageName) throws Exception {
		return PageCrawlerImpl.getInheritedPage(pageName, testPage);
	}
	
	private String getPathNameForPage(WikiPage page) throws Exception {
		WikiPagePath pagePath = pageCrawler.getFullPath(page);
		return PathParser.render(pagePath);
	}
	
	private void buildIncludeDirective(String pagePathName, String arg) {
		newPageContent
			.append("\n!include ")
			.append(arg)
			.append(" .")
			.append(pagePathName)
			.append("\n");
	}
}

프레임워크가 어떤 것인지 이해하려면 라이브러리와 프레임워크가 어떻게 다른지 알아야 한다.

라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접제어한다.

단지 동작하는 중에 필요한 기능이 이쓸 때 능동적으로 라이브러리를 사용할 뿐이다.

 

반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다.

보통 프레임워크가 위에 개발한 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션코드를 사용하도록 만드는 방식이다.

프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 한다. 애플리케이션 코드는 프레임워크가 짜놓은 틀에서 수동적으로 동작해야 한다. 

 

--> 라이브러리를 사용하는 애플리케이션 : 애플리케이션이 필요할 때 라이브러리를 사용

--> 프레임워크를 사용하는 애플리케이션 : 프레임워크가 흐름을 주도하다가 필요한 애플리케이션을 사용

 

출처 : 토비의 스프링3, 1장_오브젝트와 의존관계

토비의스프링3
카테고리 컴퓨터/IT > 프로그래밍/언어 > 프로그래밍일반
지은이 이일민 (에이콘출판, 2010년)
상세보기


이 글은 스프링노트에서 작성되었습니다.

OS : Ubuntu
Language : Java

Ubuntu 환경에서 SVN을 설치하고 이클립스에 Subclipse를 설치한 후에 SVN을 연동하려고 하는데
[JavaHL] 관련 문제가 발생한다.

NOTE: as per the error message I am using Sun Java on my system.

해결방법 : 

Install libsvn-java

The Debian/Ubuntu package libsvn-java has the libsvnjavahl-1.so file that is required by JavaHL subversion interface. Install libsvn-java by typing the following into a command line:

sudo  apt-get install libsvn-java


svn 관련 library를 설치하고 나니 정상적으로 실행된다.

지난 TDD 강의 시간에 미처 못풀었던 소수구하기 문제를 풀어본다. 뭐, 이러면서 자바에 대한 감을 살려가는거 아니겠어?? +_+)


-- 실행결과 : 5 에서 10000 사이의 소수 구하기

확실히... 숫자를 키울수록 연산 속도는 오래 걸리는구나. +_+)

기능을 구현하는 방법은 참 여러가지다. 이것이 옳고 저것이 옳다라고 말하기는 어렵다.

뭐 그렇다. ㅎㅎ.

이 소스를 TDD로 적용하면 어떻게 될까나? ^^; 어떤 테스트 시나리오조건을 만들어서 만들어야 할까나?
안드로이드 개발을 위해서, Google 코드나 네이버의 저장소를 이용할 수도 있겠지만, 편하게 내 컴퓨터에 로컬영역에 설치하고 사용하는 게 편할 듯 하여 선택했는데, 설치하는 과정이 조금 번잡스럽다. 몇번의 반복을 통해 성공을 거두면서 이에 대한 기록을 남기려 한다.

참고사이트 :
- Extremely Agile : http://www.buggymind.com/143
- 꿈을 꾸는 블루비 : http://blueb.net/blog/1207
- 또다른 참고사항 : http://honeydeveloper.springnote.com/pages/5948859

1. apache2 설치
# sudo apt-get install apache2

2. subversion 과 libapache2-svn 설치
# sudo apt-get install subversion libapache2-svn

3. svn 파일 수정
# /etc/apache2/conf.d/svn

4. apache2 재시작
# sudo apache2ctl restart

5. eclipse 에서 subclipse 다운로드 및 설치 : << 관련링크 >>

Links for 1.6.x Release:
Changelog: http://subclipse.tigris.org/subclipse_1.6.x/changes.html
Eclipse update site URL: http://subclipse.tigris.org/update_1.6.x
Zipped downloads: http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240

Links for 1.4.x Release:
Changelog: http://subclipse.tigris.org/subclipse_1.4.x/changes.html
Eclipse update site URL: http://subclipse.tigris.org/update_1.4.x
Zipped downloads: http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240


+ Recent posts